libtasn1-4.16.0/0000755000000000000000000000000013615400132010261 500000000000000libtasn1-4.16.0/configure0000755000000000000000000220303313615375037012132 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for GNU Libtasn1 4.16.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: help-libtasn1@gnu.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Libtasn1' PACKAGE_TARNAME='libtasn1' PACKAGE_VERSION='4.16.0' PACKAGE_STRING='GNU Libtasn1 4.16.0' PACKAGE_BUGREPORT='help-libtasn1@gnu.org' PACKAGE_URL='http://www.gnu.org/software/libtasn1/' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= ac_subst_vars='gltests_LTLIBOBJS gltests_LIBOBJS gl_LTLIBOBJS gl_LIBOBJS CONFIG_INCLUDE am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS FUZZ_LIBS FUZZING_FALSE FUZZING_TRUE LIB_FUZZING_ENGINE CODE_COVERAGE_LIBS CODE_COVERAGE_CXXFLAGS CODE_COVERAGE_CFLAGS CODE_COVERAGE_CPPFLAGS GENHTML LCOV GCOV ifnGNUmake ifGNUmake CODE_COVERAGE_ENABLED CODE_COVERAGE_ENABLED_FALSE CODE_COVERAGE_ENABLED_TRUE WARN_CFLAGS LIBTESTS_LIBDEPS gltests_WITNESS VALGRIND WINDOWS_STAT_INODES WINDOWS_64_BIT_OFF_T NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H NEXT_SYS_TYPES_H NEXT_AS_FIRST_DIRECTIVE_STRING_H NEXT_STRING_H UNDEFINE_STRTOK_R REPLACE_STRSIGNAL REPLACE_STRERROR_R REPLACE_STRERROR REPLACE_STRTOK_R REPLACE_STRCASESTR REPLACE_STRSTR REPLACE_STRNLEN REPLACE_STRNDUP REPLACE_STRNCAT REPLACE_STRDUP REPLACE_STRCHRNUL REPLACE_STPNCPY REPLACE_MEMMEM REPLACE_MEMCHR HAVE_STRVERSCMP HAVE_DECL_STRSIGNAL HAVE_DECL_STRERROR_R HAVE_DECL_STRTOK_R HAVE_STRCASESTR HAVE_STRSEP HAVE_STRPBRK HAVE_DECL_STRNLEN HAVE_DECL_STRNDUP HAVE_DECL_STRDUP HAVE_STRCHRNUL HAVE_STPNCPY HAVE_STPCPY HAVE_RAWMEMCHR HAVE_DECL_MEMRCHR HAVE_MEMPCPY HAVE_DECL_MEMMEM HAVE_MEMCHR HAVE_FFSLL HAVE_FFSL HAVE_EXPLICIT_BZERO HAVE_MBSLEN GNULIB_STRVERSCMP GNULIB_STRSIGNAL GNULIB_STRERROR_R GNULIB_STRERROR GNULIB_MBSTOK_R GNULIB_MBSSEP GNULIB_MBSSPN GNULIB_MBSPBRK GNULIB_MBSCSPN GNULIB_MBSCASESTR GNULIB_MBSPCASECMP GNULIB_MBSNCASECMP GNULIB_MBSCASECMP GNULIB_MBSSTR GNULIB_MBSRCHR GNULIB_MBSCHR GNULIB_MBSNLEN GNULIB_MBSLEN GNULIB_STRTOK_R GNULIB_STRCASESTR GNULIB_STRSTR GNULIB_STRSEP GNULIB_STRPBRK GNULIB_STRNLEN GNULIB_STRNDUP GNULIB_STRNCAT GNULIB_STRDUP GNULIB_STRCHRNUL GNULIB_STPNCPY GNULIB_STPCPY GNULIB_RAWMEMCHR GNULIB_MEMRCHR GNULIB_MEMPCPY GNULIB_MEMMEM GNULIB_MEMCHR GNULIB_FFSLL GNULIB_FFSL GNULIB_EXPLICIT_BZERO GL_GENERATE_STDINT_H_FALSE GL_GENERATE_STDINT_H_TRUE STDINT_H HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H HAVE_C99_STDINT_H WINT_T_SUFFIX WCHAR_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX PTRDIFF_T_SUFFIX HAVE_SIGNED_WINT_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_SIG_ATOMIC_T BITSIZEOF_WINT_T BITSIZEOF_WCHAR_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_PTRDIFF_T HAVE_STDINT_H NEXT_AS_FIRST_DIRECTIVE_STDINT_H NEXT_STDINT_H HAVE_SYS_TYPES_H HAVE_INTTYPES_H HAVE_WCHAR_H HAVE_UNSIGNED_LONG_LONG_INT HAVE_LONG_LONG_INT GNULIB_OVERRIDES_WINT_T NEXT_AS_FIRST_DIRECTIVE_STDDEF_H NEXT_STDDEF_H GL_GENERATE_STDDEF_H_FALSE GL_GENERATE_STDDEF_H_TRUE STDDEF_H HAVE_WCHAR_T HAVE_MAX_ALIGN_T REPLACE_NULL HAVE__BOOL GL_GENERATE_STDBOOL_H_FALSE GL_GENERATE_STDBOOL_H_TRUE STDBOOL_H APPLE_UNIVERSAL_BUILD GL_GENERATE_LIMITS_H_FALSE GL_GENERATE_LIMITS_H_TRUE LIMITS_H NEXT_AS_FIRST_DIRECTIVE_LIMITS_H NEXT_LIMITS_H PRAGMA_COLUMNS PRAGMA_SYSTEM_HEADER INCLUDE_NEXT_AS_FIRST_DIRECTIVE INCLUDE_NEXT HAVE_VISIBILITY CFLAG_VISIBILITY HAVE_LD_VERSION_SCRIPT_FALSE HAVE_LD_VERSION_SCRIPT_TRUE GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE GTK_DOC_USE_REBASE_FALSE GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_BUILD_PDF_FALSE GTK_DOC_BUILD_PDF_TRUE GTK_DOC_BUILD_HTML_FALSE GTK_DOC_BUILD_HTML_TRUE ENABLE_GTK_DOC_FALSE ENABLE_GTK_DOC_TRUE HAVE_GTK_DOC_FALSE HAVE_GTK_DOC_TRUE GTKDOC_DEPS_LIBS GTKDOC_DEPS_CFLAGS HTML_DIR GTKDOC_MKPDF GTKDOC_REBASE GTKDOC_CHECK_PATH GTKDOC_CHECK PKG_CONFIG LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL OBJDUMP DLLTOOL AS host_os host_vendor host_cpu host build_os build_vendor build_cpu build HELP2MAN ENABLE_DOC_FALSE ENABLE_DOC_TRUE YFLAGS YACC RANLIB ARFLAGS ac_ct_AR AR EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ASN1_VERSION_NUMBER ASN1_VERSION_PATCH ASN1_VERSION_MINOR ASN1_VERSION_MAJOR LT_AGE LT_REVISION LT_CURRENT AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_doc enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock with_html_dir enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf enable_ld_version_script enable_valgrind_tests enable_gcc_warnings with_gcov enable_code_coverage enable_fuzzing ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP YACC YFLAGS LT_SYS_LIBRARY_PATH PKG_CONFIG GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures GNU Libtasn1 4.16.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 \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/libtasn1] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of GNU Libtasn1 4.16.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-doc don't generate any documentation --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] --enable-ld-version-script enable linker version script (default is enabled when possible) --enable-valgrind-tests try to run self tests under valgrind --disable-gcc-warnings disable GCC warnings (for developers) --enable-code-coverage Whether to enable code coverage support --enable-fuzzing Turn on fuzzing build (for developers) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-html-dir=PATH path to installed docs --with-gcov=GCOV use given GCOV for coverage (GCOV=gcov). 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 LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. LT_SYS_LIBRARY_PATH User-defined run-time library search path. PKG_CONFIG path to pkg-config utility GTKDOC_DEPS_CFLAGS C compiler flags for GTKDOC_DEPS, overriding pkg-config GTKDOC_DEPS_LIBS linker flags for GTKDOC_DEPS, overriding pkg-config 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 . GNU Libtasn1 home page: . General help using GNU software: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF GNU Libtasn1 configure 4.16.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------ ## ## Report this to help-libtasn1@gnu.org ## ## ------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by GNU Libtasn1 $as_me 4.16.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " limits.h" as_fn_append ac_header_list " wchar.h" as_fn_append ac_header_list " stdint.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='libtasn1' VERSION='4.16.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"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' # Library code modified: REVISION++ # Interfaces changed/added/removed: CURRENT++ REVISION=0 # Interfaces added: AGE++ # Interfaces removed: AGE=0 LT_CURRENT=12 LT_REVISION=0 LT_AGE=6 # Generate version defines for include file ASN1_VERSION_MAJOR=`echo $VERSION|cut -d'.' -f1` ASN1_VERSION_MINOR=`echo $VERSION|cut -d'.' -f2` # Let's activate the following line as soon as we change to extended version numbering #AC_SUBST([ASN1_VERSION_PATCH], [`echo $VERSION|cut -d'.' -f3`]) ASN1_VERSION_PATCH=`echo 0` ASN1_VERSION_NUMBER=`printf '0x%02x%02x%02x' $ASN1_VERSION_MAJOR $ASN1_VERSION_MINOR $ASN1_VERSION_PATCH` ac_config_files="$ac_config_files lib/includes/libtasn1.h" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 $as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h $as_echo "#define _OPENBSD_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 $as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; } if ${ac_cv_should_define__xopen_source+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_should_define__xopen_source=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 $as_echo "$ac_cv_should_define__xopen_source" >&6; } test $ac_cv_should_define__xopen_source = yes && $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h $as_echo "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 $as_echo_n "checking for Minix Amsterdam compiler... " >&6; } if ${gl_cv_c_amsterdam_compiler+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ACK__ Amsterdam #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Amsterdam" >/dev/null 2>&1; then : gl_cv_c_amsterdam_compiler=yes else gl_cv_c_amsterdam_compiler=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 $as_echo "$gl_cv_c_amsterdam_compiler" >&6; } if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="ar" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi if test -z "$ARFLAGS"; then ARFLAGS='cr' fi if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi fi fi # Pre-early section. # Code from module absolute-header: # Code from module c-ctype: # Code from module extensions: # Code from module extern-inline: # Code from module gnumakefile: # Code from module include_next: # Code from module intprops: # Code from module lib-symbol-versions: # Code from module lib-symbol-visibility: # Code from module libc-config: # Code from module limits-h: # Code from module maintainer-makefile: # Code from module manywarnings: # Code from module minmax: # Code from module multiarch: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module stdbool: # Code from module stddef: # Code from module stdint: # Code from module string: # Code from module strverscmp: # Code from module sys_types: # Code from module useless-if-before-free: # Code from module valgrind-tests: # Code from module vc-list-files: # Code from module warnings: for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_YACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" # Check whether --enable-doc was given. if test "${enable_doc+set}" = set; then : enableval=$enable_doc; enable_doc=$enableval else enable_doc=yes fi if test "$enable_doc" != "no"; then ENABLE_DOC_TRUE= ENABLE_DOC_FALSE='#' else ENABLE_DOC_TRUE='#' ENABLE_DOC_FALSE= fi for ac_func in clock_gettime fmemopen do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"} # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 $as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || 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 what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; 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* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else pic_mode=default fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else if ${lt_cv_with_aix_soname+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 $as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; 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 | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; 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 yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; 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 GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX 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") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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 # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$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 "x$output_objdir/$soname" = "x$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 yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; 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 archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; 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 CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; 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 # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # 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' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # 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' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # 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 dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-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='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi 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 shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # 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 no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi gtk_doc_requires="gtk-doc >= 1.2" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gtk-doc" >&5 $as_echo_n "checking for gtk-doc... " >&6; } if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_doc_requires\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_doc_requires") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then have_gtk_doc=yes else have_gtk_doc=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gtk_doc" >&5 $as_echo "$have_gtk_doc" >&6; } if test "$have_gtk_doc" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found." >&5 $as_echo "$as_me: WARNING: You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found." >&2;} fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_GTKDOC_CHECK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$GTKDOC_CHECK"; then ac_cv_prog_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_GTKDOC_CHECK="gtkdoc-check.test" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GTKDOC_CHECK=$ac_cv_prog_GTKDOC_CHECK if test -n "$GTKDOC_CHECK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 $as_echo "$GTKDOC_CHECK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_CHECK_PATH+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_CHECK_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_CHECK_PATH="$GTKDOC_CHECK_PATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_CHECK_PATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_CHECK_PATH=$ac_cv_path_GTKDOC_CHECK_PATH if test -n "$GTKDOC_CHECK_PATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK_PATH" >&5 $as_echo "$GTKDOC_CHECK_PATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi for ac_prog in gtkdoc-rebase do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_REBASE+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_REBASE in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE if test -n "$GTKDOC_REBASE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 $as_echo "$GTKDOC_REBASE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$GTKDOC_REBASE" && break done test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. set dummy gtkdoc-mkpdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_MKPDF+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_MKPDF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF if test -n "$GTKDOC_MKPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 $as_echo "$GTKDOC_MKPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-html-dir was given. if test "${with_html_dir+set}" = set; then : withval=$with_html_dir; else with_html_dir='${datadir}/gtk-doc/html' fi HTML_DIR="$with_html_dir" # Check whether --enable-gtk-doc was given. if test "${enable_gtk_doc+set}" = set; then : enableval=$enable_gtk_doc; else enable_gtk_doc=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 $as_echo_n "checking whether to build gtk-doc documentation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 $as_echo "$enable_gtk_doc" >&6; } if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then as_fn_error $? " You must have $gtk_doc_requires installed to build documentation for $PACKAGE_NAME. Please install gtk-doc or disable building the documentation by adding '--disable-gtk-doc' to '$0'." "$LINENO" 5 fi if test "x$PACKAGE_NAME" != "xglib"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5 $as_echo_n "checking for GTKDOC_DEPS... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$GTKDOC_DEPS_CFLAGS"; then pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$GTKDOC_DEPS_LIBS"; then pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0"` else GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0"` fi # Put the nasty error message in config.log where it belongs echo "$GTKDOC_DEPS_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : elif test $pkg_failed = untried; then : else GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : fi fi # Check whether --enable-gtk-doc-html was given. if test "${enable_gtk_doc_html+set}" = set; then : enableval=$enable_gtk_doc_html; else enable_gtk_doc_html=yes fi # Check whether --enable-gtk-doc-pdf was given. if test "${enable_gtk_doc_pdf+set}" = set; then : enableval=$enable_gtk_doc_pdf; else enable_gtk_doc_pdf=no fi if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi if test x$have_gtk_doc = xyes; then HAVE_GTK_DOC_TRUE= HAVE_GTK_DOC_FALSE='#' else HAVE_GTK_DOC_TRUE='#' HAVE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc = xyes; then ENABLE_GTK_DOC_TRUE= ENABLE_GTK_DOC_FALSE='#' else ENABLE_GTK_DOC_TRUE='#' ENABLE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc_html = xyes; then GTK_DOC_BUILD_HTML_TRUE= GTK_DOC_BUILD_HTML_FALSE='#' else GTK_DOC_BUILD_HTML_TRUE='#' GTK_DOC_BUILD_HTML_FALSE= fi if test x$enable_gtk_doc_pdf = xyes; then GTK_DOC_BUILD_PDF_TRUE= GTK_DOC_BUILD_PDF_FALSE='#' else GTK_DOC_BUILD_PDF_TRUE='#' GTK_DOC_BUILD_PDF_FALSE= fi if test -n "$LIBTOOL"; then GTK_DOC_USE_LIBTOOL_TRUE= GTK_DOC_USE_LIBTOOL_FALSE='#' else GTK_DOC_USE_LIBTOOL_TRUE='#' GTK_DOC_USE_LIBTOOL_FALSE= fi if test -n "$GTKDOC_REBASE"; then GTK_DOC_USE_REBASE_TRUE= GTK_DOC_USE_REBASE_FALSE='#' else GTK_DOC_USE_REBASE_TRUE='#' GTK_DOC_USE_REBASE_FALSE= fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long int" >&5 $as_echo_n "checking size of unsigned long int... " >&6; } if ${ac_cv_sizeof_unsigned_long_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long int))" "ac_cv_sizeof_unsigned_long_int" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_long_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned long int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_long_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_int" >&5 $as_echo "$ac_cv_sizeof_unsigned_long_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_LONG_INT $ac_cv_sizeof_unsigned_long_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5 $as_echo_n "checking size of unsigned int... " >&6; } if ${ac_cv_sizeof_unsigned_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5 $as_echo "$ac_cv_sizeof_unsigned_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int _ACEOF # For gnulib compatibility modules. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 $as_echo_n "checking whether the preprocessor supports include_next... " >&6; } if ${gl_cv_have_include_next+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=yes else CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=buggy else gl_cv_have_include_next=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 $as_echo "$gl_cv_have_include_next" >&6; } PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5 $as_echo_n "checking whether system header files limit the line length... " >&6; } if ${gl_cv_pragma_columns+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __TANDEM choke me #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "choke me" >/dev/null 2>&1; then : gl_cv_pragma_columns=yes else gl_cv_pragma_columns=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5 $as_echo "$gl_cv_pragma_columns" >&6; } if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test $gl_cv_have_include_next = yes; then gl_cv_next_limits_h='<'limits.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_limits_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_limits_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'limits.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_limits_h gl_cv_next_limits_h='"'$gl_header'"' else gl_cv_next_limits_h='<'limits.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 $as_echo "$gl_cv_next_limits_h" >&6; } fi NEXT_LIMITS_H=$gl_cv_next_limits_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'limits.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_limits_h fi NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc." >&5 $as_echo_n "checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.... " >&6; } if ${gl_cv_header_limits_width+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_limits_width=yes else gl_cv_header_limits_width=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5 $as_echo "$gl_cv_header_limits_width" >&6; } if test "$gl_cv_header_limits_width" = yes; then LIMITS_H= else LIMITS_H=limits.h fi if test -n "$LIMITS_H"; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether defines MIN and MAX" >&5 $as_echo_n "checking whether defines MIN and MAX... " >&6; } if ${gl_cv_minmax_in_limits_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int x = MIN (42, 17); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_minmax_in_limits_h=yes else gl_cv_minmax_in_limits_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_limits_h" >&5 $as_echo "$gl_cv_minmax_in_limits_h" >&6; } if test $gl_cv_minmax_in_limits_h = yes; then $as_echo "#define HAVE_MINMAX_IN_LIMITS_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether defines MIN and MAX" >&5 $as_echo_n "checking whether defines MIN and MAX... " >&6; } if ${gl_cv_minmax_in_sys_param_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int x = MIN (42, 17); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_minmax_in_sys_param_h=yes else gl_cv_minmax_in_sys_param_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_sys_param_h" >&5 $as_echo "$gl_cv_minmax_in_sys_param_h" >&6; } if test $gl_cv_minmax_in_sys_param_h = yes; then $as_echo "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h fi gl_cv_c_multiarch=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi REPLACE_NULL=0; HAVE_MAX_ALIGN_T=1; HAVE_WCHAR_T=1; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if ${gt_cv_c_wchar_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wchar_t=yes else gt_cv_c_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 $as_echo "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 $as_echo_n "checking for wint_t... " >&6; } if ${gt_cv_c_wint_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wint_t=yes else gt_cv_c_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 $as_echo "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then $as_echo "#define HAVE_WINT_T 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5 $as_echo_n "checking whether wint_t is too small... " >&6; } if ${gl_cv_type_wint_t_too_small+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_wint_t_too_small=no else gl_cv_type_wint_t_too_small=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5 $as_echo "$gl_cv_type_wint_t_too_small" >&6; } if test $gl_cv_type_wint_t_too_small = yes; then GNULIB_OVERRIDES_WINT_T=1 else GNULIB_OVERRIDES_WINT_T=0 fi else GNULIB_OVERRIDES_WINT_T=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 $as_echo_n "checking for unsigned long long int... " >&6; } if ${ac_cv_type_unsigned_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63; int main () { /* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else ac_cv_type_unsigned_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 $as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } if test $ac_cv_type_unsigned_long_long_int = yes; then $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 $as_echo_n "checking for long long int... " >&6; } if ${ac_cv_type_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX # define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif int main () { long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_type_long_long_int=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 $as_echo "$ac_cv_type_long_long_int" >&6; } if test $ac_cv_type_long_long_int = yes; then $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h fi if test $ac_cv_type_long_long_int = yes; then HAVE_LONG_LONG_INT=1 else HAVE_LONG_LONG_INT=0 fi if test $ac_cv_type_unsigned_long_long_int = yes; then HAVE_UNSIGNED_LONG_LONG_INT=1 else HAVE_UNSIGNED_LONG_LONG_INT=0 fi if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_stdint_h='<'stdint.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_stdint_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdint.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdint_h gl_cv_next_stdint_h='"'$gl_header'"' else gl_cv_next_stdint_h='<'stdint.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 $as_echo "$gl_cv_next_stdint_h" >&6; } fi NEXT_STDINT_H=$gl_cv_next_stdint_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdint.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdint_h fi NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi if test $ac_cv_header_stdint_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 $as_echo_n "checking whether stdint.h conforms to C99... " >&6; } if ${gl_cv_header_working_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_working_stdint_h=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in " #endif /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0 / ia64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include #include #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; int main () { const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_header_working_stdint_h=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 $as_echo "$gl_cv_header_working_stdint_h" >&6; } fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h predates C++11" >&5 $as_echo_n "checking whether stdint.h predates C++11... " >&6; } if ${gl_cv_header_stdint_predates_cxx11_h+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_stdint_predates_cxx11_h=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_predates_cxx11_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_predates_cxx11_h" >&5 $as_echo "$gl_cv_header_stdint_predates_cxx11_h" >&6; } if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then $as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h $as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 $as_echo_n "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } if ${gl_cv_header_stdint_width+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_stdint_width=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif int iw = UINTMAX_WIDTH; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_width=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5 $as_echo "$gl_cv_header_stdint_width" >&6; } if test "$gl_cv_header_stdint_width" = yes; then STDINT_H= fi ;; *) for ac_header in sys/inttypes.h sys/bitypes.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 $as_echo_n "checking for bit size of $gltype... " >&6; } if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include "; then : else result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` cat >>confdefs.h <<_ACEOF #define BITSIZEOF_${GLTYPE} $result _ACEOF eval BITSIZEOF_${GLTYPE}=\$result done fi for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 $as_echo_n "checking for bit size of $gltype... " >&6; } if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include "; then : else result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` cat >>confdefs.h <<_ACEOF #define BITSIZEOF_${GLTYPE} $result _ACEOF eval BITSIZEOF_${GLTYPE}=\$result done for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 $as_echo_n "checking whether $gltype is signed... " >&6; } if eval \${gl_cv_type_${gltype}_signed+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : result=yes else result=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval gl_cv_type_${gltype}_signed=\$result fi eval ac_res=\$gl_cv_type_${gltype}_signed { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_SIGNED_${GLTYPE} 1 _ACEOF eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 $as_echo_n "checking for $gltype integer literal suffix... " >&6; } if eval \${gl_cv_type_${gltype}_suffix+:} false; then : $as_echo_n "(cached) " >&6 else eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif extern $gltype foo; extern $gltype1 foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result cat >>confdefs.h <<_ACEOF #define ${GLTYPE}_SUFFIX $result _ACEOF done fi for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 $as_echo_n "checking for $gltype integer literal suffix... " >&6; } if eval \${gl_cv_type_${gltype}_suffix+:} false; then : $as_echo_n "(cached) " >&6 else eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif extern $gltype foo; extern $gltype1 foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result cat >>confdefs.h <<_ACEOF #define ${GLTYPE}_SUFFIX $result _ACEOF done if test $GNULIB_OVERRIDES_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ;; esac LIMITS_H='limits.h' if test -n "$LIMITS_H"; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi if test -n "$STDINT_H"; then GL_GENERATE_STDINT_H_TRUE= GL_GENERATE_STDINT_H_FALSE='#' else GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 $as_echo_n "checking for C/C++ restrict keyword... " >&6; } if ${ac_cv_c_restrict+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } int main () { int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 $as_echo "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) $as_echo "#define restrict /**/" >>confdefs.h ;; *) cat >>confdefs.h <<_ACEOF #define restrict $ac_cv_c_restrict _ACEOF ;; esac GNULIB_EXPLICIT_BZERO=0; GNULIB_FFSL=0; GNULIB_FFSLL=0; GNULIB_MEMCHR=0; GNULIB_MEMMEM=0; GNULIB_MEMPCPY=0; GNULIB_MEMRCHR=0; GNULIB_RAWMEMCHR=0; GNULIB_STPCPY=0; GNULIB_STPNCPY=0; GNULIB_STRCHRNUL=0; GNULIB_STRDUP=0; GNULIB_STRNCAT=0; GNULIB_STRNDUP=0; GNULIB_STRNLEN=0; GNULIB_STRPBRK=0; GNULIB_STRSEP=0; GNULIB_STRSTR=0; GNULIB_STRCASESTR=0; GNULIB_STRTOK_R=0; GNULIB_MBSLEN=0; GNULIB_MBSNLEN=0; GNULIB_MBSCHR=0; GNULIB_MBSRCHR=0; GNULIB_MBSSTR=0; GNULIB_MBSCASECMP=0; GNULIB_MBSNCASECMP=0; GNULIB_MBSPCASECMP=0; GNULIB_MBSCASESTR=0; GNULIB_MBSCSPN=0; GNULIB_MBSPBRK=0; GNULIB_MBSSPN=0; GNULIB_MBSSEP=0; GNULIB_MBSTOK_R=0; GNULIB_STRERROR=0; GNULIB_STRERROR_R=0; GNULIB_STRSIGNAL=0; GNULIB_STRVERSCMP=0; HAVE_MBSLEN=0; HAVE_EXPLICIT_BZERO=1; HAVE_FFSL=1; HAVE_FFSLL=1; HAVE_MEMCHR=1; HAVE_DECL_MEMMEM=1; HAVE_MEMPCPY=1; HAVE_DECL_MEMRCHR=1; HAVE_RAWMEMCHR=1; HAVE_STPCPY=1; HAVE_STPNCPY=1; HAVE_STRCHRNUL=1; HAVE_DECL_STRDUP=1; HAVE_DECL_STRNDUP=1; HAVE_DECL_STRNLEN=1; HAVE_STRPBRK=1; HAVE_STRSEP=1; HAVE_STRCASESTR=1; HAVE_DECL_STRTOK_R=1; HAVE_DECL_STRERROR_R=1; HAVE_DECL_STRSIGNAL=1; HAVE_STRVERSCMP=1; REPLACE_MEMCHR=0; REPLACE_MEMMEM=0; REPLACE_STPNCPY=0; REPLACE_STRCHRNUL=0; REPLACE_STRDUP=0; REPLACE_STRNCAT=0; REPLACE_STRNDUP=0; REPLACE_STRNLEN=0; REPLACE_STRSTR=0; REPLACE_STRCASESTR=0; REPLACE_STRTOK_R=0; REPLACE_STRERROR=0; REPLACE_STRERROR_R=0; REPLACE_STRSIGNAL=0; UNDEFINE_STRTOK_R=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_string_h='<'string.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_string_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_string_h gl_cv_next_string_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 $as_echo "$gl_cv_next_string_h" >&6; } fi NEXT_STRING_H=$gl_cv_next_string_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'string.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_string_h fi NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi WINDOWS_64_BIT_OFF_T=0 $as_echo "#define _USE_STD_STAT 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_types_h='<'sys/types.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_types_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/types.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_types_h gl_cv_next_sys_types_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 $as_echo "$gl_cv_next_sys_types_h" >&6; } fi NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/types.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_types_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive WINDOWS_STAT_INODES=0 if true; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=true gl_m4_base='m4-gl' gl_source_base='lib/gl' # Autoconf 2.61a.99 and earlier don't support linking a file only # in VPATH builds. But since GNUmakefile is for maintainer use # only, it does not matter if we skip the link with older autoconf. # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH # builds, so use a shell variable to bypass this. GNUmakefile=GNUmakefile ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile" # Check whether --enable-ld-version-script was given. if test "${enable_ld_version_script+set}" = set; then : enableval=$enable_ld_version_script; have_ld_version_script=$enableval else { $as_echo "$as_me:${as_lineno-$LINENO}: checking if LD -Wl,--version-script works" >&5 $as_echo_n "checking if LD -Wl,--version-script works... " >&6; } if ${gl_cv_sys_ld_version_script+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_sys_ld_version_script=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" echo foo >conftest.map cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else cat > conftest.map <conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_sys_ld_version_script=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext rm -f conftest.map LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_ld_version_script" >&5 $as_echo "$gl_cv_sys_ld_version_script" >&6; } have_ld_version_script=$gl_cv_sys_ld_version_script fi if test "$have_ld_version_script" = yes; then HAVE_LD_VERSION_SCRIPT_TRUE= HAVE_LD_VERSION_SCRIPT_FALSE='#' else HAVE_LD_VERSION_SCRIPT_TRUE='#' HAVE_LD_VERSION_SCRIPT_FALSE= fi CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 $as_echo_n "checking whether the -Werror option is usable... " >&6; } if ${gl_cv_cc_vis_werror+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_vis_werror=yes else gl_cv_cc_vis_werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 $as_echo "$gl_cv_cc_vis_werror" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 $as_echo_n "checking for simple visibility declarations... " >&6; } if ${gl_cv_cc_visibility+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void) {} int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_visibility=yes else gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 $as_echo "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi cat >>confdefs.h <<_ACEOF #define HAVE_VISIBILITY $HAVE_VISIBILITY _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the __inline keyword" >&5 $as_echo_n "checking whether the compiler supports the __inline keyword... " >&6; } if ${gl_cv_c___inline+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int foo_t; static __inline foo_t foo (void) { return 0; } int main () { return foo (); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_c___inline=yes else gl_cv_c___inline=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c___inline" >&5 $as_echo "$gl_cv_c___inline" >&6; } if test $gl_cv_c___inline = yes; then $as_echo "#define HAVE___INLINE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 $as_echo_n "checking for ssize_t... " >&6; } if ${gt_cv_ssize_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_ssize_t=yes else gt_cv_ssize_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5 $as_echo "$gt_cv_ssize_t" >&6; } if test $gt_cv_ssize_t = no; then $as_echo "#define ssize_t int" >>confdefs.h fi # Define two additional variables used in the Makefile substitution. if test "$ac_cv_header_stdbool_h" = yes; then STDBOOL_H='' else STDBOOL_H='stdbool.h' fi if test -n "$STDBOOL_H"; then GL_GENERATE_STDBOOL_H_TRUE= GL_GENERATE_STDBOOL_H_FALSE='#' else GL_GENERATE_STDBOOL_H_TRUE='#' GL_GENERATE_STDBOOL_H_FALSE= fi if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi STDDEF_H= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5 $as_echo_n "checking for good max_align_t... " >&6; } if ${gl_cv_type_max_align_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_max_align_t=yes else gl_cv_type_max_align_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5 $as_echo "$gl_cv_type_max_align_t" >&6; } if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 STDDEF_H=stddef.h fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 $as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } if ${gl_cv_decl_null_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_decl_null_works=yes else gl_cv_decl_null_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 $as_echo "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi if test -n "$STDDEF_H"; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi if test -n "$STDDEF_H"; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stddef_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 $as_echo "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi for ac_func in strverscmp do : ac_fn_c_check_func "$LINENO" "strverscmp" "ac_cv_func_strverscmp" if test "x$ac_cv_func_strverscmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRVERSCMP 1 _ACEOF fi done if test $ac_cv_func_strverscmp = no; then HAVE_STRVERSCMP=0 fi if test $HAVE_STRVERSCMP = 0; then gl_LIBOBJS="$gl_LIBOBJS strverscmp.$ac_objext" : fi GNULIB_STRVERSCMP=1 $as_echo "#define GNULIB_TEST_STRVERSCMP 1" >>confdefs.h # Check whether --enable-valgrind-tests was given. if test "${enable_valgrind_tests+set}" = set; then : enableval=$enable_valgrind_tests; opt_valgrind_tests=$enableval else opt_valgrind_tests=no fi # Run self-tests under valgrind? if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then for ac_prog in valgrind do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_VALGRIND+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$VALGRIND"; then ac_cv_prog_VALGRIND="$VALGRIND" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_VALGRIND="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi VALGRIND=$ac_cv_prog_VALGRIND if test -n "$VALGRIND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND" >&5 $as_echo "$VALGRIND" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$VALGRIND" && break done if test "$VALGRIND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valgrind options for tests" >&5 $as_echo_n "checking for valgrind options for tests... " >&6; } if ${gl_cv_opt_valgrind_tests+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_opt_valgrind_tests="-q --error-exitcode=1 --leak-check=full" $VALGRIND $gl_valgrind_opts ls > /dev/null 2>&1 || gl_cv_opt_valgrind_tests=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_opt_valgrind_tests" >&5 $as_echo "$gl_cv_opt_valgrind_tests" >&6; } if test "$gl_cv_opt_valgrind_tests" != no; then VALGRIND="$VALGRIND $gl_cv_opt_valgrind_tests" else VALGRIND= fi fi fi # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='tests-gl' gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$gltests_WITNESS # Check whether --enable-valgrind-tests was given. if test "${enable_valgrind_tests+set}" = set; then : enableval=$enable_valgrind_tests; opt_valgrind_tests=$enableval else opt_valgrind_tests=no fi # Run self-tests under valgrind? if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then for ac_prog in valgrind do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_VALGRIND+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$VALGRIND"; then ac_cv_prog_VALGRIND="$VALGRIND" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_VALGRIND="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi VALGRIND=$ac_cv_prog_VALGRIND if test -n "$VALGRIND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND" >&5 $as_echo "$VALGRIND" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$VALGRIND" && break done if test "$VALGRIND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valgrind options for tests" >&5 $as_echo_n "checking for valgrind options for tests... " >&6; } if ${gl_cv_opt_valgrind_tests+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_opt_valgrind_tests="-q --error-exitcode=1 --leak-check=full" $VALGRIND $gl_valgrind_opts ls > /dev/null 2>&1 || gl_cv_opt_valgrind_tests=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_opt_valgrind_tests" >&5 $as_echo "$gl_cv_opt_valgrind_tests" >&6; } if test "$gl_cv_opt_valgrind_tests" != no; then VALGRIND="$VALGRIND $gl_cv_opt_valgrind_tests" else VALGRIND= fi fi fi LIBTESTS_LIBDEPS="$gltests_libdeps" # Check whether --enable-gcc-warnings was given. if test "${enable_gcc_warnings+set}" = set; then : enableval=$enable_gcc_warnings; case $enableval in yes|no) ;; *) as_fn_error $? "bad value $enableval for gcc-warnings option" "$LINENO" 5 ;; esac gl_gcc_warnings=$enableval else gl_gcc_warnings=yes fi if test "$gl_gcc_warnings" = yes; then 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 "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is supported" >&5 $as_echo_n "checking whether -Wno-missing-field-initializers is supported... " >&6; } if ${gl_cv_cc_nomfi_supported+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_nomfi_supported=yes else gl_cv_cc_nomfi_supported=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_nomfi_supported" >&5 $as_echo "$gl_cv_cc_nomfi_supported" >&6; } if test "$gl_cv_cc_nomfi_supported" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is needed" >&5 $as_echo_n "checking whether -Wno-missing-field-initializers is needed... " >&6; } if ${gl_cv_cc_nomfi_needed+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int f (void) { typedef struct { int a; int b; } s_t; s_t s1 = { 0, }; return s1.b; } int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_nomfi_needed=no else gl_cv_cc_nomfi_needed=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_nomfi_needed" >&5 $as_echo "$gl_cv_cc_nomfi_needed" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wuninitialized is supported" >&5 $as_echo_n "checking whether -Wuninitialized is supported... " >&6; } if ${gl_cv_cc_uninitialized_supported+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wuninitialized" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_uninitialized_supported=yes else gl_cv_cc_uninitialized_supported=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_uninitialized_supported" >&5 $as_echo "$gl_cv_cc_uninitialized_supported" >&6; } fi # List all gcc warning categories. # To compare this list to your installed GCC's, run this Bash command: # # comm -3 \ # <((sed -n 's/^ *\(-[^ 0-9][^ ]*\) .*/\1/p' manywarnings.m4; \ # awk '/^[^#]/ {print warnings}' ../build-aux/gcc-warning.spec) | sort) \ # <(LC_ALL=C gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort) gl_manywarn_set= for gl_manywarn_item in -fno-common \ -W \ -Wabsolute-value \ -Waddress \ -Waddress-of-packed-member \ -Waggressive-loop-optimizations \ -Wall \ -Wattribute-warning \ -Wattributes \ -Wbad-function-cast \ -Wbool-compare \ -Wbool-operation \ -Wbuiltin-declaration-mismatch \ -Wbuiltin-macro-redefined \ -Wcannot-profile \ -Wcast-align \ -Wcast-align=strict \ -Wcast-function-type \ -Wchar-subscripts \ -Wclobbered \ -Wcomment \ -Wcomments \ -Wcoverage-mismatch \ -Wcpp \ -Wdangling-else \ -Wdate-time \ -Wdeprecated \ -Wdeprecated-declarations \ -Wdesignated-init \ -Wdisabled-optimization \ -Wdiscarded-array-qualifiers \ -Wdiscarded-qualifiers \ -Wdiv-by-zero \ -Wdouble-promotion \ -Wduplicated-branches \ -Wduplicated-cond \ -Wduplicate-decl-specifier \ -Wempty-body \ -Wendif-labels \ -Wenum-compare \ -Wexpansion-to-defined \ -Wextra \ -Wformat-contains-nul \ -Wformat-extra-args \ -Wformat-nonliteral \ -Wformat-security \ -Wformat-signedness \ -Wformat-y2k \ -Wformat-zero-length \ -Wframe-address \ -Wfree-nonheap-object \ -Whsa \ -Wif-not-aligned \ -Wignored-attributes \ -Wignored-qualifiers \ -Wimplicit \ -Wimplicit-function-declaration \ -Wimplicit-int \ -Wincompatible-pointer-types \ -Winit-self \ -Winline \ -Wint-conversion \ -Wint-in-bool-context \ -Wint-to-pointer-cast \ -Winvalid-memory-model \ -Winvalid-pch \ -Wlogical-not-parentheses \ -Wlogical-op \ -Wmain \ -Wmaybe-uninitialized \ -Wmemset-elt-size \ -Wmemset-transposed-args \ -Wmisleading-indentation \ -Wmissing-attributes \ -Wmissing-braces \ -Wmissing-declarations \ -Wmissing-field-initializers \ -Wmissing-include-dirs \ -Wmissing-parameter-type \ -Wmissing-profile \ -Wmissing-prototypes \ -Wmultichar \ -Wmultistatement-macros \ -Wnarrowing \ -Wnested-externs \ -Wnonnull \ -Wnonnull-compare \ -Wnull-dereference \ -Wodr \ -Wold-style-declaration \ -Wold-style-definition \ -Wopenmp-simd \ -Woverflow \ -Woverlength-strings \ -Woverride-init \ -Wpacked \ -Wpacked-bitfield-compat \ -Wpacked-not-aligned \ -Wparentheses \ -Wpointer-arith \ -Wpointer-compare \ -Wpointer-sign \ -Wpointer-to-int-cast \ -Wpragmas \ -Wpsabi \ -Wrestrict \ -Wreturn-local-addr \ -Wreturn-type \ -Wscalar-storage-order \ -Wsequence-point \ -Wshadow \ -Wshift-count-negative \ -Wshift-count-overflow \ -Wshift-negative-value \ -Wsizeof-array-argument \ -Wsizeof-pointer-div \ -Wsizeof-pointer-memaccess \ -Wstack-protector \ -Wstrict-aliasing \ -Wstrict-overflow \ -Wstrict-prototypes \ -Wstringop-truncation \ -Wsuggest-attribute=cold \ -Wsuggest-attribute=const \ -Wsuggest-attribute=format \ -Wsuggest-attribute=malloc \ -Wsuggest-attribute=noreturn \ -Wsuggest-attribute=pure \ -Wsuggest-final-methods \ -Wsuggest-final-types \ -Wswitch \ -Wswitch-bool \ -Wswitch-unreachable \ -Wsync-nand \ -Wsystem-headers \ -Wtautological-compare \ -Wtrampolines \ -Wtrigraphs \ -Wtype-limits \ -Wuninitialized \ -Wunknown-pragmas \ -Wunsafe-loop-optimizations \ -Wunused \ -Wunused-but-set-parameter \ -Wunused-but-set-variable \ -Wunused-function \ -Wunused-label \ -Wunused-local-typedefs \ -Wunused-macros \ -Wunused-parameter \ -Wunused-result \ -Wunused-value \ -Wunused-variable \ -Wvarargs \ -Wvariadic-macros \ -Wvector-operation-performance \ -Wvla \ -Wvolatile-register-var \ -Wwrite-strings \ \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # gcc --help=warnings outputs an unusual form for these options; list # them here so that the above 'comm' command doesn't report a false match. # Would prefer "min (PTRDIFF_MAX, SIZE_MAX)", but it must be a literal. # Also, AC_COMPUTE_INT requires it to fit in a long; it is 2**63 on # the only platforms where it does not fit in a long, so make that # a special case. { $as_echo "$as_me:${as_lineno-$LINENO}: checking max safe object size" >&5 $as_echo_n "checking max safe object size... " >&6; } if ac_fn_c_compute_int "$LINENO" "LONG_MAX < (PTRDIFF_MAX < (size_t) -1 ? PTRDIFF_MAX : (size_t) -1) ? -1 : PTRDIFF_MAX < (size_t) -1 ? (long) PTRDIFF_MAX : (long) (size_t) -1" "gl_alloc_max" "#include #include #include "; then : else gl_alloc_max=2147483647 fi case $gl_alloc_max in -1) gl_alloc_max=9223372036854775807;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_alloc_max" >&5 $as_echo "$gl_alloc_max" >&6; } gl_manywarn_set="$gl_manywarn_set -Walloc-size-larger-than=$gl_alloc_max" gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2" gl_manywarn_set="$gl_manywarn_set -Wattribute-alias=2" gl_manywarn_set="$gl_manywarn_set -Wformat-overflow=2" gl_manywarn_set="$gl_manywarn_set -Wformat-truncation=2" gl_manywarn_set="$gl_manywarn_set -Wimplicit-fallthrough=5" gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc" gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2" gl_manywarn_set="$gl_manywarn_set -Wstringop-overflow=2" gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2" gl_manywarn_set="$gl_manywarn_set -Wvla-larger-than=4031" # These are needed for older GCC versions. if test -n "$GCC"; then case `($CC --version) 2>/dev/null` in 'gcc (GCC) '[0-3].* | \ 'gcc (GCC) '4.[0-7].*) gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option" gl_manywarn_set="$gl_manywarn_set -funit-at-a-time" ;; esac fi # Disable specific options as needed. if test "$gl_cv_cc_nomfi_needed" = yes; then gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" fi if test "$gl_cv_cc_uninitialized_supported" = no; then gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" fi warnings=$gl_manywarn_set 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 nw= nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings nw="$nw -Wc++-compat" # We don't care strongly about C++ compilers nw="$nw -Wundef" # All compiler preprocessors support #if UNDEF nw="$nw -Wtraditional" # All compilers nowadays support ANSI C nw="$nw -Wconversion" # These warnings usually don't point to mistakes. nw="$nw -Wpadded" # Padding internal structs doesn't help. nw="$nw -Wunused-macros" # Lot's of warnings in ASN1.y nw="$nw -Woverlength-strings" # Modern compilers handle strings > 4096 gracefully nw="$nw -Wsuggest-attribute=pure" # Asked for several nodes handling functions gl_warn_set= set x $warnings; shift for gl_warn_item do case " $nw " in *" $gl_warn_item "*) ;; *) gl_warn_set="$gl_warn_set $gl_warn_item" ;; esac done warnings=$gl_warn_set for w in $warnings; do ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror -Wunknown-warning-option" >&5 $as_echo_n "checking whether C compiler handles -Werror -Wunknown-warning-option... " >&6; } if ${gl_cv_warn_c__Werror__Wunknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Werror__Wunknown_warning_option=yes else gl_cv_warn_c__Werror__Wunknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Werror__Wunknown_warning_option" >&5 $as_echo "$gl_cv_warn_c__Werror__Wunknown_warning_option" >&6; } if test "x$gl_cv_warn_c__Werror__Wunknown_warning_option" = xyes; then : gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror' else gl_unknown_warnings_are_errors= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu as_gl_Warn=`$as_echo "gl_cv_warn_c_$w" | $as_tr_sh` gl_positive="$w" case $gl_positive in -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles $w" >&5 $as_echo_n "checking whether C compiler handles $w... " >&6; } if eval \${$as_gl_Warn+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors $gl_positive" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_gl_Warn=yes" else eval "$as_gl_Warn=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi eval ac_res=\$$as_gl_Warn { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Warn"\" = x"yes"; then : as_fn_append WARN_CFLAGS " $w" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-type-limits" >&5 $as_echo_n "checking whether C compiler handles -Wno-type-limits... " >&6; } if ${gl_cv_warn_c__Wno_type_limits+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wtype-limits" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_type_limits=yes else gl_cv_warn_c__Wno_type_limits=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_type_limits" >&5 $as_echo "$gl_cv_warn_c__Wno_type_limits" >&6; } if test "x$gl_cv_warn_c__Wno_type_limits" = xyes; then : as_fn_append WARN_CFLAGS " -Wno-type-limits" fi # Too many warnings from gnulib macros { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wformat-truncation=1" >&5 $as_echo_n "checking whether C compiler handles -Wformat-truncation=1... " >&6; } if ${gl_cv_warn_c__Wformat_truncation_1+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wformat-truncation=1" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wformat_truncation_1=yes else gl_cv_warn_c__Wformat_truncation_1=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wformat_truncation_1" >&5 $as_echo "$gl_cv_warn_c__Wformat_truncation_1" >&6; } if test "x$gl_cv_warn_c__Wformat_truncation_1" = xyes; then : as_fn_append WARN_CFLAGS " -Wformat-truncation=1" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wimplicit-fallthrough=2" >&5 $as_echo_n "checking whether C compiler handles -Wimplicit-fallthrough=2... " >&6; } if ${gl_cv_warn_c__Wimplicit_fallthrough_2+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wimplicit-fallthrough=2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wimplicit_fallthrough_2=yes else gl_cv_warn_c__Wimplicit_fallthrough_2=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wimplicit_fallthrough_2" >&5 $as_echo "$gl_cv_warn_c__Wimplicit_fallthrough_2" >&6; } if test "x$gl_cv_warn_c__Wimplicit_fallthrough_2" = xyes; then : as_fn_append WARN_CFLAGS " -Wimplicit-fallthrough=2" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-unused-parameter" >&5 $as_echo_n "checking whether C compiler handles -Wno-unused-parameter... " >&6; } if ${gl_cv_warn_c__Wno_unused_parameter+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-parameter" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_unused_parameter=yes else gl_cv_warn_c__Wno_unused_parameter=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_unused_parameter" >&5 $as_echo "$gl_cv_warn_c__Wno_unused_parameter" >&6; } if test "x$gl_cv_warn_c__Wno_unused_parameter" = xyes; then : as_fn_append WARN_CFLAGS " -Wno-unused-parameter" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -fdiagnostics-show-option" >&5 $as_echo_n "checking whether C compiler handles -fdiagnostics-show-option... " >&6; } if ${gl_cv_warn_c__fdiagnostics_show_option+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -fdiagnostics-show-option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__fdiagnostics_show_option=yes else gl_cv_warn_c__fdiagnostics_show_option=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__fdiagnostics_show_option" >&5 $as_echo "$gl_cv_warn_c__fdiagnostics_show_option" >&6; } if test "x$gl_cv_warn_c__fdiagnostics_show_option" = xyes; then : as_fn_append WARN_CFLAGS " -fdiagnostics-show-option" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -fdiagnostics-color=always" >&5 $as_echo_n "checking whether C compiler handles -fdiagnostics-color=always... " >&6; } if ${gl_cv_warn_c__fdiagnostics_color_always+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -fdiagnostics-color=always" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__fdiagnostics_color_always=yes else gl_cv_warn_c__fdiagnostics_color_always=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__fdiagnostics_color_always" >&5 $as_echo "$gl_cv_warn_c__fdiagnostics_color_always" >&6; } if test "x$gl_cv_warn_c__fdiagnostics_color_always" = xyes; then : as_fn_append WARN_CFLAGS " -fdiagnostics-color=always" fi # colors even when using ccache fi # allow to override gcov location # Check whether --with-gcov was given. if test "${with_gcov+set}" = set; then : withval=$with_gcov; _AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov else _AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with code coverage support" >&5 $as_echo_n "checking whether to build with code coverage support... " >&6; } # Check whether --enable-code-coverage was given. if test "${enable_code_coverage+set}" = set; then : enableval=$enable_code_coverage; else enable_code_coverage=no fi if test "x$enable_code_coverage" = xyes; then CODE_COVERAGE_ENABLED_TRUE= CODE_COVERAGE_ENABLED_FALSE='#' else CODE_COVERAGE_ENABLED_TRUE='#' CODE_COVERAGE_ENABLED_FALSE= fi CODE_COVERAGE_ENABLED=$enable_code_coverage { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_code_coverage" >&5 $as_echo "$enable_code_coverage" >&6; } if test "x$enable_code_coverage" = xyes ; then : for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU make" >&5 $as_echo_n "checking for GNU make... " >&6; } if ${_cv_gnu_make_command+:} false; then : $as_echo_n "(cached) " >&6 else _cv_gnu_make_command="" ; for a in "$MAKE" make gmake gnumake ; do if test -z "$a" ; then continue ; fi ; if "$a" --version 2> /dev/null | grep GNU 2>&1 > /dev/null ; then _cv_gnu_make_command=$a ; AX_CHECK_GNU_MAKE_HEADLINE=$("$a" --version 2> /dev/null | grep "GNU Make") ax_check_gnu_make_version=$(echo ${AX_CHECK_GNU_MAKE_HEADLINE} | ${AWK} -F " " '{ print $(NF); }') break ; fi done ; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cv_gnu_make_command" >&5 $as_echo "$_cv_gnu_make_command" >&6; } if test "x$_cv_gnu_make_command" = x""; then : ifGNUmake="#" else ifGNUmake="" fi if test "x$_cv_gnu_make_command" = x""; then : ifnGNUmake="" else ifGNUmake="#" fi if test "x$_cv_gnu_make_command" = x""; then : { ax_cv_gnu_make_command=; unset ax_cv_gnu_make_command;} else ax_cv_gnu_make_command=${_cv_gnu_make_command} fi if test "x$_cv_gnu_make_command" = x""; then : as_fn_error $? "not using GNU make that is needed for coverage" "$LINENO" 5 fi # check for gcov if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args. set dummy ${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_GCOV+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$GCOV"; then ac_cv_prog_GCOV="$GCOV" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_GCOV="${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GCOV=$ac_cv_prog_GCOV if test -n "$GCOV"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5 $as_echo "$GCOV" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_GCOV"; then ac_ct_GCOV=$GCOV # Extract the first word of "$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args. set dummy $_AX_CODE_COVERAGE_GCOV_PROG_WITH; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_GCOV+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_GCOV"; then ac_cv_prog_ac_ct_GCOV="$ac_ct_GCOV" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_GCOV="$_AX_CODE_COVERAGE_GCOV_PROG_WITH" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_GCOV=$ac_cv_prog_ac_ct_GCOV if test -n "$ac_ct_GCOV"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GCOV" >&5 $as_echo "$ac_ct_GCOV" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_GCOV" = x; then GCOV=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac GCOV=$ac_ct_GCOV fi else GCOV="$ac_cv_prog_GCOV" fi if test "X$GCOV" = "X:"; then : as_fn_error $? "gcov is needed to do coverage" "$LINENO" 5 fi if test "$GCC" = "no" ; then : as_fn_error $? "not compiling with gcc, which is required for gcov code coverage" "$LINENO" 5 fi # Extract the first word of "lcov", so it can be a program name with args. set dummy lcov; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LCOV+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LCOV"; then ac_cv_prog_LCOV="$LCOV" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LCOV="lcov" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LCOV=$ac_cv_prog_LCOV if test -n "$LCOV"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5 $as_echo "$LCOV" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "genhtml", so it can be a program name with args. set dummy genhtml; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_GENHTML+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$GENHTML"; then ac_cv_prog_GENHTML="$GENHTML" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_GENHTML="genhtml" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GENHTML=$ac_cv_prog_GENHTML if test -n "$GENHTML"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5 $as_echo "$GENHTML" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$LCOV" = x ; then : as_fn_error $? "To enable code coverage reporting you must have lcov installed" "$LINENO" 5 fi if test x"$GENHTML" = x ; then : as_fn_error $? "Could not find genhtml from the lcov package" "$LINENO" 5 fi CODE_COVERAGE_CPPFLAGS="-DNDEBUG" CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" CODE_COVERAGE_LIBS="-lgcov" fi # Check whether --enable-fuzzing was given. if test "${enable_fuzzing+set}" = set; then : enableval=$enable_fuzzing; enable_fuzzing=yes; else enable_fuzzing=no; LIB_FUZZING_ENGINE="" fi if test "$enable_fuzzing" = "yes"; then FUZZING_TRUE= FUZZING_FALSE='#' else FUZZING_TRUE='#' FUZZING_FALSE= fi OLD_LIBS=$LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5 $as_echo_n "checking for library containing dlsym... " >&6; } if ${ac_cv_search_dlsym+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlsym (); int main () { return dlsym (); ; return 0; } _ACEOF for ac_lib in '' dl dld; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_dlsym=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_dlsym+:} false; then : break fi done if ${ac_cv_search_dlsym+:} false; then : else ac_cv_search_dlsym=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5 $as_echo "$ac_cv_search_dlsym" >&6; } ac_res=$ac_cv_search_dlsym if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi FUZZ_LIBS=$LIBS LIBS=$OLD_LIBS ac_config_files="$ac_config_files Makefile doc/Makefile doc/reference/Makefile examples/Makefile lib/Makefile lib/gl/Makefile lib/libtasn1.pc src/Makefile tests/Makefile fuzz/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DOC_TRUE}" && test -z "${ENABLE_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GTK_DOC_TRUE}" && test -z "${HAVE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"HAVE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then as_fn_error $? "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi CONFIG_INCLUDE=config.h if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi gl_LIBOBJS=$gl_libobjs gl_LTLIBOBJS=$gl_ltlibobjs gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi gltests_LIBOBJS=$gltests_libobjs gltests_LTLIBOBJS=$gltests_ltlibobjs if test -z "${CODE_COVERAGE_ENABLED_TRUE}" && test -z "${CODE_COVERAGE_ENABLED_FALSE}"; then as_fn_error $? "conditional \"CODE_COVERAGE_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FUZZING_TRUE}" && test -z "${FUZZING_FALSE}"; then as_fn_error $? "conditional \"FUZZING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by GNU Libtasn1 $as_me 4.16.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_links="$ac_config_links" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration links: $config_links Configuration commands: $config_commands Report bugs to . GNU Libtasn1 home page: . General help using GNU software: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ GNU Libtasn1 config.status 4.16.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' GNUmakefile=$GNUmakefile _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "lib/includes/libtasn1.h") CONFIG_FILES="$CONFIG_FILES lib/includes/libtasn1.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/reference/Makefile") CONFIG_FILES="$CONFIG_FILES doc/reference/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "lib/gl/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gl/Makefile" ;; "lib/libtasn1.pc") CONFIG_FILES="$CONFIG_FILES lib/libtasn1.pc" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "fuzz/Makefile") CONFIG_FILES="$CONFIG_FILES fuzz/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :L) # # CONFIG_LINK # if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then : else # Prefer the file from the source tree if names are identical. if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then ac_source=$srcdir/$ac_source fi { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 $as_echo "$as_me: linking $ac_source to $ac_file" >&6;} if test ! -r "$ac_source"; then as_fn_error $? "$ac_source: file not found" "$LINENO" 5 fi rm -f "$ac_file" # Try a relative symlink, then a hard link, then a copy. case $ac_source in [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; *) ac_rel_source=$ac_top_build_prefix$ac_source ;; esac ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || ln "$ac_source" "$ac_file" 2>/dev/null || cp -p "$ac_source" "$ac_file" || as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: summary of build options: version: ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE Host type: ${host} Install prefix: ${prefix} Compiler: ${CC} Warning flags: errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS} Library types: Shared=${enable_shared}, Static=${enable_static} Valgrind: ${VALGRIND} Version script: $have_ld_version_script Fuzzing build: $enable_fuzzing, $LIB_FUZZING_ENGINE " >&5 $as_echo "$as_me: summary of build options: version: ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE Host type: ${host} Install prefix: ${prefix} Compiler: ${CC} Warning flags: errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS} Library types: Shared=${enable_shared}, Static=${enable_static} Valgrind: ${VALGRIND} Version script: $have_ld_version_script Fuzzing build: $enable_fuzzing, $LIB_FUZZING_ENGINE " >&6;} libtasn1-4.16.0/aclocal.m40000644000000000000000000013035513615375036012066 00000000000000# generated automatically by aclocal 1.16.1 -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ax_ac_append_to_file.m4]) m4_include([m4/ax_ac_print_to_file.m4]) m4_include([m4/ax_add_am_macro_static.m4]) m4_include([m4/ax_am_macros_static.m4]) m4_include([m4/ax_check_gnu_make.m4]) m4_include([m4/ax_code_coverage.m4]) m4_include([m4/ax_file_escapes.m4]) m4_include([m4/gtk-doc.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/pkg.m4]) m4_include([m4-gl/00gnulib.m4]) m4_include([m4-gl/__inline.m4]) m4_include([m4-gl/absolute-header.m4]) m4_include([m4-gl/extensions.m4]) m4_include([m4-gl/extern-inline.m4]) m4_include([m4-gl/gnulib-common.m4]) m4_include([m4-gl/gnulib-comp.m4]) m4_include([m4-gl/include_next.m4]) m4_include([m4-gl/ld-version-script.m4]) m4_include([m4-gl/limits-h.m4]) m4_include([m4-gl/longlong.m4]) m4_include([m4-gl/manywarnings.m4]) m4_include([m4-gl/minmax.m4]) m4_include([m4-gl/multiarch.m4]) m4_include([m4-gl/off_t.m4]) m4_include([m4-gl/ssize_t.m4]) m4_include([m4-gl/stdbool.m4]) m4_include([m4-gl/stddef_h.m4]) m4_include([m4-gl/stdint.m4]) m4_include([m4-gl/string_h.m4]) m4_include([m4-gl/strverscmp.m4]) m4_include([m4-gl/sys_types_h.m4]) m4_include([m4-gl/valgrind-tests.m4]) m4_include([m4-gl/visibility.m4]) m4_include([m4-gl/warn-on-use.m4]) m4_include([m4-gl/warnings.m4]) m4_include([m4-gl/wchar_t.m4]) m4_include([m4-gl/wint_t.m4]) libtasn1-4.16.0/tests/0000755000000000000000000000000013615400132011423 500000000000000libtasn1-4.16.0/tests/object-id-encoding.c0000644000000000000000000000721113611145057015144 00000000000000/* * Copyright (C) 2019 Nikos Mavrogiannopoulos * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include "libtasn1.h" struct tv { int der_len; const unsigned char *der; const char *oid; int expected_error; }; static const struct tv tv[] = { {.der_len = 0, .der = (void *) "", .oid = "5.999.3", .expected_error = ASN1_VALUE_NOT_VALID /* cannot start with 5 */ }, {.der_len = 0, .der = (void *) "", .oid = "0.48.9", .expected_error = ASN1_VALUE_NOT_VALID /* second field cannot be 48 */ }, {.der_len = 0, .der = (void *) "", .oid = "1.40.9", .expected_error = ASN1_VALUE_NOT_VALID /* second field cannot be 40 */ }, {.der_len = 4, .der = (void *) "\x06\x02\x4f\x63", .oid = "1.39.99", .expected_error = ASN1_SUCCESS, }, {.der_len = 6, .der = (void *) "\x06\x04\x01\x02\x03\x04", .oid = "0.1.2.3.4", .expected_error = ASN1_SUCCESS}, {.der_len = 5, .der = (void *) "\x06\x03\x51\x02\x03", .oid = "2.1.2.3", .expected_error = ASN1_SUCCESS}, {.der_len = 5, .der = (void *) "\x06\x03\x88\x37\x03", .oid = "2.999.3", .expected_error = ASN1_SUCCESS}, {.der_len = 12, .der = (void *) "\x06\x0a\x2b\x06\x01\x04\x01\x92\x08\x09\x05\x01", .oid = "1.3.6.1.4.1.2312.9.5.1", .expected_error = ASN1_SUCCESS}, {.der_len = 19, .der = (void *) "\x06\x11\xfa\x80\x00\x00\x00\x0e\x01\x0e\xfa\x80\x00\x00\x00\x0e\x63\x6f\x6d", .oid = "2.1998768.0.0.14.1.14.1998848.0.0.14.99.111.109", .expected_error = ASN1_SUCCESS}, {.der_len = 19, .der = (void *) "\x06\x11\x2b\x06\x01\x04\x01\x92\x08\x09\x02\xaa\xda\xbe\xbe\xfa\x72\x01\x07", .oid = "1.3.6.1.4.1.2312.9.2.1467399257458.1.7", .expected_error = ASN1_SUCCESS}, }; int main (int argc, char *argv[]) { unsigned char der[128]; int ret, der_len, i, j; for (i = 0; i < (int)(sizeof (tv) / sizeof (tv[0])); i++) { der_len = sizeof(der); ret = asn1_object_id_der(tv[i].oid, der, &der_len, 0); if (ret != ASN1_SUCCESS) { if (ret == tv[i].expected_error) continue; fprintf (stderr, "%d: iter %lu, encoding of OID failed: %s\n", __LINE__, (unsigned long) i, asn1_strerror(ret)); return 1; } else if (ret != tv[i].expected_error) { fprintf (stderr, "%d: iter %lu, encoding of OID %s succeeded when expecting failure\n", __LINE__, (unsigned long) i, tv[i].oid); return 1; } if (der_len != tv[i].der_len || memcmp(der, tv[i].der, der_len) != 0) { fprintf (stderr, "%d: iter %lu, re-encoding of OID %s resulted to different string (%d vs %d bytes)\n", __LINE__, (unsigned long) i, tv[i].oid, der_len, tv[i].der_len); fprintf(stderr, "\nGot:\t\t"); for (j=0;j. * */ /* Written by Simon Josefsson */ #include #include #include #include #include "libtasn1.h" int main (int argc, char **argv) { /* Test that values larger than long are rejected. This has worked fine with all versions of libtasn1. */ int verbose = 0; if (argc > 1) verbose = 1; { unsigned char der[] = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"; long l; int len; l = asn1_get_length_der (der, sizeof der, &len); if (l == -2L) { if (verbose) puts ("OK: asn1_get_length_der bignum"); } else { printf ("ERROR: asn1_get_length_der bignum (l %ld len %d)\n", l, len); return 1; } } /* Test that values larger than int but smaller than long are rejected. This limitation was introduced with libtasn1 2.12. */ if (LONG_MAX > INT_MAX) { unsigned long num = ((long) UINT_MAX) << 2; unsigned char der[20]; int der_len; long l; int len; asn1_length_der (num, der, &der_len); l = asn1_get_length_der (der, der_len, &len); if (l == -2L) { if (verbose) puts ("OK: asn1_get_length_der intnum"); } else { printf ("ERROR: asn1_get_length_der intnum (l %ld len %d)\n", l, len); return 1; } } /* Test that values larger than would fit in the input string are rejected. This problem was fixed in libtasn1 2.12. */ { unsigned long num = 64; unsigned char der[20]; int der_len; long l; int len; asn1_length_der (num, der, &der_len); der_len = sizeof (der); l = asn1_get_length_der (der, der_len, &len); if (l == -4L) { if (verbose) puts ("OK: asn1_get_length_der overflow-small"); } else { printf ("ERROR: asn1_get_length_der overflow-small (l %ld len %d)\n", l, len); return 1; } } /* Test that values larger than would fit in the input string are rejected. This problem was fixed in libtasn1 2.12. */ { unsigned long num = 1073741824; unsigned char der[20]; int der_len; long l; int len; asn1_length_der (num, der, &der_len); der_len = sizeof (der); l = asn1_get_length_der (der, der_len, &len); if (l == -4L) { if (verbose) puts ("OK: asn1_get_length_der overflow-large1"); } else { printf ("ERROR: asn1_get_length_der overflow-large1 (l %ld len %d)\n", l, len); return 1; } } /* Test that values larger than would fit in the input string are rejected. This problem was fixed in libtasn1 2.12. */ { unsigned long num = 2147483649; unsigned char der[20]; int der_len; long l; int len; asn1_length_der (num, der, &der_len); der_len = sizeof (der); l = asn1_get_length_der (der, der_len, &len); if (l == -2L) { if (verbose) puts ("OK: asn1_get_length_der overflow-large2"); } else { printf ("ERROR: asn1_get_length_der overflow-large2 (l %ld len %d)\n", l, len); return 1; } } return 0; } libtasn1-4.16.0/tests/spc_pe_image_data.der0000644000000000000000000000005013246341643015451 000000000000000&   ¢€<<<Obsolete>>>libtasn1-4.16.0/tests/Test_tree.asn0000644000000000000000000001063313512673553014026 00000000000000-- -- File used in the test sequence Test_tree. -- TEST_TREE {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)} DEFINITIONS IMPLICIT TAGS ::= BEGIN KrbError ::= [APPLICATION 30] SEQUENCE { pvno[0] INTEGER } Checksum ::= SEQUENCE { checksum [1] OCTET STRING } CertTemplate ::= SEQUENCE { version [0] INTEGER OPTIONAL, issuer [3] Name OPTIONAL, validity [4] INTEGER OPTIONAL } Name ::= CHOICE { rdnSequence RDNSequence } RDNSequence ::= RelativeDistinguishedName RelativeDistinguishedName ::= SET SIZE (1 .. MAX) OF AttributeTypeAndValue AttributeTypeAndValue ::= SEQUENCE { type AttributeType, value AttributeValue } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY sequenceEmpty ::= SEQUENCE{ int1 INTEGER, seq1 [1] IMPLICIT Sequence_octetTest1, set1 [2] EXPLICIT SET OF INTEGER } IndefiniteLengthTest ::= SEQUENCE{ seq1 [1] IMPLICIT Sequence_octetTest1, set1 SET OF OBJECT IDENTIFIER, int1 INTEGER } OidTest ::= SEQUENCE{ oid3 [3] OBJECT IDENTIFIER DEFAULT id-Test, oid [1] OBJECT IDENTIFIER DEFAULT id-anyTest2, oid2 [2] OBJECT IDENTIFIER DEFAULT id-anyTest } OidAndTimeTest ::= SEQUENCE{ set SET OF INTEGER, oid OBJECT IDENTIFIER, time2 GeneralizedTime, bol BOOLEAN, oct OCTET STRING, bit BIT STRING OPTIONAL, bol2 BOOLEAN DEFAULT TRUE, enum ENUMERATED {v1(1),v2(2)} DEFAULT v1, any [1] ANY OPTIONAL, gen GeneralString OPTIONAL, time1 UTCTime } SequenceTestTag ::= SEQUENCE{ int1 [2] EXPLICIT INTEGER, int2 [3] IMPLICIT INTEGER, str1 [1] IMPLICIT PrintableString, str2 UniversalString, str3 [2] EXPLICIT UniversalString } Sequence1 ::= SEQUENCE{ int1 [0] INTEGER {v1(0),v2(1),v3(2)} DEFAULT v2, int2 INTEGER, seq SET OF INTEGER, id OBJECT IDENTIFIER, oct OCTET STRING, any1 ANY DEFINED BY id OPTIONAL } DHParameter ::= SEQUENCE { prime INTEGER, base INTEGER, privateValueLength INTEGER OPTIONAL } id-octetTest1 OBJECT IDENTIFIER ::= {1 2 3 4} Sequence_octetTest1 ::= SEQUENCE{ int INTEGER OPTIONAL } AnyTest2 ::= CHOICE{ str OCTET STRING, int INTEGER } id-ic OBJECT IDENTIFIER ::= {2 5} id-anyTest OBJECT IDENTIFIER ::= {id-ic 29 1} id-anyTest2 OBJECT IDENTIFIER ::= {id-ic 29 2} anyTest2 ::= INTEGER VisibleString ::= [UNIVERSAL 26] IMPLICIT OCTET STRING NumericString ::= [UNIVERSAL 18] IMPLICIT OCTET STRING IA5String ::= [UNIVERSAL 22] IMPLICIT OCTET STRING TeletexString ::= [UNIVERSAL 20] IMPLICIT OCTET STRING PrintableString ::= [UNIVERSAL 19] IMPLICIT OCTET STRING UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING -- UniversalString is defined in ASN.1:1993 BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING -- BMPString is the subtype of UniversalString and models -- the Basic Multilingual Plane of ISO/IEC/ITU 10646-1 UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING -- The content of this type conforms to RFC 2279. Test3 ::= SEQUENCE{ a INTEGER, b [1] EXPLICIT GeneralString2 } GeneralString2 ::= [2] EXPLICIT GeneralString X520LocalityName ::= CHOICE { teletexString TeletexString, printableString PrintableString, universalString UniversalString, utf8String UTF8String, bmpString BMPString } id-Test OBJECT IDENTIFIER ::= {1 2 29 2} END -- Copyright (C) 2002-2014 Free Software Foundation, Inc. -- -- This file is part of LIBTASN1. -- -- 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 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . libtasn1-4.16.0/tests/Makefile.am0000644000000000000000000001142113611145057013406 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAG_VISIBILITY) AM_CPPFLAGS = -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes -I$(top_srcdir)/lib AM_LDFLAGS = -no-install LDADD = ../lib/libtasn1.la BUILT_SOURCES = CVE-2018-1000654-1_asn1_tab.h CVE-2018-1000654-2_asn1_tab.h EXTRA_DIST = Test_parser.asn Test_tree.asn Test_tree_asn1_tab.c mscat.asn \ Test_encoding.asn pkix.asn TestIndef.p12 choice.asn coding-decoding2.asn \ TestIndef2.p12 TestIndef3.der TestCertOctetOverflow.der \ cert-invalid-time.der setof.asn CVE-2018-1000654-1.asn CVE-2018-1000654-2.asn \ libtasn1.supp ocsp-basic-response.der spc_pe_image_data.der \ invalid-x509/id-000000.der invalid-x509/id-000001.der \ invalid-x509/id-000002.der invalid-x509/id-000003.der \ invalid-x509/id-000004.der invalid-x509/id-000005.der \ invalid-x509/id-000006.der invalid-x509/id-000007.der \ invalid-x509/id-000008.der invalid-x509/id-000009.der \ invalid-x509/id-000010.der invalid-x509/id-000011.der \ invalid-x509/id-000012.der invalid-x509/id-000013.der \ invalid-x509/id-000014.der invalid-x509/id-000015.der \ invalid-x509/id-000016.der invalid-x509/id-000017.der \ invalid-x509/id-000018.der invalid-x509/id-000019.der \ invalid-x509/id-000020.der invalid-x509/id-000021.der \ invalid-x509/id-000022.der invalid-x509/id-000023.der \ invalid-x509/id-000024.der invalid-x509/id-000025.der \ invalid-x509/id-000026.der invalid-x509/id-000027.der \ invalid-x509/id-000028.der invalid-x509/id-000029.der \ invalid-x509/id-000030.der invalid-x509/id-000031.der \ invalid-x509/id-000032.der invalid-x509/id-000033.der \ invalid-x509/id-000034.der invalid-x509/id-000035.der \ invalid-pkcs7/id-000001.der invalid-pkcs7/id-000002.der \ invalid-pkcs7/id-000003.der invalid-assignments1.txt \ invalid-assignments2.txt pkix.asn.out # For crlf. EXTRA_DIST += crlf.cer crl.der ocsp.der dist_check_SCRIPTS = crlf benchmark threadsafety decoding decoding-invalid-x509 \ decoding-invalid-pkcs7 coding parser.sh MOSTLYCLEANFILES = Test_parser_ERROR.asn CVE-2018-1000654-1_asn1_tab.h CVE-2018-1000654-2_asn1_tab.h check_PROGRAMS = Test_parser Test_tree Test_encoding Test_indefinite \ Test_errors Test_simple Test_overflow Test_strings Test_choice \ Test_encdec copynode coding-decoding2 strict-der Test_choice_ocsp \ ocsp-basic-response octet-string coding-long-oid object-id-decoding \ spc_pe_image_data setof CVE-2018-1000654 reproducers object-id-encoding TESTS = Test_parser Test_tree Test_encoding Test_indefinite \ Test_errors Test_simple Test_overflow crlf threadsafety \ Test_strings Test_choice Test_encdec copynode coding-decoding2 \ strict-der Test_choice_ocsp decoding decoding-invalid-x509 \ ocsp-basic-response octet-string coding-long-oid object-id-decoding \ spc_pe_image_data decoding-invalid-pkcs7 coding setof \ CVE-2018-1000654 parser.sh reproducers object-id-encoding CVE-2018-1000654-1_asn1_tab.h: $(srcdir)/CVE-2018-1000654-1.asn $(top_builddir)/src/asn1Parser$(EXEEXT) $^ -o $@ CVE-2018-1000654-2_asn1_tab.h: $(srcdir)/CVE-2018-1000654-2.asn $(top_builddir)/src/asn1Parser$(EXEEXT) $^ -o $@ CVE_2018_1000654_SOURCES = CVE-2018-1000654-1_asn1_tab.h CVE-2018-1000654-2_asn1_tab.h CVE-2018-1000654.c LOG_COMPILER = $(VALGRIND) TESTS_ENVIRONMENT = \ ASN1PARSER=$(srcdir)/Test_parser.asn \ ASN1TREE=$(srcdir)/Test_tree.asn \ ASN1CHOICE=$(srcdir)/choice.asn \ ASN1CODINGDECODING2=$(srcdir)/coding-decoding2.asn \ ASN1PKIX=$(srcdir)/pkix.asn \ ASN1SETOF=$(srcdir)/setof.asn \ ASN1CRLDER=$(srcdir)/crl.der \ ASN1INDEF=$(srcdir)/TestIndef.p12 \ ASN1INDEF2=$(srcdir)/TestIndef2.p12 \ ASN1INDEF3=$(srcdir)/TestIndef3.der \ ASN1ENCODING=$(srcdir)/Test_encoding.asn \ ASN1CHOICE_OCSP=$(srcdir)/pkix.asn \ ASN1CHOICE_OCSP_DATA=$(srcdir)/ocsp.der \ ASN1_RESPONSE_OCSP_DATA=$(srcdir)/ocsp-basic-response.der \ ASN1_MSCAT=$(srcdir)/mscat.asn \ ASN1_SPC_PE_IMAGE_DATA=$(srcdir)/spc_pe_image_data.der \ ASAN_OPTIONS="detect_leaks=0:exitcode=6" \ THREADSAFETY_FILES=`find $(top_srcdir)/lib -name \*.c` \ EXEEXT=$(EXEEXT) \ LSAN_OPTIONS=suppressions=libtasn1.supp libtasn1-4.16.0/tests/mscat.asn0000644000000000000000000000144113246341643013170 00000000000000CATALOG {} DEFINITIONS IMPLICIT TAGS ::= -- assuming implicit tags, should try explicit too BEGIN -- SPC_PE_IMAGE_DATA SpcPEImageData ::= SEQUENCE { flags SpcPeImageFlags DEFAULT includeResources, link [0] EXPLICIT SpcLink OPTIONAL } SpcPeImageFlags ::= BIT STRING { includeResources (0), includeDebugInfo (1), includeImportAddressTable (2) } SpcLink ::= CHOICE { url [0] IMPLICIT IA5String, moniker [1] IMPLICIT SpcSerializedObject, file [2] EXPLICIT SpcString } SpcSerializedObject ::= SEQUENCE { classId OCTET STRING, -- GUID data OCTET STRING -- Binary structure } SpcString ::= CHOICE { unicode [0] IMPLICIT BMPString, ascii [1] IMPLICIT IA5String } END libtasn1-4.16.0/tests/octet-string.c0000644000000000000000000036077513611145057014163 00000000000000/* * Copyright (C) 2011-2020 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Written by Simon Josefsson and Nikos Mavrogiannopoulos * */ #include #include #include #include "libtasn1.h" struct tv { const char *name; int der_len; const unsigned char *der_str; int len; const unsigned char *string; int expected_error; int ber; }; static const struct tv tv[] = { {.name = "primitive octet strings", .der_len = 10, .der_str = (void*)"\x04\x08\x01\x23\x45\x67\x89\xab\xcd\xef", .len = 8, .string = (void*)"\x01\x23\x45\x67\x89\xab\xcd\xef", .ber = 0}, {.der_len = 22, .der_str = (void*)"\x04\x14\x13\x00\xd9\xa8\x47\xf7\xf2\x1c\xf4\xb0\xec\x5f\xc1\x73\xe5\x1b\x25\xc2\x62\x27", .len = 20, .string = (void*)"\x13\x00\xD9\xA8\x47\xF7\xF2\x1C\xF4\xB0\xEC\x5F\xC1\x73\xE5\x1B\x25\xC2\x62\x27"}, {.name = "long type of length", .der_len = 23, .der_str = (void*)"\x04\x81\x14\x13\x00\xd9\xa8\x47\xf7\xf2\x1c\xf4\xb0\xec\x5f\xc1\x73\xe5\x1b\x25\xc2\x62\x27", .len = 20, .string = (void*)"\x13\x00\xD9\xA8\x47\xF7\xF2\x1C\xF4\xB0\xEC\x5F\xC1\x73\xE5\x1B\x25\xC2\x62\x27", .ber = 1}, {.der_len = 11, .der_str = (void*)"\x04\x81\x08\x01\x23\x45\x67\x89\xab\xcd\xef", .len = 8, .string = (void*)"\x01\x23\x45\x67\x89\xab\xcd\xef", .ber = 1}, {.name = "constructed - indefinite", .der_len = 11, .der_str = (void*)"\x24\x80\x04\x05\x01\x02\x03\x04\x05\x00\x00", .len = 5, .string = (void*)"\x01\x02\x03\x04\x05", .ber = 1, }, {.name = "constructed - definite - concat", .der_len = 12, .der_str = (void*)"\x24\x0a\x04\x04\x0a\x0b\x0c\x0d\x04\x02\x0e\x0f", .len = 6, .string = (void*)"\x0a\x0b\x0c\x0d\x0e\x0f", .ber = 1, }, {.name = "constructed - definite - recursive", .der_len = 15, .der_str = (void*)"\x24\x0d\x04\x04\x0a\x0b\x0c\x0d\x24\x05\x04\x00\x04\x01\x0f", .len = 5, .string = (void*)"\x0a\x0b\x0c\x0d\x0f", .ber = 1, }, {.name = "constructed - definite - single", .der_len = 7, .der_str = (void*)"\x24\x05\x04\x03\x01\x02\x03", .len = 3, .string = (void*)"\x01\x02\x03", .ber = 1, }, /* a large amount of recursive indefinite encoding */ {.name = "a large amount of recursive indefinite encoding", .der_len = 29325, .der_str = (void*)"\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80\x24\x80", .len = 0, .ber = 1, .expected_error = ASN1_DER_ERROR } }; int main (int argc, char *argv[]) { unsigned char str[100]; unsigned char der[100]; int der_len = sizeof (der); int str_size = sizeof (str); unsigned char *tmp = NULL; int ret, ret_len, j; size_t i; for (i = 0; i < sizeof (tv) / sizeof (tv[0]); i++) { /* Decode */ if (tv[i].ber == 0) { str_size = sizeof (str); ret = asn1_get_octet_der (tv[i].der_str + 1, tv[i].der_len - 1, &ret_len, str, sizeof (str), &str_size); if (ret != tv[i].expected_error) { fprintf (stderr, "%d: asn1_get_octet_der: %s: got %d expected %d\n", __LINE__, tv[i].name, ret, tv[i].expected_error); return 1; } if (tv[i].expected_error) continue; if (ret_len != tv[i].der_len - 1) { fprintf (stderr, "%d: error in DER, length returned is %d, had %d\n", __LINE__, ret_len, tv[i].der_len - 1); return 1; } if (str_size != tv[i].len || memcmp (tv[i].string, str, tv[i].len) != 0) { fprintf (stderr, "%d: memcmp: %s: got invalid decoding\n", __LINE__, tv[i].name); fprintf(stderr, "\nGot:\t\t"); for (j=0;j. * */ /****************************************************************/ /* Description: run reproducers for several fixed issues */ /****************************************************************/ #include #include #include #include #include /* produces endless loop (fixed by d4b624b2): * The following translates into a single node with all pointers * (right,left,down) set to NULL. */ const asn1_static_node endless_asn1_tab[] = { { "TEST_TREE", 536875024, NULL }, { NULL, 0, NULL } }; /* produces memory leak (fixed by f16d1ff9): * 152 bytes in 1 blocks are definitely lost in loss record 1 of 1 * at 0x4837B65: calloc (vg_replace_malloc.c:762) * by 0x4851C0D: _asn1_add_static_node (parser_aux.c:71) * by 0x4853AAC: asn1_array2tree (structure.c:200) * by 0x10923B: main (single_node.c:67) */ const asn1_static_node tab[] = { { "a", CONST_DOWN, "" }, { "b", 0, "" }, { "c", 0, "" }, { NULL, 0, NULL } }; int main (int argc, char *argv[]) { int result, verbose = 0; asn1_node definitions = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; if (argc > 1) verbose = 1; result = asn1_array2tree (endless_asn1_tab, &definitions, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (EXIT_FAILURE); } asn1_delete_structure (&definitions); definitions = NULL; result = asn1_array2tree (tab, &definitions, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (EXIT_FAILURE); } asn1_delete_structure (&definitions); if (verbose) printf ("Success\n"); exit (EXIT_SUCCESS); } libtasn1-4.16.0/tests/TestIndef.p120000644000000000000000000000541013246341643013567 000000000000000€0€ *†H†÷  €$€‚è0€0€ *†H†÷  €$€‚0‚0‚  *†H†÷   ‚²0‚®0( *†H†÷  0j[FÍ¿“mtüÛÅ­{¤©¬‚€<èe|Å Rì¶¶œ§ïûÖ-Ã\_‰Éöž™m¤Å&pQÚ­æ5bÆ,¶ïtj·CJ¥ŠbVáãB!â¿ÿÌÅe Z‘Ùwxá•=ËÇ÷€Gvï´K-Ò²#æâKòÌó¢# ªMVáí˜ÁboßÁö7! c˜÷¬ìZdL°KhÚ‡”¨"£tÕ+ÔNîA3n(Ù\Si€-í-³Z‹ŠGMÄŠ,©ö1Ó_Û RNÑqr¾rŸÃû+.ÙjèõÚýU”夸)Ž_!³b„Û4ïÐfÇ`P%l“–v§Úqæz×àfn`ÀP„8<Âù0ÃéXåÏl‘¿ú¹&ÉmÝöœ^ÀΑ‚^|îhÉ3 óÍè·mAwÔU0ž•â;"áBÖ¡‰EÙ…à£S¶ÐO<êû¨+Z«öù’«1×:ùàñ%Ùàg·?î1»s†Rz9Ũ¢I^ ÂÛsŽdEl½þVM|jˆ9Õ¼hÒ1ì@*•¤·.:Rã(ÔÇ"ó@'YØ$ú 8ÜÕÖQ=ÆY>½¾+ïIø²dE_¬ö!î%’SÕa…å0ìÛ½,Û„§Ò/üªóïy*É.ð¼Bþï#¦­Ïm}—Miz àvyÐã$\Ä{ ~¾&ijÆù6|W_þó½Ó=ùˆØøóÃÐà7ºzFÕrË5«ŸÙÑÅÛ+`–ß`Vî§£üÙñýiâ Ùx9I |ÉmFÑV Ô³T¤P¥X߉+ê‚,ønñŸÐ›"²..p`„©šÑ «œïì3D£oG¢ÞùoD¼úZC£+r—Äè™òñµh›2K^×"Þ™á1H0! *†H†÷  1Test User0# *†H†÷  1ˆeß»i>Y*»ÝK)?.e0€ *†H†÷  €0€0€ *†H†÷ 0( *†H†÷  0¶ª§ng·:àÄœÀ©?êvû €‚œS4p|LH#·Õ¡‘î ¼š¾‰móÁôpÞѯ$eþLÙך×|ñö±óã&i·c!›’Q_tA9"$Rn="‡)õ£‰Ì[˜+w'¸äOò‡•45*>dcÚq‚èñ³=72Cis·ÙYVã'ÿ7d_õûP â•²ƒs‹ó0 9Zîëlr•ÔîSQNÉ }‹§V¯è‚ã]~E‘WE×mTí½:º ¯¶ëNm€ßùÔ3è0çðOѳe¦ ÿÁ™ê*‚QñçfYÓÁñ˜ 3âÝìJñ§eÌ”´3öZZ3Qã2ØúöN5 ;(hÍÍâT¡aëØI‰\gL’}ËùÿP1a³=ï%‡Óº(l™ª‡‰,e&wA¯AUèPt‚H*ï_:5Âày°?‚ÈÜ»¿š*Ñ ¡S3ž'¬ßi^Üîïc®Ç–w†™BC‰²0Àʾ_8W4©›'¡è⑼ÏP->?ZÚ†ï_„g´=š¬SäT½­ömÅòhR£º¬n'ïÒP|ÙË[„EЬ±V{iœsÉGn1Ó¿‡€Ÿµ‘q‰@Têab‘ÆšR–4ÚØyñyª‚¸"SXžá8DÙ·Tëª E8¨N.ÇúÏÿKcZn‡ŒœõáȰ«†9Òù Íe]\,Œ•A*§Exȼ¬€¹ð§(Ô1E¶‘oè&¦§•hóÝ3§?SÁÚ©°h’É5} €–ãÒœå(5ï8þ€<,ˆã__yq ÿ˜ð½Õî¤|§m ç@›‘×C—4ˆI¾¸> 9y&YÂΞúè7rŽœ‡>‡FÌ*v‘>ž`çIèóµD* ÞüºXpŸ0P9¼uÙ)â1Áão=UìQ‚/œ‡sœ¡È¯v-×’Óµ1¥Z_ØA˜ÅÅ/'¤ßûˆç˜ ³ƒHl_[FÑŸwfxŽ ùÌì º˜€?^ýnŸ¦Z` ÎðÆ©tÍO‡…I¸ë¬˜3¢ Ô4=G[à¸ÜÞ¡«IûçLùVimÉ–Ëèï|´¨$.¥eŽg¾ aK*Ǭ¿$!~˜AКƷò ­)†ºBÇß“¡DÝi*3)“yŽÉáìúg#.Ù‚ã ¶õ.žÌB1Gÿ ­öûLŠ¿;ÄNmOÀtVAo°:ÜŽúù‹^ðߥY )ŸÙÇ—5 ÉÁ̬e#µ^hÜ™²Î4ë7D¶kŸÑ@;þT^7X¶:Cÿ|™–µ]$ ®Åp¶‚ϲߙÖ2~»¯;Û8ÐÌÀY]%'ùüìU-²û3ÎÙ&dTÐhÔµ\“¯™ rá¿HŠf&\|/~ Öòy¹3l\WÈ„ ’’¤V ¬öúçm¸w¸4˜Ú¸IZ¼5¥Ÿ?߈z¯¬ú‚<¾¼xÚÌqˆsg•5ͺŸØ& AЦaù¯|¡M#thÂÂ@X‡±¥ ÎÅÁØŒõ$wDÛå §€"Œ/™KŽ8'À¾ïŸ¹ü0sÆ!ïä´#ȹ"\ ‘Õ=o9)€Î 5Á%‡»™U÷ ˜'ñØDv“8>Ç}Ÿ¡›ŽA,!¹i;»ö"¶V,@…G/çIä§ï½xùtÝKo¦çi÷áÖŒHɯZ± Ìzú–üxN‰ˆ]áišÌ~réÅÏÈ0 h==ºÑç B×£ Þ_;z<.T¬Ie™î°0=ƒJÂÄšX™_µç«ɵè 5iŸ5©Ì‰÷¤RÆ xöȯ­ç ¶ =<é_Íý"üõêâp1çílsK‹õ_¥OPzócÅv;¡;àQ¢V Çi(A½Áǽ7†[jRríÚ:ÏŒ§¯ÝO”çí¯Â7^c´ÑM® ¥5y£C)EçØÇo ©dc»âDͨÑ@*ª•A®ùæ[Ãñ“¥Ú%²Þ#fA"½"ØŒ4q[}¼’>d ¦ýÊ(VB/BÔåoŒÛ] x''•§ü¬1aEØÖ"ïb+ðÚ0È2A6j‚. 'ˆ¬wÖ×gô°8Dì¢ÍSwŸ6lÎäx1oFô ‡n³—P.TÛb"ü˜+wsásë.E€rnu·&ÑöIᨆûFëKNŸe£ç<±ºÐUkÚdÛêÌÀ(ƒ@ÚOÖn·z³Ê·¨}ùs<¢¹‹ØÛeü‚ Qû~0=0!0 +ÂKì›ûõØ™«D)b(”3ÀþÕ!.ˆF”+¤ ð7xæìc¹õ9”—libtasn1-4.16.0/tests/coding0000755000000000000000000000266313246341643012556 00000000000000#!/bin/sh # Copyright (C) 2017 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . srcdir="${srcdir:-.}" ASAN_OPTIONS="detect_leaks=0:exitcode=6" export ASAN_OPTIONS if ! test -z "${VALGRIND}";then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=7 --leak-check=no" fi ASN1CODING="${ASN1CODING:-../src/asn1Coding$EXEEXT}" ASN1PKIX="${ASN1PKIX:-pkix.asn}" TMPFILE="asn1.$$.tmp" cat <$TMPFILE PKIX1 { } DEFINITIONS IMPLICIT TAGS ::= BEGIN Dss-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER } END EOF $VALGRIND $ASN1CODING -c $TMPFILE ${srcdir}/invalid-assignments1.txt if test $? != 1;then echo "Encoding failed (1)" exit 1 fi $VALGRIND $ASN1CODING -c $TMPFILE ${srcdir}/invalid-assignments2.txt if test $? != 1;then echo "Encoding failed (2)" exit 1 fi rm -f $TMPFILE exit 0 libtasn1-4.16.0/tests/Test_encoding.c0000644000000000000000000001064513246341643014315 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /******************************************************/ /* File: Test_encoding.c */ /* Description: Test writing values and DER encoding. */ /******************************************************/ #include #include #include #include "libtasn1.h" unsigned char data[256]; int data_size = sizeof (data); int main (int argc, char *argv[]) { int result, verbose = 0; asn1_node definitions = NULL; asn1_node asn1_element = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; const char *treefile = getenv ("ASN1ENCODING"); if (argc > 1) verbose = 1; if (!treefile) treefile = "Test_encoding.asn"; if (verbose != 0) { printf ("\n\n/****************************************/\n"); printf ("/* Test sequence : coding-decoding */\n"); printf ("/****************************************/\n\n"); } /* Check version */ if (asn1_check_version ("0.3.3") == NULL) printf ("\nLibrary version check ERROR:\n actual version: %s\n\n", asn1_check_version (NULL)); result = asn1_parser2tree (treefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } result = asn1_create_element (definitions, "TEST_TREE.Koko", &asn1_element); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_create_element(): "); asn1_perror (result); exit (1); } result = asn1_write_value (asn1_element, "seqint", "NEW", 1); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_write_value(): seqint "); asn1_perror (result); exit (1); } result = asn1_write_value (asn1_element, "seqint.?LAST", "1234", 0); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_write_value(): seqint.?LAST "); asn1_perror (result); exit (1); } result = asn1_write_value (asn1_element, "int", "\x0f\xff\x01", 3); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_write_value(): int "); asn1_perror (result); exit (1); } result = asn1_write_value (asn1_element, "str", "string", 6); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_write_value(): str "); asn1_perror (result); exit (1); } result = asn1_write_value (asn1_element, "a", "string1", 7); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_write_value(): str "); asn1_perror (result); exit (1); } result = asn1_write_value (asn1_element, "b", "string2", 7); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_write_value(): str "); asn1_perror (result); exit (1); } result = asn1_write_value (asn1_element, "c", "string3", 7); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_write_value(): str "); asn1_perror (result); exit (1); } result = asn1_write_value (asn1_element, "exp", "string4", 7); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_write_value(): str "); asn1_perror (result); exit (1); } /* Clear the definition structures */ asn1_delete_structure (&definitions); result = asn1_der_coding (asn1_element, "", data, &data_size, NULL); if (result != ASN1_SUCCESS) { fprintf (stderr, "Encoding error.\n"); asn1_perror (result); exit (1); } result = asn1_der_decoding (&asn1_element, data, data_size, NULL); if (result != ASN1_SUCCESS) { fprintf (stderr, "Decoding error.\n"); asn1_perror (result); exit (1); } asn1_delete_structure (&asn1_element); if (verbose) printf ("Success\n"); exit (0); } libtasn1-4.16.0/tests/invalid-pkcs7/0000755000000000000000000000000013615400132014076 500000000000000libtasn1-4.16.0/tests/invalid-pkcs7/id-000001.der0000644000000000000000000001237713246341643015651 000000000000000 z(ÏÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÏÔÔÔÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@€;€@€;@€x*€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@€;@€x€€@€;@€x*€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€*€€@€;@0@ :€€€€ÿÿ€€€€'€€€€€€€€€€€€€€€:€€€€€€€€€€€€€€€€€€€€€€€€@€;@€x*€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@€;@€x*€€€€€€€€€€€*€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@€;@€@€x@€;@€@€x*ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔ€€€€€€€€€€€€€€€€€€€€€€€€€€€ÏÏ0*ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔ@€;@€@€x*ÏÔÔÔÔÔÔÔÔÔÏÏÏ0ÔÔÔÔÔÔÏÏ0@@@ÿ,"ÔÏÏ0@0@€€€€€€€€€€€€€'€€€€€€€€€€€€€€€€€€€€€0@€€…d*@€€*@€@€x*ÏÔÔÔÔÔÔÔÔÔÏÏ0@0 :(ÏÔÔÔÿÿÿÿÔÿÿÿÿÿÿÿÿÿÿÿÿø ÿÿÿÿÿÿ;ÿÿ,"ÔÏ@0ÿÿÿÿÿÿÿÿ@€€(€€€!(*@€@!!*B€@0ÿ0@€€€€€€€€€€€€€'€€€€€€€€€€€€€€€T€0€€€€€€€u€€€€€€€€€€€€€€€€ÏÔÔÔÔÔÔÔÔ€€€€ÔÏÔÔÔÔÔÔÏÏ0@{{{{{{{{{{{{{{{{{{ÿÿÿÿ;ÿÿÿÿÿÿÿÿÿÿ@ÔÔÔÔÏÔÔÔ,"ÔÏÏ0@@€€*@€Ë(ÿÿ€€ÀÄÿ¿xx*Ôÿÿÿÿÿÿ:ÔÔÔÔÔÔÔÔÔÏÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0@€€€€*@€@€x*ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔÏÏ0ÿÿÿÿÿÿÿÿÿÿÿ@€x*ÏÔÔ@ÿÿÿÿÿÿ,"ÔÏÏ0ÔÔÔÔÔÔÔÏÔÔÔ&ÔÔÔÏÏ@0@@€x*ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔ0ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔÏÏ0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx€€*@€@€x*ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔÏÏ0Ï@Ï@0ÿ€@ÿÿ€€ÀÄÿ¿xx*ÿÿÿÿx<ÔÔÔÔÔÔÔÜÔÏÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,"ÔÏÏ0@€@€xÔÏÔÔÔÔÔÔÔÔÔÏÏ5@ÔÔÔÔÔÔÔÔÔÏÔÔÔÔ0@€€€*@€0ÿÿÿÿÿÿÿÿ@€€(€€€!(*@€@!!*B€@0ÏÏ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvÿ;ÿ;ÔÔ0@€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@€;@€x*ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔÏÏ0@ÔÔÔÔÔÔÔÏÏ0@0@€€€€0ÿÿÿÿÿÿÿÿ@€€(€€€!(0@€€€€*@€;@€x*ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔÏÏ0@ÏÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿ0@€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€@€;@€x*ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔ0@€€€*@€@€x*ÏÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔ0ÏÏ@xxxxxxxxxxxxxxxxxxx€€0@€€;ÿÿ,"ÔÏÏ0€€*@€0ÿ;€@€xÔÏÔÔÔÔÔÔÔÔÔÏÏ5@ÔÔÏÔÔÔ,"ÔÏÏ0@0 :(ÿÿÿÿ€ÀÄÿxx¿*ÿÿÿÿx<ÔÔ:(ÿÿÿÿ€ÀÄÿxx¿*ÿÿÿÿx<ÔÔÔÔÔÔÔÜÔÏÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0 ÿÿ€€@€;@€x*@€;@€x:ÔÔÔÔÔÔÔÔÔÏÔÔÔ,"ÔÏÏ0ÏÏÔÿ€@€xÔÏÔÔÔÔÔÔÔÔÔÏÏ5@ÔÔÔÔÔÔÔÔÔÏÔÔÔÔÔÔÏÏ@0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx€€*@€@€x*Ï€€*@€€€€€€€€€0 :(ÏÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿ;ÿÿ,"ÿÿÿÿÿÿÿ@€€€ÿ0 (ÿÿ€€ÀÄÿ¿xx*@€;@€x:ÔÔÔÔÔÔÔ0ÿ;€@€xÔÏÔÔÔÔÔÔÔÔÔÏÏ5@@0 :(ÏÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÏÔÔÔÿÿÿÿÿ ÿÿ; ÿÿ;"ÔÏÏ#@„ÏÔ0 :(ÏÔÔÔÿÿÿÿÿÿ0@ €€€€€€€€€€€€€ ÿÿ; ÿÿ;"ÔÏÏ#@,"ÔÏÏ0@ÏÏ0@€€€€€€€€€€€€€€€€€ÿÿÿÿ;€@€;@€x*€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€øÿ€€€0@€€€€€€€€€€€€€'€€€€€€€€€€€€€€€€€€€€€€€@€;@€x*€€€€€€€€€€€€€€€€€€€€€€€€€€€€@€;€€€€€€libtasn1-4.16.0/tests/invalid-pkcs7/id-000003.der0000644000000000000000000000034513246341643015643 000000000000000l'ÿ€€€€l5ëë!!ÿÿlibtasn1-4.16.0/tests/invalid-pkcs7/id-000002.der0000644000000000000000000000143513246341643015643 000000000000000l0ë'ÿ€€ÿÿÿÿÿÿ€€€€€€;€0×{€€ááááááááááá)က€€€€€€€€€€€0l{{€€ááááááááááá)က€€€€€€€€€€€0l0llibtasn1-4.16.0/tests/benchmark0000755000000000000000000000221413246341643013235 00000000000000#!/bin/sh # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # Author: Simon Josefsson # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . set -e srcdir=${srcdir:-.} ASN1DECODING=../src/asn1Decoding${EXEEXT} # The crlf.cer file is a normal certificate which contains bytes 0x0A # (LF), 0x0D (CF), and 0xFF (EOF), all are known to cause failures # when using fopen/fgetc/fscanf on streams on some systems (read: # Windows). $ASN1DECODING \ -b $srcdir/../examples/pkix.asn \ $srcdir/crlf.cer \ PKIX1Implicit88.Certificate libtasn1-4.16.0/tests/pkix.asn0000644000000000000000000012111413514405371013031 00000000000000 PKIX1 { } DEFINITIONS IMPLICIT TAGS ::= BEGIN -- This contains both PKIX1Implicit88 and RFC2630 ASN.1 modules. -- ISO arc for standard certificate and CRL extensions id-ce OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 29} -- authority key identifier OID and syntax id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } AuthorityKeyIdentifier ::= SEQUENCE { keyIdentifier [0] KeyIdentifier OPTIONAL, authorityCertIssuer [1] GeneralNames OPTIONAL, authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL } -- authorityCertIssuer and authorityCertSerialNumber shall both -- be present or both be absgent KeyIdentifier ::= OCTET STRING -- subject key identifier OID and syntax id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } SubjectKeyIdentifier ::= KeyIdentifier -- key usage extension OID and syntax id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } KeyUsage ::= BIT STRING { digitalSignature (0), nonRepudiation (1), keyEncipherment (2), dataEncipherment (3), keyAgreement (4), keyCertSign (5), cRLSign (6), encipherOnly (7), decipherOnly (8) } -- private key usage period extension OID and syntax id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 } PrivateKeyUsagePeriod ::= SEQUENCE { notBefore [0] GeneralizedTime OPTIONAL, notAfter [1] GeneralizedTime OPTIONAL } -- either notBefore or notAfter shall be present -- certificate policies extension OID and syntax id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation PolicyInformation ::= SEQUENCE { policyIdentifier CertPolicyId, policyQualifiers SEQUENCE SIZE (1..MAX) OF PolicyQualifierInfo OPTIONAL } CertPolicyId ::= OBJECT IDENTIFIER PolicyQualifierInfo ::= SEQUENCE { policyQualifierId PolicyQualifierId, qualifier ANY DEFINED BY policyQualifierId } -- Implementations that recognize additional policy qualifiers shall -- augment the following definition for PolicyQualifierId PolicyQualifierId ::= OBJECT IDENTIFIER -- ( id-qt-cps | id-qt-unotice ) -- CPS pointer qualifier CPSuri ::= IA5String -- user notice qualifier UserNotice ::= SEQUENCE { noticeRef NoticeReference OPTIONAL, explicitText DisplayText OPTIONAL} NoticeReference ::= SEQUENCE { organization DisplayText, noticeNumbers SEQUENCE OF INTEGER } DisplayText ::= CHOICE { visibleString VisibleString (SIZE (1..200)), bmpString BMPString (SIZE (1..200)), utf8String UTF8String (SIZE (1..200)) } -- policy mapping extension OID and syntax id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE { issuerDomainPolicy CertPolicyId, subjectDomainPolicy CertPolicyId } -- subject alternative name extension OID and syntax -- Directory string type -- DirectoryString ::= CHOICE { teletexString TeletexString (SIZE (1..MAX)), printableString PrintableString (SIZE (1..MAX)), universalString UniversalString (SIZE (1..MAX)), utf8String UTF8String (SIZE (1..MAX)), bmpString BMPString (SIZE(1..MAX)), -- IA5String is added here to handle old UID encoded as ia5String -- -- See tests/userid/ for more information. It shouldn't be here, -- -- so if it causes problems, considering dropping it. -- ia5String IA5String (SIZE(1..MAX)) } id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 } SubjectAltName ::= GeneralNames GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName GeneralName ::= CHOICE { otherName [0] AnotherName, rfc822Name [1] IA5String, dNSName [2] IA5String, x400Address [3] ORAddress, -- Changed to work with the libtasn1 parser. directoryName [4] EXPLICIT RDNSequence, --Name, ediPartyName [5] EDIPartyName, uniformResourceIdentifier [6] IA5String, iPAddress [7] OCTET STRING, registeredID [8] OBJECT IDENTIFIER } -- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as -- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax AnotherName ::= SEQUENCE { type-id OBJECT IDENTIFIER, value [0] EXPLICIT ANY DEFINED BY type-id } EDIPartyName ::= SEQUENCE { nameAssigner [0] DirectoryString OPTIONAL, partyName [1] DirectoryString } -- issuer alternative name extension OID and syntax id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } IssuerAltName ::= GeneralNames id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute -- basic constraints extension OID and syntax id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } BasicConstraints ::= SEQUENCE { cA BOOLEAN DEFAULT FALSE, pathLenConstraint INTEGER (0..MAX) OPTIONAL } -- name constraints extension OID and syntax id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL } GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree GeneralSubtree ::= SEQUENCE { base GeneralName, minimum [0] BaseDistance DEFAULT 0, maximum [1] BaseDistance OPTIONAL } BaseDistance ::= INTEGER (0..MAX) -- policy constraints extension OID and syntax id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } PolicyConstraints ::= SEQUENCE { requireExplicitPolicy [0] SkipCerts OPTIONAL, inhibitPolicyMapping [1] SkipCerts OPTIONAL } SkipCerts ::= INTEGER (0..MAX) -- CRL distribution points extension OID and syntax id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= {id-ce 31} CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint DistributionPoint ::= SEQUENCE { distributionPoint [0] EXPLICIT DistributionPointName OPTIONAL, reasons [1] ReasonFlags OPTIONAL, cRLIssuer [2] GeneralNames OPTIONAL } DistributionPointName ::= CHOICE { fullName [0] GeneralNames, nameRelativeToCRLIssuer [1] RelativeDistinguishedName } ReasonFlags ::= BIT STRING { unused (0), keyCompromise (1), cACompromise (2), affiliationChanged (3), superseded (4), cessationOfOperation (5), certificateHold (6), privilegeWithdrawn (7), aACompromise (8) } -- extended key usage extension OID and syntax id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37} ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId KeyPurposeId ::= OBJECT IDENTIFIER -- extended key purpose OIDs id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 } id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 } id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 } id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 } id-kp-ipsecEndSystem OBJECT IDENTIFIER ::= { id-kp 5 } id-kp-ipsecTunnel OBJECT IDENTIFIER ::= { id-kp 6 } id-kp-ipsecUser OBJECT IDENTIFIER ::= { id-kp 7 } id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } -- authority info access id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 } AuthorityInfoAccessSyntax ::= SEQUENCE SIZE (1..MAX) OF AccessDescription AccessDescription ::= SEQUENCE { accessMethod OBJECT IDENTIFIER, accessLocation GeneralName } -- CRL number extension OID and syntax id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 } CRLNumber ::= INTEGER (0..MAX) -- issuing distribution point extension OID and syntax id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 } IssuingDistributionPoint ::= SEQUENCE { distributionPoint [0] DistributionPointName OPTIONAL, onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE, onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE, onlySomeReasons [3] ReasonFlags OPTIONAL, indirectCRL [4] BOOLEAN DEFAULT FALSE } id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 } -- deltaCRLIndicator ::= BaseCRLNumber BaseCRLNumber ::= CRLNumber -- CRL reasons extension OID and syntax id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 } CRLReason ::= ENUMERATED { unspecified (0), keyCompromise (1), cACompromise (2), affiliationChanged (3), superseded (4), cessationOfOperation (5), certificateHold (6), removeFromCRL (8) } -- certificate issuer CRL entry extension OID and syntax id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 } CertificateIssuer ::= GeneralNames -- hold instruction extension OID and syntax id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 } HoldInstructionCode ::= OBJECT IDENTIFIER -- ANSI x9 holdinstructions -- ANSI x9 arc holdinstruction arc holdInstruction OBJECT IDENTIFIER ::= {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2} -- ANSI X9 holdinstructions referenced by this standard id-holdinstruction-none OBJECT IDENTIFIER ::= {holdInstruction 1} -- deprecated id-holdinstruction-callissuer OBJECT IDENTIFIER ::= {holdInstruction 2} id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3} -- invalidity date CRL entry extension OID and syntax id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 } InvalidityDate ::= GeneralizedTime -- -------------------------------------- -- EXPLICIT -- -------------------------------------- -- UNIVERSAL Types defined in '93 and '98 ASN.1 -- but required by this specification VisibleString ::= [UNIVERSAL 26] IMPLICIT OCTET STRING NumericString ::= [UNIVERSAL 18] IMPLICIT OCTET STRING IA5String ::= [UNIVERSAL 22] IMPLICIT OCTET STRING TeletexString ::= [UNIVERSAL 20] IMPLICIT OCTET STRING PrintableString ::= [UNIVERSAL 19] IMPLICIT OCTET STRING UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING -- UniversalString is defined in ASN.1:1993 BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING -- BMPString is the subtype of UniversalString and models -- the Basic Multilingual Plane of ISO/IEC/ITU 10646-1 UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING -- The content of this type conforms to RFC 2279. -- PKIX specific OIDs id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) } -- PKIX arcs id-pe OBJECT IDENTIFIER ::= { id-pkix 1 } -- arc for private certificate extensions id-qt OBJECT IDENTIFIER ::= { id-pkix 2 } -- arc for policy qualifier types id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } -- arc for extended key purpose OIDS id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } -- arc for access descriptors -- policyQualifierIds for Internet policy qualifiers id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 } -- OID for CPS qualifier id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 } -- OID for user notice qualifier -- access descriptor definitions id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 } id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 } -- attribute data types -- Attribute ::= SEQUENCE { type AttributeType, values SET OF AttributeValue -- at least one value is required -- } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY DEFINED BY type AttributeTypeAndValue ::= SEQUENCE { type AttributeType, value AttributeValue } -- suggested naming attributes: Definition of the following -- information object set may be augmented to meet local -- requirements. Note that deleting members of the set may -- prevent interoperability with conforming implementations. -- presented in pairs: the AttributeType followed by the -- type definition for the corresponding AttributeValue -- Arc for standard naming attributes id-at OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 4} -- Attributes of type NameDirectoryString id-at-initials AttributeType ::= { id-at 43 } X520initials ::= DirectoryString id-at-generationQualifier AttributeType ::= { id-at 44 } X520generationQualifier ::= DirectoryString id-at-surname AttributeType ::= { id-at 4 } X520surName ::= DirectoryString id-at-givenName AttributeType ::= { id-at 42 } X520givenName ::= DirectoryString id-at-name AttributeType ::= { id-at 41 } X520name ::= DirectoryString id-at-commonName AttributeType ::= {id-at 3} X520CommonName ::= DirectoryString id-at-localityName AttributeType ::= {id-at 7} X520LocalityName ::= DirectoryString id-at-stateOrProvinceName AttributeType ::= {id-at 8} X520StateOrProvinceName ::= DirectoryString id-at-organizationName AttributeType ::= {id-at 10} X520OrganizationName ::= DirectoryString id-at-organizationalUnitName AttributeType ::= {id-at 11} X520OrganizationalUnitName ::= DirectoryString id-at-title AttributeType ::= {id-at 12} X520Title ::= DirectoryString id-at-description AttributeType ::= {id-at 13} X520Description ::= DirectoryString id-at-dnQualifier AttributeType ::= {id-at 46} X520dnQualifier ::= PrintableString id-at-countryName AttributeType ::= {id-at 6} X520countryName ::= PrintableString (SIZE (2)) -- IS 3166 codes id-at-serialNumber AttributeType ::= {id-at 5} X520serialNumber ::= PrintableString id-at-telephoneNumber AttributeType ::= {id-at 20} X520telephoneNumber ::= PrintableString id-at-facsimileTelephoneNumber AttributeType ::= {id-at 23} X520facsimileTelephoneNumber ::= PrintableString id-at-pseudonym AttributeType ::= {id-at 65} X520pseudonym ::= DirectoryString id-at-name AttributeType ::= {id-at 41} X520name ::= DirectoryString id-at-streetAddress AttributeType ::= {id-at 9} X520streetAddress ::= DirectoryString id-at-postalAddress AttributeType ::= {id-at 16} X520postalAddress ::= PostalAddress PostalAddress ::= SEQUENCE OF DirectoryString -- Legacy attributes pkcs OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) } pkcs-9 OBJECT IDENTIFIER ::= { pkcs 9 } emailAddress AttributeType ::= { pkcs-9 1 } Pkcs9email ::= IA5String (SIZE (1..ub-emailaddress-length)) -- naming data types -- Name ::= CHOICE { -- only one possibility for now -- rdnSequence RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName DistinguishedName ::= RDNSequence RelativeDistinguishedName ::= SET SIZE (1 .. MAX) OF AttributeTypeAndValue -- -------------------------------------------------------- -- certificate and CRL specific structures begin here -- -------------------------------------------------------- Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } TBSCertificate ::= SEQUENCE { version [0] EXPLICIT Version DEFAULT v1, serialNumber CertificateSerialNumber, signature AlgorithmIdentifier, issuer Name, validity Validity, subject Name, subjectPublicKeyInfo SubjectPublicKeyInfo, issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version shall be v2 or v3 subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version shall be v2 or v3 extensions [3] EXPLICIT Extensions OPTIONAL -- If present, version shall be v3 -- } Version ::= INTEGER { v1(0), v2(1), v3(2) } CertificateSerialNumber ::= INTEGER Validity ::= SEQUENCE { notBefore Time, notAfter Time } Time ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime } UniqueIdentifier ::= BIT STRING SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BIT STRING } Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension Extension ::= SEQUENCE { extnID OBJECT IDENTIFIER, critical BOOLEAN DEFAULT FALSE, extnValue OCTET STRING } -- ------------------------------------------ -- CRL structures -- ------------------------------------------ CertificateList ::= SEQUENCE { tbsCertList TBSCertList, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } TBSCertList ::= SEQUENCE { version Version OPTIONAL, -- if present, shall be v2 signature AlgorithmIdentifier, issuer Name, thisUpdate Time, nextUpdate Time OPTIONAL, revokedCertificates SEQUENCE OF SEQUENCE { userCertificate CertificateSerialNumber, revocationDate Time, crlEntryExtensions Extensions OPTIONAL -- if present, shall be v2 } OPTIONAL, crlExtensions [0] EXPLICIT Extensions OPTIONAL -- if present, shall be v2 -- } -- Version, Time, CertificateSerialNumber, and Extensions were -- defined earlier for use in the certificate structure AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL } -- contains a value of the type -- registered for use with the -- algorithm object identifier value -- Algorithm OIDs and parameter structures pkcs-1 OBJECT IDENTIFIER ::= { pkcs 1 } rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 } md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 } sha1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 } id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 } Dss-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER } dhpublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1 } DomainParameters ::= SEQUENCE { p INTEGER, -- odd prime, p=jq +1 g INTEGER, -- generator, g q INTEGER, -- factor of p-1 j INTEGER OPTIONAL, -- subgroup factor, j>= 2 validationParms ValidationParms OPTIONAL } ValidationParms ::= SEQUENCE { seed BIT STRING, pgenCounter INTEGER } id-dsa OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 } Dss-Parms ::= SEQUENCE { p INTEGER, q INTEGER, g INTEGER } -- x400 address syntax starts here -- OR Names ORAddress ::= SEQUENCE { built-in-standard-attributes BuiltInStandardAttributes, built-in-domain-defined-attributes BuiltInDomainDefinedAttributes OPTIONAL, -- see also teletex-domain-defined-attributes extension-attributes ExtensionAttributes OPTIONAL } -- The OR-address is semantically absent from the OR-name if the -- built-in-standard-attribute sequence is empty and the -- built-in-domain-defined-attributes and extension-attributes are -- both omitted. -- Built-in Standard Attributes BuiltInStandardAttributes ::= SEQUENCE { country-name CountryName OPTIONAL, administration-domain-name AdministrationDomainName OPTIONAL, network-address [0] EXPLICIT NetworkAddress OPTIONAL, -- see also extended-network-address terminal-identifier [1] EXPLICIT TerminalIdentifier OPTIONAL, private-domain-name [2] EXPLICIT PrivateDomainName OPTIONAL, organization-name [3] EXPLICIT OrganizationName OPTIONAL, -- see also teletex-organization-name numeric-user-identifier [4] EXPLICIT NumericUserIdentifier OPTIONAL, personal-name [5] EXPLICIT PersonalName OPTIONAL, -- see also teletex-personal-name organizational-unit-names [6] EXPLICIT OrganizationalUnitNames OPTIONAL -- see also teletex-organizational-unit-names -- } CountryName ::= [APPLICATION 1] CHOICE { x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)), iso-3166-alpha2-code PrintableString (SIZE (ub-country-name-alpha-length)) } AdministrationDomainName ::= [APPLICATION 2] EXPLICIT CHOICE { numeric NumericString (SIZE (0..ub-domain-name-length)), printable PrintableString (SIZE (0..ub-domain-name-length)) } NetworkAddress ::= X121Address -- see also extended-network-address X121Address ::= NumericString (SIZE (1..ub-x121-address-length)) TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length)) PrivateDomainName ::= CHOICE { numeric NumericString (SIZE (1..ub-domain-name-length)), printable PrintableString (SIZE (1..ub-domain-name-length)) } OrganizationName ::= PrintableString (SIZE (1..ub-organization-name-length)) -- see also teletex-organization-name NumericUserIdentifier ::= NumericString (SIZE (1..ub-numeric-user-id-length)) PersonalName ::= SET { surname [0] PrintableString (SIZE (1..ub-surname-length)), given-name [1] PrintableString (SIZE (1..ub-given-name-length)) OPTIONAL, initials [2] PrintableString (SIZE (1..ub-initials-length)) OPTIONAL, generation-qualifier [3] PrintableString (SIZE (1..ub-generation-qualifier-length)) OPTIONAL } -- see also teletex-personal-name OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units) OF OrganizationalUnitName -- see also teletex-organizational-unit-names OrganizationalUnitName ::= PrintableString (SIZE (1..ub-organizational-unit-name-length)) -- Built-in Domain-defined Attributes BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE (1..ub-domain-defined-attributes) OF BuiltInDomainDefinedAttribute BuiltInDomainDefinedAttribute ::= SEQUENCE { type PrintableString (SIZE (1..ub-domain-defined-attribute-type-length)), value PrintableString (SIZE (1..ub-domain-defined-attribute-value-length))} -- Extension Attributes ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF ExtensionAttribute ExtensionAttribute ::= SEQUENCE { extension-attribute-type [0] EXPLICIT INTEGER (0..ub-extension-attributes), extension-attribute-value [1] EXPLICIT ANY DEFINED BY extension-attribute-type } -- Extension types and attribute values -- common-name INTEGER ::= 1 CommonName ::= PrintableString (SIZE (1..ub-common-name-length)) teletex-common-name INTEGER ::= 2 TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length)) teletex-organization-name INTEGER ::= 3 TeletexOrganizationName ::= TeletexString (SIZE (1..ub-organization-name-length)) teletex-personal-name INTEGER ::= 4 TeletexPersonalName ::= SET { surname [0] EXPLICIT TeletexString (SIZE (1..ub-surname-length)), given-name [1] EXPLICIT TeletexString (SIZE (1..ub-given-name-length)) OPTIONAL, initials [2] EXPLICIT TeletexString (SIZE (1..ub-initials-length)) OPTIONAL, generation-qualifier [3] EXPLICIT TeletexString (SIZE (1..ub-generation-qualifier-length)) OPTIONAL } teletex-organizational-unit-names INTEGER ::= 5 TeletexOrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units) OF TeletexOrganizationalUnitName TeletexOrganizationalUnitName ::= TeletexString (SIZE (1..ub-organizational-unit-name-length)) pds-name INTEGER ::= 7 PDSName ::= PrintableString (SIZE (1..ub-pds-name-length)) physical-delivery-country-name INTEGER ::= 8 PhysicalDeliveryCountryName ::= CHOICE { x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)), iso-3166-alpha2-code PrintableString (SIZE (ub-country-name-alpha-length)) } postal-code INTEGER ::= 9 PostalCode ::= CHOICE { numeric-code NumericString (SIZE (1..ub-postal-code-length)), printable-code PrintableString (SIZE (1..ub-postal-code-length)) } physical-delivery-office-name INTEGER ::= 10 PhysicalDeliveryOfficeName ::= PDSParameter physical-delivery-office-number INTEGER ::= 11 PhysicalDeliveryOfficeNumber ::= PDSParameter extension-OR-address-components INTEGER ::= 12 ExtensionORAddressComponents ::= PDSParameter physical-delivery-personal-name INTEGER ::= 13 PhysicalDeliveryPersonalName ::= PDSParameter physical-delivery-organization-name INTEGER ::= 14 PhysicalDeliveryOrganizationName ::= PDSParameter extension-physical-delivery-address-components INTEGER ::= 15 ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter unformatted-postal-address INTEGER ::= 16 UnformattedPostalAddress ::= SET { printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL, teletex-string TeletexString (SIZE (1..ub-unformatted-address-length)) OPTIONAL } street-address INTEGER ::= 17 StreetAddress ::= PDSParameter post-office-box-address INTEGER ::= 18 PostOfficeBoxAddress ::= PDSParameter poste-restante-address INTEGER ::= 19 PosteRestanteAddress ::= PDSParameter unique-postal-name INTEGER ::= 20 UniquePostalName ::= PDSParameter local-postal-attributes INTEGER ::= 21 LocalPostalAttributes ::= PDSParameter PDSParameter ::= SET { printable-string PrintableString (SIZE(1..ub-pds-parameter-length)) OPTIONAL, teletex-string TeletexString (SIZE(1..ub-pds-parameter-length)) OPTIONAL } extended-network-address INTEGER ::= 22 ExtendedNetworkAddress ::= CHOICE { e163-4-address SEQUENCE { number [0] EXPLICIT NumericString (SIZE (1..ub-e163-4-number-length)), sub-address [1] EXPLICIT NumericString (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL }, psap-address [0] EXPLICIT PresentationAddress } PresentationAddress ::= SEQUENCE { pSelector [0] EXPLICIT OCTET STRING OPTIONAL, sSelector [1] EXPLICIT OCTET STRING OPTIONAL, tSelector [2] EXPLICIT OCTET STRING OPTIONAL, nAddresses [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING } terminal-type INTEGER ::= 23 TerminalType ::= INTEGER { telex (3), teletex (4), g3-facsimile (5), g4-facsimile (6), ia5-terminal (7), videotex (8) } -- (0..ub-integer-options) -- Extension Domain-defined Attributes teletex-domain-defined-attributes INTEGER ::= 6 TeletexDomainDefinedAttributes ::= SEQUENCE SIZE (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute TeletexDomainDefinedAttribute ::= SEQUENCE { type TeletexString (SIZE (1..ub-domain-defined-attribute-type-length)), value TeletexString (SIZE (1..ub-domain-defined-attribute-value-length)) } -- specifications of Upper Bounds shall be regarded as mandatory -- from Annex B of ITU-T X.411 Reference Definition of MTS Parameter -- Upper Bounds -- Upper Bounds ub-name INTEGER ::= 32768 ub-common-name INTEGER ::= 64 ub-locality-name INTEGER ::= 128 ub-state-name INTEGER ::= 128 ub-organization-name INTEGER ::= 64 ub-organizational-unit-name INTEGER ::= 64 ub-title INTEGER ::= 64 ub-match INTEGER ::= 128 ub-emailaddress-length INTEGER ::= 128 ub-common-name-length INTEGER ::= 64 ub-country-name-alpha-length INTEGER ::= 2 ub-country-name-numeric-length INTEGER ::= 3 ub-domain-defined-attributes INTEGER ::= 4 ub-domain-defined-attribute-type-length INTEGER ::= 8 ub-domain-defined-attribute-value-length INTEGER ::= 128 ub-domain-name-length INTEGER ::= 16 ub-extension-attributes INTEGER ::= 256 ub-e163-4-number-length INTEGER ::= 15 ub-e163-4-sub-address-length INTEGER ::= 40 ub-generation-qualifier-length INTEGER ::= 3 ub-given-name-length INTEGER ::= 16 ub-initials-length INTEGER ::= 5 ub-integer-options INTEGER ::= 256 ub-numeric-user-id-length INTEGER ::= 32 ub-organization-name-length INTEGER ::= 64 ub-organizational-unit-name-length INTEGER ::= 32 ub-organizational-units INTEGER ::= 4 ub-pds-name-length INTEGER ::= 16 ub-pds-parameter-length INTEGER ::= 30 ub-pds-physical-address-lines INTEGER ::= 6 ub-postal-code-length INTEGER ::= 16 ub-surname-length INTEGER ::= 40 ub-terminal-id-length INTEGER ::= 24 ub-unformatted-address-length INTEGER ::= 180 ub-x121-address-length INTEGER ::= 16 -- Note - upper bounds on string types, such as TeletexString, are -- measured in characters. Excepting PrintableString or IA5String, a -- significantly greater number of octets will be required to hold -- such a value. As a minimum, 16 octets, or twice the specified upper -- bound, whichever is the larger, should be allowed for TeletexString. -- For UTF8String or UniversalString at least four times the upper -- bound should be allowed. -- END of PKIX1Implicit88 -- BEGIN of RFC2630 -- Cryptographic Message Syntax pkcs-7-ContentInfo ::= SEQUENCE { contentType OBJECT IDENTIFIER, content [0] EXPLICIT ANY DEFINED BY contentType } pkcs-7-DigestInfo ::= SEQUENCE { digestAlgorithm AlgorithmIdentifier, digest OCTET STRING } pkcs-7-SignedData ::= SEQUENCE { version INTEGER, digestAlgorithms pkcs-7-DigestAlgorithmIdentifiers, encapContentInfo pkcs-7-EncapsulatedContentInfo, certificates [0] IMPLICIT pkcs-7-CertificateSet OPTIONAL, crls [1] IMPLICIT pkcs-7-CertificateRevocationLists OPTIONAL, signerInfos pkcs-7-SignerInfos } pkcs-7-DigestAlgorithmIdentifiers ::= SET OF AlgorithmIdentifier -- rfc5652: eContent [0] EXPLICIT OCTET STRING OPTIONAL -- rfc2315: content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL pkcs-7-EncapsulatedContentInfo ::= SEQUENCE { eContentType OBJECT IDENTIFIER, eContent [0] EXPLICIT ANY OPTIONAL } -- We don't use CertificateList here since we only want -- to read the raw data. pkcs-7-CertificateRevocationLists ::= SET OF ANY pkcs-7-CertificateChoices ::= CHOICE { -- Although the paper uses Certificate type, we -- don't use it since, we don't need to parse it. -- We only need to read and store it. certificate ANY } pkcs-7-CertificateSet ::= SET OF pkcs-7-CertificateChoices IssuerAndSerialNumber ::= SEQUENCE { issuer Name, serialNumber CertificateSerialNumber } pkcs-7-SignerInfo ::= SEQUENCE { version INTEGER, sid SignerIdentifier, digestAlgorithm AlgorithmIdentifier, signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL, signatureAlgorithm AlgorithmIdentifier, signature OCTET STRING, unsignedAttrs [1] IMPLICIT SignedAttributes OPTIONAL } SignedAttributes ::= SET SIZE (1..MAX) OF Attribute SignerIdentifier ::= CHOICE { issuerAndSerialNumber IssuerAndSerialNumber, subjectKeyIdentifier [0] SubjectKeyIdentifier } pkcs-7-SignerInfos ::= SET OF pkcs-7-SignerInfo -- BEGIN of RFC2986 -- Certificate requests pkcs-10-CertificationRequestInfo ::= SEQUENCE { version INTEGER { v1(0) }, subject Name, subjectPKInfo SubjectPublicKeyInfo, attributes [0] Attributes } Attributes ::= SET OF Attribute pkcs-10-CertificationRequest ::= SEQUENCE { certificationRequestInfo pkcs-10-CertificationRequestInfo, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } -- stuff from PKCS#9 pkcs-9-ub-challengePassword INTEGER ::= 255 pkcs-9-certTypes OBJECT IDENTIFIER ::= {pkcs-9 22} pkcs-9-crlTypes OBJECT IDENTIFIER ::= {pkcs-9 23} pkcs-9-at-challengePassword OBJECT IDENTIFIER ::= {pkcs-9 7} pkcs-9-challengePassword ::= CHOICE { printableString PrintableString (SIZE (1..pkcs-9-ub-challengePassword)), utf8String UTF8String (SIZE (1..pkcs-9-ub-challengePassword)) } pkcs-9-at-localKeyId OBJECT IDENTIFIER ::= {pkcs-9 21} pkcs-9-localKeyId ::= OCTET STRING pkcs-9-at-friendlyName OBJECT IDENTIFIER ::= {pkcs-9 20} pkcs-9-friendlyName ::= BMPString (SIZE (1..255)) -- PKCS #8 stuff -- Private-key information syntax pkcs-8-PrivateKeyInfo ::= SEQUENCE { version pkcs-8-Version, privateKeyAlgorithm AlgorithmIdentifier, privateKey pkcs-8-PrivateKey, attributes [0] Attributes OPTIONAL } pkcs-8-Version ::= INTEGER {v1(0)} pkcs-8-PrivateKey ::= OCTET STRING pkcs-8-Attributes ::= SET OF Attribute -- Encrypted private-key information syntax pkcs-8-EncryptedPrivateKeyInfo ::= SEQUENCE { encryptionAlgorithm AlgorithmIdentifier, encryptedData pkcs-8-EncryptedData } pkcs-8-EncryptedData ::= OCTET STRING -- PKCS #5 stuff pkcs-5 OBJECT IDENTIFIER ::= { pkcs 5 } pkcs-5-encryptionAlgorithm OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) 3 } pkcs-5-des-EDE3-CBC OBJECT IDENTIFIER ::= {pkcs-5-encryptionAlgorithm 7} pkcs-5-des-EDE3-CBC-params ::= OCTET STRING (SIZE(8)) pkcs-5-id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13} pkcs-5-PBES2-params ::= SEQUENCE { keyDerivationFunc AlgorithmIdentifier, encryptionScheme AlgorithmIdentifier } -- PBKDF2 pkcs-5-id-PBKDF2 OBJECT IDENTIFIER ::= {pkcs-5 12} -- pkcs-5-id-hmacWithSHA1 OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840) rsadsi(113549) 2 7} -- pkcs-5-algid-hmacWithSHA1 AlgorithmIdentifier ::= -- {algorithm pkcs-5-id-hmacWithSHA1, parameters NULL : NULL} pkcs-5-PBKDF2-params ::= SEQUENCE { salt CHOICE { specified OCTET STRING, otherSource AlgorithmIdentifier }, iterationCount INTEGER (1..MAX), keyLength INTEGER (1..MAX) OPTIONAL, prf AlgorithmIdentifier OPTIONAL -- DEFAULT pkcs-5-id-hmacWithSHA1 } -- PKCS #12 stuff pkcs-12 OBJECT IDENTIFIER ::= {pkcs 12} pkcs-12-PFX ::= SEQUENCE { version INTEGER {v3(3)}, authSafe pkcs-7-ContentInfo, macData pkcs-12-MacData OPTIONAL } pkcs-12-PbeParams ::= SEQUENCE { salt OCTET STRING, iterations INTEGER } pkcs-12-MacData ::= SEQUENCE { mac pkcs-7-DigestInfo, macSalt OCTET STRING, iterations INTEGER DEFAULT 1 -- Note: The default is for historical reasons and its use is -- deprecated. A higher value, like 1024 is recommended. } pkcs-12-AuthenticatedSafe ::= SEQUENCE OF pkcs-7-ContentInfo -- Data if unencrypted -- EncryptedData if password-encrypted -- EnvelopedData if public key-encrypted pkcs-12-SafeContents ::= SEQUENCE OF pkcs-12-SafeBag pkcs-12-SafeBag ::= SEQUENCE { bagId OBJECT IDENTIFIER, bagValue [0] EXPLICIT ANY DEFINED BY badId, bagAttributes SET OF pkcs-12-PKCS12Attribute OPTIONAL } -- Bag types pkcs-12-bagtypes OBJECT IDENTIFIER ::= {pkcs-12 10 1} pkcs-12-keyBag OBJECT IDENTIFIER ::= {pkcs-12-bagtypes 1} pkcs-12-pkcs8ShroudedKeyBag OBJECT IDENTIFIER ::= {pkcs-12-bagtypes 2} pkcs-12-certBag OBJECT IDENTIFIER ::= {pkcs-12-bagtypes 3} pkcs-12-crlBag OBJECT IDENTIFIER ::= {pkcs-12-bagtypes 4} pkcs-12-KeyBag ::= pkcs-8-PrivateKeyInfo -- Shrouded KeyBag pkcs-12-PKCS8ShroudedKeyBag ::= pkcs-8-EncryptedPrivateKeyInfo -- CertBag pkcs-12-CertBag ::= SEQUENCE { certId OBJECT IDENTIFIER, certValue [0] EXPLICIT ANY DEFINED BY certId } -- x509Certificate BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {pkcs-9-certTypes 1}} -- DER-encoded X.509 certificate stored in OCTET STRING pkcs-12-CRLBag ::= SEQUENCE { crlId OBJECT IDENTIFIER, crlValue [0] EXPLICIT ANY DEFINED BY crlId } -- x509CRL BAG-TYPE ::= -- {OCTET STRING IDENTIFIED BY {pkcs-9-crlTypes 1}} -- DER-encoded X.509 CRL stored in OCTET STRING pkcs-12-PKCS12Attribute ::= Attribute -- PKCS #7 stuff (needed in PKCS 12) pkcs-7-Data ::= OCTET STRING pkcs-7-EncryptedData ::= SEQUENCE { version INTEGER, encryptedContentInfo pkcs-7-EncryptedContentInfo, unprotectedAttrs [1] IMPLICIT pkcs-7-UnprotectedAttributes OPTIONAL } pkcs-7-EncryptedContentInfo ::= SEQUENCE { contentType OBJECT IDENTIFIER, contentEncryptionAlgorithm pkcs-7-ContentEncryptionAlgorithmIdentifier, encryptedContent [0] IMPLICIT OCTET STRING OPTIONAL } pkcs-7-ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier pkcs-7-UnprotectedAttributes ::= SET SIZE (1..MAX) OF Attribute -- LDAP stuff -- may not be correct id-at-ldap-DC AttributeType ::= { 0 9 2342 19200300 100 1 25 } ldap-DC ::= IA5String id-at-ldap-UID AttributeType ::= { 0 9 2342 19200300 100 1 1 } ldap-UID ::= DirectoryString -- rfc3039 id-pda OBJECT IDENTIFIER ::= { id-pkix 9 } id-pda-dateOfBirth AttributeType ::= { id-pda 1 } DateOfBirth ::= GeneralizedTime id-pda-placeOfBirth AttributeType ::= { id-pda 2 } PlaceOfBirth ::= DirectoryString id-pda-gender AttributeType ::= { id-pda 3 } Gender ::= PrintableString (SIZE(1)) -- "M", "F", "m" or "f" id-pda-countryOfCitizenship AttributeType ::= { id-pda 4 } CountryOfCitizenship ::= PrintableString (SIZE (2)) -- ISO 3166 Country Code id-pda-countryOfResidence AttributeType ::= { id-pda 5 } CountryOfResidence ::= PrintableString (SIZE (2)) -- ISO 3166 Country Code -- rfc3820 id-pe-proxyCertInfo OBJECT IDENTIFIER ::= { id-pe 14 } id-ppl-inheritAll OBJECT IDENTIFIER ::= { id-pkix 21 1 } id-ppl-independent OBJECT IDENTIFIER ::= { id-pkix 21 2 } ProxyCertInfo ::= SEQUENCE { pCPathLenConstraint INTEGER (0..MAX) OPTIONAL, proxyPolicy ProxyPolicy } ProxyPolicy ::= SEQUENCE { policyLanguage OBJECT IDENTIFIER, policy OCTET STRING OPTIONAL } -- rfc3920 section 5.1.1 id-on OBJECT IDENTIFIER ::= { id-pkix 8 } -- other name forms id-on-xmppAddr OBJECT IDENTIFIER ::= { id-on 5 } XmppAddr ::= UTF8String -- ocsp BasicOCSPResponse ::= SEQUENCE { tbsResponseData ResponseData, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING, certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } ResponseData ::= SEQUENCE { version [0] EXPLICIT INTEGER DEFAULT 0, responderID ResponderID, producedAt GeneralizedTime, responses SEQUENCE OF SingleResponse, responseExtensions [1] EXPLICIT Extensions OPTIONAL } ResponderID ::= CHOICE { -- Changed to work with the libtasn1 parser. byName [1] EXPLICIT RDNSequence, --Name byKey [2] EXPLICIT OCTET STRING --SHA-1 hash of responder's public key } CertID ::= SEQUENCE { hashAlgorithm AlgorithmIdentifier, issuerNameHash OCTET STRING, -- Hash of Issuer's DN issuerKeyHash OCTET STRING, -- Hash of Issuers public key serialNumber CertificateSerialNumber } CertStatus ::= CHOICE { good [0] IMPLICIT NULL, revoked [1] IMPLICIT RevokedInfo, unknown [2] IMPLICIT UnknownInfo } SingleResponse ::= SEQUENCE { certID CertID, certStatus CertStatus, thisUpdate GeneralizedTime, nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL, singleExtensions [1] EXPLICIT Extensions OPTIONAL } RevokedInfo ::= SEQUENCE { revocationTime GeneralizedTime, revocationReason [0] EXPLICIT CRLReason OPTIONAL } UnknownInfo ::= NULL -- this can be replaced with an enumeration END -- Copyright (C) 2002-2014 Free Software Foundation, Inc. -- -- This file is part of LIBTASN1. -- -- 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 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . libtasn1-4.16.0/tests/invalid-x509/0000755000000000000000000000000013615400132013554 500000000000000libtasn1-4.16.0/tests/invalid-x509/id-000016.der0000644000000000000000000000127213246341643015325 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0 îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€ülibtasn1-4.16.0/tests/invalid-x509/id-000011.der0000644000000000000000000000063413246341643015321 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹€€€€v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000021.der0000644000000000000000000000116113246341643015316 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â152"0933Z 42 83023 933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœœ¢€€€€€€€€€€€€€€€€j€€€0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$U$*†H†÷  0 1 kUƒ a0 150«15230933Z 42083£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$*†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ KHAÐø’kØzú„¹‡F(½v|§yЫT%U#€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000004.der0000644000000000000000000000311013246341643015313 000000000000000‚ð0‚Ø :ƒ0  *†H†÷  0B1 0 UUS10U  GeoTrust Inc.10UGeoTrust Global CA0 130405151556Z 16121235959Z0I1 0 UUS10U  Google Inc1%0#UGoogle Internet Authority G20‚"0  *†H†÷ ‚0‚ ‚œ*w\ØP‘:£‚àØPe¼‰?ñpˆF~àÅñ‰Î!îZþa ·2D‰ t SOU¤Î‚b•îëY_Æá€Ä^”?¼[€€€€$æû‘éÄÏôS ôJüŸTÞ}¾ ko‡ÀÐP(0@ÚsQlÿ:<§7޽Kë}$Þæùü1qû”Õ`ó.J¯BÒËêÄj²ÌSÝK‹Èaͨ>c+„5ie„ÈÅF"øS•¾ã€JÆ*캗 Ç9™ ðaz•%ŒNRuâ¶íÊüÎ"j³NÏF——~À±Þ{¯E3Ϻ>q·Þô%% 5‰ûy‰7ůŽri£ç0ä0U#0€Àz˜h‰û«d }ª}e¸ÊÌN0U$‚"0  *†‚0‚ ‚œ*w\ØP‘:£‚àØPH¼‰?ñpˆF~àÅñ‰Î!îZþa ·2D‰ t SOU¤Î‚b•îëY_Æá€Ä^”?¼[H8ôS÷$æû‘éÄÏôS ôJJݼöhµvõ¶»bºZ/0Uÿ0.+"0 0+0†http://g.symc€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€d.com0Uÿ0ÿ05U.,0* ( &†$http://g.symcb.com/crls/gtglobal.crl0uuuuuuuuuuuuuuuuuuuuuuuuuuuu†H†÷  ‚ªúgƒí^Ô~ÞÄà%Å$û©È-m~Þ‚e,c4f>éR´Ë/÷_™:jœPz…Œ}Ñ*H„Ó l|ÂÍ5Ÿó‚îRÞh_äŠ –÷)šMË¨Þ†È oV‡}?Üúy}!ùlibtasn1-4.16.0/tests/invalid-x509/id-000032.der0000644000000000000000000000072513246341643015325 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 50â15230933Z 4208302309Q3Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c2I0U#0€".61:Q¡§ÿI3ð9Fœ¢€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€0U#0€".1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000028.der0000644000000000000000000000065613246341643015335 000000000000000‚a0‚   îÙcbSÖu0  *ÿÿÿ  0 1 0Uƒ a0 150â15230933 420830230933Z0 1 0U a0\0  *†Hy÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢cI0U#0€".61}:¡§ÿI3ð9F¼¢€€€€€€€€€€€€€€€€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q€€€€€€€€€€€€€þlibtasn1-4.16.0/tests/invalid-x509/id-000001.der0000644000000000000000000000065513246341643015323 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".—61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€".—61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000000.der0000644000000000000000000000130013246341643015306 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".Ð@Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ülibtasn1-4.16.0/tests/invalid-x509/id-000024.der0000644000000000000000000000055013246341643015322 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫ:·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§®I3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‡libtasn1-4.16.0/tests/invalid-x509/id-000003.der0000644000000000000000000000141713246341643015322 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.Ÿ^³Ù_qÇO”8TÞ®ù/vÏ bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.Ÿ^³Ù_qÇO”8TÞ®ù/vÏ bf`q$3£P0N0U$".ÇO”8TÞ®ù/vÏ bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€€€libtasn1-4.16.0/tests/invalid-x509/id-000013.der0000644000000000000000000000066213246341643015324 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÐsVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€libtasn1-4.16.0/tests/invalid-x509/id-000014.der0000644000000000000000000000106713246341643015325 000000000000000‚a0‚   îÙcbSÖu0  *H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0=U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000002.der0000644000000000000000000000130513246341643015315 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?7ßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€libtasn1-4.16.0/tests/invalid-x509/id-000034.der0000644000000000000000000000131013246341643015316 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0U a0 1504152C0933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yº«T·_?Hßw«iÚ±BsVöL.¯^³Ù_qÇO”8TÞ®ù>vç bf`q$3£P0€0U$".61}Q¡§žI3ð9Fœ¢cI€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€000€U#0€".61}Q¡U0ÿ0  *†H†÷  AÎJCÛÍù‘f€‡µE¡²±dÂEZŸÏáQ 7Fƒèuåõ;Û5®¤OgZ;ÜŠ„$y¹\3(\ô9!뙥ãlibtasn1-4.16.0/tests/invalid-x509/id-000027.der0000644000000000000000000000071113246341643015324 000000000000000‚a0‚   îÙcbSÖu0  *™H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000022.der0000644000000000000000000000074313246341643015324 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐøkØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€Ðlibtasn1-4.16.0/tests/invalid-x509/id-000023.der0000644000000000000000000000055013246341643015321 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}U¡§žI3ð9Fœ¢c'I0U#0€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€Ðlibtasn1-4.16.0/tests/invalid-x509/id-000007.der0000644000000000000000000000056413246341643015330 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".JС§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000005.der0000644000000000000000000000311013246341643015314 000000000000000‚ð0‚Ø :ƒ0  *†H†÷  0B1 0 UUS10U  GeoTrust Inc.10UGeoTrust Global CA0 130405151556Z 16121235959Z0I1 0 UUS10U  Google Inc1%0#UGoogle Internet Authority G20‚"0  *†H†÷ ‚0‚ ‚œ*w\ØP‘:£‚àØPe¼‰?ñpˆF~àÅñ‰Î!îZþa ·2D‰ t SOU¤Î‚b•îëY_Æá€Ä^”?¼[€€€€$æû‘éÄÏôS ôJüŸTÞ}¾ ko‡ÀÐP(0@ÚsQlÿ:<§7޽Kë}$Þæùü1qû”Õ`ó.J¯BÒËêÄj²ÌSÝK‹Èaͨ>c+„5ie„ÈÅF"øS•¾ã€JÆ*캗 Ç9™ ðaz•%ŒNRuâ¶íÊüÎ"j³NÏF——~À±Þ{¯E3Ϻ>q·Þô%% 5‰ûy‰7ůŽri£ç0ä0U#0€Àz˜h‰û«d }ª}e¸ÊÌN0U$‚"0  *†‚0‚ ‚œ*w\ØP‘:£‚àØPH¼‰?ñpˆF~àÅñ‰Î!îZþa ·2D‰ t SOU¤Î‚b•îëY_Æá€Ä^”?¼[H8ôS÷$æû‘éÄÏôS ôJJݼöhµvõ¶»bºZ/0Uÿ0.+"0 0+0†http://g.symc€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€d.com0Uÿ0ÿ05U.,0* ( &†$http://g.symcb.com/crls/gtglobal.crl0uuuuuuuuuuuuuuuuuuuuuuuuuuuu†H†÷  ‚ªúgƒí^Ô~ÞÄà%Å$û©È-m~Þ‚e,c4f>éR´Ë/÷_™:jœPz…Œ}Ñ*H„Ó l|ÂÍ5Ÿó‚îRÞh_äŠ –÷)šMË¨Þ†È oV‡}}!ùlibtasn1-4.16.0/tests/invalid-x509/id-000006.der0000644000000000000000000000125613246341643015326 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷ û 0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_ŠÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3 9Fœ¢€€€€€€€€€€€€€€€€€€€€U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€ îÙcbSÖu0  *†H†÷ û 0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}QÀ§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3 9Fœ¢€€€€€€€€€€€€€€€€€€€€U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð€€€libtasn1-4.16.0/tests/invalid-x509/id-000012.der0000644000000000000000000000056613246341643015326 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷ 0 1 0Uƒ a0 150â15230933Z 420830230933¦0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$1}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c(I0€€€€€€€€€€€€€€U#0ÿ".J1}Q¡§ÿI3ð:Fœ¢€€€€€€€€€€€€€€€€ülibtasn1-4.16.0/tests/invalid-x509/id-000020.der0000644000000000000000000000107013246341643015314 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â152"0933Z 42 830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœœ¢€€€€€€€€€€€€€€€€€€€€U$*†H†÷  0 1 kUƒ a0 150«15230933Z 42083£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$*†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT%U#€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000010.der0000644000000000000000000000072613246341643015322 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡ F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`a$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€Ðlibtasn1-4.16.0/tests/invalid-x509/id-000030.der0000644000000000000000000000127713246341643015326 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?HÂw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3Ä9Fœ¢€€€€€€€€€€€€€€€€€€€€0‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?HÂw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£€U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3Ä9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0%U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€U$".61}Q¡§žI3ð9Fœ¢c'I0%U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€Ðlibtasn1-4.16.0/tests/invalid-x509/id-000031.der0000644000000000000000000000127713246341643015327 000000000000000‚a0‚   îÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ïK0HAÐø’kØzú„¹‡F(½v|§yЫT·_?HÂw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3Ä9Fœ¢€€€€€€€€€€€€€€€€€€€€0‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?HÂw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€%U#0€".J1}Q¡§ÿI3ð9F¼¢€€€€€€€€€€€€€€€Ðlibtasn1-4.16.0/tests/invalid-x509/id-000025.der0000644000000000000000000000116613246341643015327 000000000000000‚a0€  îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡ÿÿûv|§yЫT·_?Hßw«iÚ± sV L.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢t'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€33Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡ÿÿûv|§yЫT·_?Hßw«iÚ± sV L.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢t'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœˆ€€€€€€€€€€€€€€€€€€€€€€€€€U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœˆ€€€€€€€€€€€€€€€ülibtasn1-4.16.0/tests/invalid-x509/id-000029.der0000644000000000000000000000066713246341643015340 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$$.61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0íU#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0íU#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€€€€€€€èlibtasn1-4.16.0/tests/invalid-x509/id-000019.der0000644000000000000000000000101413246341643015322 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$".63ð9Fœ¢c'I0U#0€".J1}§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€libtasn1-4.16.0/tests/invalid-x509/id-000035.der0000644000000000000000000000130013246341643015316 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".Ð@Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ülibtasn1-4.16.0/tests/invalid-x509/id-000009.der0000644000000000000000000000067313246341643015333 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ dK0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0ïU#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}V¡§ÿI3ð9Fœ¢€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000008.der0000644000000000000000000000111113246341643015316 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0%U#0€".J1}Q¡§ÿI3a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0%U#0€ð9Fœ¢€€€€€€€€€€€€€€€€€ýlibtasn1-4.16.0/tests/invalid-x509/id-000018.der0000644000000000000000000000104713246341643015327 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933^ 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(ÿ|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bÿÿû3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".6HAÐø’kØzú„¹‡F(ÿ|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bÿÿû3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I01}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000017.der0000644000000000000000000000131613246341643015325 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 42083€30933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q~§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$".61}Q¡§I3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€€€€€€libtasn1-4.16.0/tests/invalid-x509/id-000015.der0000644000000000000000000000132013246341643015316 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U@0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ülibtasn1-4.16.0/tests/invalid-x509/id-000026.der0000644000000000000000000000067513246341643015334 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡%(@|§yЫT·?Hßw«iÚ± sVöL.¯^³Ù_qÇO”8TÞ®ù/vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€ U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€ÿlibtasn1-4.16.0/tests/invalid-x509/id-000033.der0000644000000000000000000000131613246341643015323 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVÐ^³Ù_qÇO”8TÞ®ù/vç bf`q$£P0N0U$@".U#cbSÖu0  *†H†÷  0 1 0Uƒ a0 150â15230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yЫT·_?Hßw«iÚ± sVöÐ^³Ù_qÇO”8TÞ®ù/vç bf`q$£P0N0U$@".U#0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€0€".61}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€0U$".61}Q¡§žI3ð9Fœ¢c'I0U#0€".J1}Q¡§ÿI3ð9Fœ¢€€€€€€€€€€€€€€€€€€€€€libtasn1-4.16.0/tests/Test_parser.asn0000644000000000000000000000235613246341643014362 00000000000000-- -- File used in the test sequence Test_parser. -- TEST_PARSER {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)} DEFINITIONS IMPLICIT TAGS ::= BEGIN Sequence1 ::= SEQUENCE{ int1 -- Test -- INTEGER (5), int2 INTEGER (10 | 12), generic GeneralString } OidTest ::= SEQUENCE{ oid1 OBJECT IDENTIFIER DEFAULT Oid-type1 } Oid-type1 OBJECT IDENTIFIER ::= {1 2 3 4} Bitstringsizetest ::= BIT STRING (SIZE(42)) END -- Copyright (C) 2002-2014 Free Software Foundation, Inc. -- -- This file is part of LIBTASN1. -- -- 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 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . libtasn1-4.16.0/tests/parser.sh0000755000000000000000000000225413520774070013213 00000000000000#!/bin/sh # Copyright (C) 2019 Red Hat, 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PARSER="${PARSER:-../src/asn1Parser${EXEEXT}}" srcdir="${srcdir:-.}" TMPFILE=pkix.asn.$$.tmp if ! test -z "${VALGRIND}"; then VALGRIND="${LIBTOOL:-libtool} --mode=execute valgrind --leak-check=full" fi echo "Test: PKIX file generation" ${VALGRIND} ${PARSER} ${srcdir}/pkix.asn -o ${TMPFILE} if test $? != 0;then echo "Cannot generate C file!" exit 1 fi diff --strip-trailing-cr ${TMPFILE} ${srcdir}/pkix.asn.out if test $? != 0;then echo "Generated C file differs!" exit 1 fi rm -f ${TMPFILE} exit 0 libtasn1-4.16.0/tests/decoding-invalid-pkcs70000755000000000000000000000247413246341643015540 00000000000000#!/bin/sh # Copyright (C) 2017 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . srcdir="${srcdir:-.}" if ! test -z "${VALGRIND}";then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=7 --leak-check=no" fi TMPFILE=decoding-invalid.$$.tmp ASN1DECODING="${ASN1DECODING:-../src/asn1Decoding$EXEEXT}" ASN1PKIX="${ASN1PKIX:-pkix.asn}" # This tests an invalid input which caused an infinite recursion # to certain libtasn1 versions. for i in "${srcdir}/invalid-pkcs7/"*.der;do $VALGRIND $ASN1DECODING "$ASN1PKIX" "$i" PKIX1.pkcs-7-ContentInfo >$TMPFILE 2>&1 ret=$? if test $ret != 1;then echo "Decoding failed for $i" cat $TMPFILE exit 1 fi echo "$(basename $i): ok" done rm -f $TMPFILE exit 0 libtasn1-4.16.0/tests/Test_choice_ocsp.c0000644000000000000000000000347313246341643015006 00000000000000#include #include #include #include int main (int argc, char** argv) { int result = 0, len; asn1_node definitions = NULL, node1 = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; const char *choicefile = getenv ("ASN1CHOICE_OCSP"); const char *datafile = getenv ("ASN1CHOICE_OCSP_DATA"); FILE *fp; char data[1024]; char data2[1024]; int data_size = sizeof (data); if (!choicefile) choicefile = "pkix.asn"; if (!datafile) datafile = "ocsp.der"; /* Encode */ result = asn1_parser2tree (choicefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d: %s\n", __LINE__, errorDescription); exit (1); } result = asn1_create_element (definitions, "PKIX1.ResponseData", &node1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } fp = fopen(datafile, "rb"); if (fp == NULL) { printf ("error in %d\n", __LINE__); exit (1); } data_size = fread(data, 1, sizeof(data), fp); fclose(fp); result = asn1_der_decoding (&node1, data, data_size, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d: %s\n", __LINE__, errorDescription); exit (1); } len = sizeof(data2); result = asn1_der_coding (node1, "", data2, &len, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d: %s\n", __LINE__, errorDescription); exit (1); } if (len != data_size) { printf ("length doesn't match (got: %d, should be: %d)\n", len, data_size); exit (1); } if (memcmp(data, data2, len) != 0) { printf ("contents don't match\n"); exit (1); } asn1_delete_structure (&node1); asn1_delete_structure (&definitions); return 0; } libtasn1-4.16.0/tests/strict-der.c0000644000000000000000000000676513246341643013620 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include "libtasn1.h" int main (int argc, char *argv[]) { int result; char buffer[10 * 1024]; asn1_node definitions = NULL; asn1_node asn1_element = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; FILE *out, *fd; int size; const char *treefile = getenv ("ASN1PKIX"); const char *indeffile = getenv ("ASN1INDEF"); int verbose = 0; if (argc > 1) verbose = 1; if (!treefile) treefile = "pkix.asn"; if (!indeffile) indeffile = "TestIndef.p12"; if (verbose) { printf ("\n\n/****************************************/\n"); printf ("/* Test sequence : strict DER decoding */\n"); printf ("/****************************************/\n\n"); printf ("ASN1TREE: %s\n", treefile); } /* Check version */ if (asn1_check_version ("0.2.11") == NULL) printf ("\nLibrary version check ERROR:\n actual version: %s\n\n", asn1_check_version (NULL)); result = asn1_parser2tree (treefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } out = stdout; fd = fopen (indeffile, "rb"); if (fd == NULL) { printf ("Cannot read file %s\n", indeffile); exit (1); } size = fread (buffer, 1, sizeof (buffer), fd); if (size <= 0) { printf ("Cannot read from file %s\n", indeffile); exit (1); } fclose (fd); result = asn1_create_element (definitions, "PKIX1.pkcs-12-PFX", &asn1_element); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot create PKCS12 element\n"); exit (1); } result = asn1_der_decoding2 (&asn1_element, buffer, &size, 0, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot decode BER data (size %ld) in %s: %s\n", (long) size, indeffile, errorDescription); exit (1); } asn1_delete_structure (&asn1_element); /* Now try with strict DER */ result = asn1_create_element (definitions, "PKIX1.pkcs-12-PFX", &asn1_element); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot create PKCS12 element\n"); exit (1); } result = asn1_der_decoding2 (&asn1_element, buffer, &size, ASN1_DECODE_FLAG_STRICT_DER, errorDescription); if (result == ASN1_SUCCESS) { asn1_perror (result); printf ("Should not have decoded DER data (size %ld) in %s: %s\n", (long) size, indeffile, errorDescription); exit (1); } asn1_delete_structure (&asn1_element); /* Clear the definition structures */ asn1_delete_structure (&definitions); if (out != stdout) fclose (out); exit (0); } libtasn1-4.16.0/tests/Test_tree_asn1_tab.c0000644000000000000000000001213513512007517015225 00000000000000#if HAVE_CONFIG_H # include "config.h" #endif #include const asn1_static_node Test_tree_asn1_tab[] = { { "TEST_TREE", 536875024, NULL }, { NULL, 1610612748, NULL }, { "iso", 1073741825, "1"}, { "identified-organization", 1073741825, "3"}, { "dod", 1073741825, "6"}, { "internet", 1073741825, "1"}, { "security", 1073741825, "5"}, { "mechanisms", 1073741825, "5"}, { "pkix", 1073741825, "7"}, { "id-mod", 1073741825, "0"}, { "id-pkix1-implicit-88", 1, "2"}, { "KrbError", 1610620933, NULL }, { NULL, 1073746952, "30"}, { "pvno", 536879107, NULL }, { NULL, 4104, "0"}, { "Checksum", 1610612741, NULL }, { "checksum", 536879111, NULL }, { NULL, 4104, "1"}, { "CertTemplate", 1610612741, NULL }, { "version", 1610637315, NULL }, { NULL, 4104, "0"}, { "issuer", 1610637314, "Name"}, { NULL, 4104, "3"}, { "validity", 536895491, NULL }, { NULL, 4104, "4"}, { "Name", 1610612754, NULL }, { "rdnSequence", 2, "RDNSequence"}, { "RDNSequence", 1073741826, "RelativeDistinguishedName"}, { "RelativeDistinguishedName", 1612709903, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "AttributeTypeAndValue"}, { "AttributeTypeAndValue", 1610612741, NULL }, { "type", 1073741826, "AttributeType"}, { "value", 2, "AttributeValue"}, { "AttributeType", 1073741836, NULL }, { "AttributeValue", 1073741837, NULL }, { "sequenceEmpty", 1610612741, NULL }, { "int1", 1073741827, NULL }, { "seq1", 1610620930, "Sequence_octetTest1"}, { NULL, 4104, "1"}, { "set1", 536879119, NULL }, { NULL, 1073743880, "2"}, { NULL, 3, NULL }, { "IndefiniteLengthTest", 1610612741, NULL }, { "seq1", 1610620930, "Sequence_octetTest1"}, { NULL, 4104, "1"}, { "set1", 1610612751, NULL }, { NULL, 12, NULL }, { "int1", 3, NULL }, { "OidTest", 1610612741, NULL }, { "oid3", 1610653708, NULL }, { NULL, 1073741833, "id-Test"}, { NULL, 4104, "3"}, { "oid", 1610653708, NULL }, { NULL, 1073741833, "id-anyTest2"}, { NULL, 4104, "1"}, { "oid2", 536911884, NULL }, { NULL, 1073741833, "id-anyTest"}, { NULL, 4104, "2"}, { "OidAndTimeTest", 1610612741, NULL }, { "set", 1610612751, NULL }, { NULL, 3, NULL }, { "oid", 1073741836, NULL }, { "time2", 1082130449, NULL }, { "bol", 1073741828, NULL }, { "oct", 1073741831, NULL }, { "bit", 1073758214, NULL }, { "bol2", 1610645508, NULL }, { NULL, 65545, NULL }, { "enum", 1610907669, NULL }, { NULL, 1073741833, "v1"}, { "v1", 1073741825, "1"}, { "v2", 1, "2"}, { "any", 1610637325, NULL }, { NULL, 4104, "1"}, { "gen", 1073758235, NULL }, { "time1", 16777233, NULL }, { "SequenceTestTag", 1610612741, NULL }, { "int1", 1610620931, NULL }, { NULL, 2056, "2"}, { "int2", 1610620931, NULL }, { NULL, 4104, "3"}, { "str1", 1610620959, NULL }, { NULL, 4104, "1"}, { "str2", 1073741856, NULL }, { "str3", 536879136, NULL }, { NULL, 2056, "2"}, { "Sequence1", 1610612741, NULL }, { "int1", 1610915843, NULL }, { NULL, 1073741833, "v2"}, { NULL, 1073745928, "0"}, { "v1", 1073741825, "0"}, { "v2", 1073741825, "1"}, { "v3", 1, "2"}, { "int2", 1073741827, NULL }, { "seq", 1610612751, NULL }, { NULL, 3, NULL }, { "id", 1073741836, NULL }, { "oct", 1073741831, NULL }, { "any1", 541081613, NULL }, { "id", 1, NULL }, { "DHParameter", 1610612741, NULL }, { "prime", 1073741827, NULL }, { "base", 1073741827, NULL }, { "privateValueLength", 16387, NULL }, { "id-octetTest1", 1879048204, NULL }, { NULL, 1073741825, "1"}, { NULL, 1073741825, "2"}, { NULL, 1073741825, "3"}, { NULL, 1, "4"}, { "Sequence_octetTest1", 1610612741, NULL }, { "int", 16387, NULL }, { "AnyTest2", 1610612754, NULL }, { "str", 1073741831, NULL }, { "int", 3, NULL }, { "id-ic", 1879048204, NULL }, { NULL, 1073741825, "2"}, { NULL, 1, "5"}, { "id-anyTest", 1879048204, NULL }, { NULL, 1073741825, "id-ic"}, { NULL, 1073741825, "29"}, { NULL, 1, "1"}, { "id-anyTest2", 1879048204, NULL }, { NULL, 1073741825, "id-ic"}, { NULL, 1073741825, "29"}, { NULL, 1, "2"}, { "anyTest2", 1073741827, NULL }, { "VisibleString", 1610620935, NULL }, { NULL, 4360, "26"}, { "NumericString", 1610620935, NULL }, { NULL, 4360, "18"}, { "IA5String", 1610620935, NULL }, { NULL, 4360, "22"}, { "TeletexString", 1610620935, NULL }, { NULL, 4360, "20"}, { "PrintableString", 1610620935, NULL }, { NULL, 4360, "19"}, { "UniversalString", 1610620935, NULL }, { NULL, 4360, "28"}, { "BMPString", 1610620935, NULL }, { NULL, 4360, "30"}, { "UTF8String", 1610620935, NULL }, { NULL, 4360, "12"}, { "Test3", 1610612741, NULL }, { "a", 1073741827, NULL }, { "b", 536879106, "GeneralString2"}, { NULL, 2056, "1"}, { "GeneralString2", 1610620955, NULL }, { NULL, 2056, "2"}, { "X520LocalityName", 1610612754, NULL }, { "teletexString", 1073741854, NULL }, { "printableString", 1073741855, NULL }, { "universalString", 1073741856, NULL }, { "utf8String", 1073741858, NULL }, { "bmpString", 33, NULL }, { "id-Test", 805306380, NULL }, { NULL, 1073741825, "1"}, { NULL, 1073741825, "2"}, { NULL, 1073741825, "29"}, { NULL, 1, "2"}, { NULL, 0, NULL } }; libtasn1-4.16.0/tests/TestIndef3.der0000644000000000000000000000122413246341643014021 000000000000000‚ *†H†÷   ‚€‚|0‚x0‚á  “9Ö-,¸¥0  *†H†÷ 0U1 0 UAU10U Some-State1!0U Internet Widgits Pty Ltd10 U Dummy0 120718161341Z 130718161341Z0U1 0 UAU10U Some-State1!0U Internet Widgits Pty Ltd10 U Dummy0Ÿ0  *†H†÷ 0‰É]éȉºñ%:^«ÔÈMÛ µîíéöÀe`¾j‘"\£F_FFÅ`WDÚÌa‹±>Ðü¬urÉ…Ô*%ÄI{´»d…Û‹@×d箄áÁ'³vHñ©X²ÇEÏ™¼˜–ñ)íÆfD,_raÑì»,­ªQƒa£P0N0UÖMžªÇÜ$jY‹ÿ¸O¤¦T80U#0€ÖMžªÇÜ$jY‹ÿ¸O¤¦T80 U0ÿ0  *†H†÷ ·}¸šECA}pûŠÞù©R ~ Q`~[Q6¾B€”4¦¬f’ ^E=ɧ´äúR,ûlibtasn1-4.16.0/tests/coding-long-oid.c0000644000000000000000000002341113246341643014474 00000000000000/* * Copyright (C) 2016 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include /* This checks the decoding and re-encoding of OIDs which contain elements * >= 2^32 bits. */ const unsigned char der_data[] = "\x30\x82\x06\xdc\x30\x82\x05\xc4\xa0\x03\x02\x01\x02\x02\x08\x35" "\x73\x8c\xaf\x21\xea\xbd\x2d\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7" "\x0d\x01\x01\x05\x05\x00\x30\x81\x8e\x31\x0b\x30\x09\x06\x03\x55" "\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15\x06\x03\x55\x04\x08\x13" "\x0e\x4e\x6f\x72\x74\x68\x20\x43\x61\x72\x6f\x6c\x69\x6e\x61\x31" "\x10\x30\x0e\x06\x03\x55\x04\x07\x13\x07\x52\x61\x6c\x65\x69\x67" "\x68\x31\x10\x30\x0e\x06\x03\x55\x04\x0a\x13\x07\x4b\x61\x74\x65" "\x6c\x6c\x6f\x31\x14\x30\x12\x06\x03\x55\x04\x0b\x13\x0b\x53\x6f" "\x6d\x65\x4f\x72\x67\x55\x6e\x69\x74\x31\x2c\x30\x2a\x06\x03\x55" "\x04\x03\x13\x23\x73\x61\x74\x2d\x72\x32\x32\x30\x2d\x31\x30\x2e" "\x6c\x61\x62\x2e\x65\x6e\x67\x2e\x72\x64\x75\x32\x2e\x72\x65\x64" "\x68\x61\x74\x2e\x63\x6f\x6d\x30\x1e\x17\x0d\x31\x36\x30\x37\x30" "\x31\x31\x38\x35\x34\x31\x37\x5a\x17\x0d\x34\x39\x31\x32\x30\x31" "\x31\x33\x30\x30\x30\x30\x5a\x30\x2b\x31\x29\x30\x27\x06\x03\x55" "\x04\x03\x13\x20\x38\x61\x38\x38\x38\x30\x31\x37\x35\x35\x61\x37" "\x63\x39\x30\x37\x30\x31\x35\x35\x61\x37\x63\x66\x62\x65\x33\x36" "\x30\x30\x30\x34\x30\x82\x01\x22\x30\x0d\x06\x09\x2a\x86\x48\x86" "\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x00\x30\x82\x01\x0a" "\x02\x82\x01\x01\x00\xdc\x70\x8b\x9c\x84\xe9\x3e\x79\x8f\x03\xe5" "\x5f\x21\xf0\x29\x9e\xd9\x94\x4e\x0f\x37\x45\x47\x42\xda\x2a\xe0" "\xda\xf5\x8b\xfa\xe1\xf8\x62\x51\x14\x9d\x9e\xe0\xc7\x69\xd0\x3d" "\xfc\x25\x2f\xb6\x10\x45\xbd\x0d\xbc\x92\x86\x54\xbb\x4e\x7d\xd4" "\x92\x75\x65\xba\x48\xa4\x64\xa1\xeb\xf7\xe7\xdc\xc0\xd7\x0a\x5e" "\x36\x13\x0e\x4e\x35\xcc\x2c\xc6\xf3\xe7\xe7\xe5\x32\x8a\x0c\xf7" "\x47\x28\x7a\x02\xc2\x68\x66\x19\x3a\xba\xca\x31\xe2\xdd\x43\xbe" "\x26\x4c\x80\x12\x0c\xae\x44\x40\xeb\x69\x7d\x9e\x58\xd3\xab\xaf" "\x69\xe6\x54\xae\x7d\x80\xee\x2c\x10\xe9\xbb\x5e\x6b\x89\x15\x2e" "\x2c\x72\x26\xba\x7f\xe5\xa3\x66\xc5\x98\xc6\x57\xbf\x05\x1e\x55" "\x93\xa6\x16\x83\xa6\x88\x79\x8f\x4e\xb5\x7e\x70\xeb\xf0\xa9\xa6" "\xd5\xf9\x1f\xe6\xab\x70\x06\x43\xe0\xde\x82\xad\x0e\x04\x17\x2b" "\x69\x82\x40\x98\x84\x14\x00\x2a\xa2\xda\x61\x7b\x35\xac\x71\x05" "\x43\x6f\x55\x3a\x28\x4b\xd1\xa4\xeb\x3b\xf5\x03\xc2\xf8\x3c\xfd" "\x0a\xc4\x99\x1d\xa7\x7d\x08\x5c\xd1\x15\x70\x73\xb9\xdc\x5c\xf2" "\xfe\x2c\xc6\x21\x8a\xbe\xbd\x52\x37\x64\x04\xe5\x06\x3e\xc6\x62" "\xa1\xe9\x8e\xcb\xc1\x02\x03\x01\x00\x01\xa3\x82\x03\x9e\x30\x82" "\x03\x9a\x30\x11\x06\x09\x60\x86\x48\x01\x86\xf8\x42\x01\x01\x04" "\x04\x03\x02\x05\xa0\x30\x0b\x06\x03\x55\x1d\x0f\x04\x04\x03\x02" "\x04\xb0\x30\x81\xc3\x06\x03\x55\x1d\x23\x04\x81\xbb\x30\x81\xb8" "\x80\x14\xca\xca\x62\x86\x04\x05\xf0\xf5\x9b\x38\xd2\x2c\x3c\x8c" "\x65\x0f\xc6\xba\xa5\x3c\xa1\x81\x94\xa4\x81\x91\x30\x81\x8e\x31" "\x0b\x30\x09\x06\x03\x55\x04\x06\x13\x02\x55\x53\x31\x17\x30\x15" "\x06\x03\x55\x04\x08\x13\x0e\x4e\x6f\x72\x74\x68\x20\x43\x61\x72" "\x6f\x6c\x69\x6e\x61\x31\x10\x30\x0e\x06\x03\x55\x04\x07\x13\x07" "\x52\x61\x6c\x65\x69\x67\x68\x31\x10\x30\x0e\x06\x03\x55\x04\x0a" "\x13\x07\x4b\x61\x74\x65\x6c\x6c\x6f\x31\x14\x30\x12\x06\x03\x55" "\x04\x0b\x13\x0b\x53\x6f\x6d\x65\x4f\x72\x67\x55\x6e\x69\x74\x31" "\x2c\x30\x2a\x06\x03\x55\x04\x03\x13\x23\x73\x61\x74\x2d\x72\x32" "\x32\x30\x2d\x31\x30\x2e\x6c\x61\x62\x2e\x65\x6e\x67\x2e\x72\x64" "\x75\x32\x2e\x72\x65\x64\x68\x61\x74\x2e\x63\x6f\x6d\x82\x09\x00" "\xa4\xe7\xca\xeb\xbe\x43\x5d\xcc\x30\x1d\x06\x03\x55\x1d\x0e\x04" "\x16\x04\x14\x0e\x8d\x7b\x53\xba\x5a\x9e\x92\x44\xe5\x64\x58\xa1" "\xdb\x83\x47\x05\x3e\x32\xd3\x30\x13\x06\x03\x55\x1d\x25\x04\x0c" "\x30\x0a\x06\x08\x2b\x06\x01\x05\x05\x07\x03\x02\x30\x2a\x06\x10" "\x2b\x06\x01\x04\x01\x92\x08\x09\x01\xaa\xda\xbe\xbe\xfa\x5b\x01" "\x04\x16\x0c\x14\x6d\x6f\x72\x64\x6f\x72\x5f\x75\x65\x62\x65\x72" "\x5f\x70\x72\x6f\x64\x75\x63\x74\x30\x16\x06\x10\x2b\x06\x01\x04" "\x01\x92\x08\x09\x01\xaa\xda\xbe\xbe\xfa\x5b\x03\x04\x02\x0c\x00" "\x30\x16\x06\x10\x2b\x06\x01\x04\x01\x92\x08\x09\x01\xaa\xda\xbe" "\xbe\xfa\x5b\x02\x04\x02\x0c\x00\x30\x16\x06\x10\x2b\x06\x01\x04" "\x01\x92\x08\x09\x01\xaa\xda\xbe\xbe\xfa\x5b\x05\x04\x02\x0c\x00" "\x30\x19\x06\x10\x2b\x06\x01\x04\x01\x92\x08\x09\x02\xaa\xda\xbe" "\xbe\xfa\x72\x01\x04\x05\x0c\x03\x79\x75\x6d\x30\x24\x06\x11\x2b" "\x06\x01\x04\x01\x92\x08\x09\x02\xaa\xda\xbe\xbe\xfa\x72\x01\x01" "\x04\x0f\x0c\x0d\x75\x65\x62\x65\x72\x5f\x63\x6f\x6e\x74\x65\x6e" "\x74\x30\x32\x06\x11\x2b\x06\x01\x04\x01\x92\x08\x09\x02\xaa\xda" "\xbe\xbe\xfa\x72\x01\x02\x04\x1d\x0c\x1b\x31\x34\x36\x37\x33\x39" "\x39\x32\x35\x37\x34\x33\x35\x5f\x75\x65\x62\x65\x72\x5f\x63\x6f" "\x6e\x74\x65\x6e\x74\x30\x1d\x06\x11\x2b\x06\x01\x04\x01\x92\x08" "\x09\x02\xaa\xda\xbe\xbe\xfa\x72\x01\x05\x04\x08\x0c\x06\x43\x75" "\x73\x74\x6f\x6d\x30\x1e\x06\x11\x2b\x06\x01\x04\x01\x92\x08\x09" "\x02\xaa\xda\xbe\xbe\xfa\x72\x01\x06\x04\x09\x0c\x07\x2f\x6d\x6f" "\x72\x64\x6f\x72\x30\x17\x06\x11\x2b\x06\x01\x04\x01\x92\x08\x09" "\x02\xaa\xda\xbe\xbe\xfa\x72\x01\x07\x04\x02\x0c\x00\x30\x18\x06" "\x11\x2b\x06\x01\x04\x01\x92\x08\x09\x02\xaa\xda\xbe\xbe\xfa\x72" "\x01\x08\x04\x03\x0c\x01\x31\x30\x24\x06\x0a\x2b\x06\x01\x04\x01" "\x92\x08\x09\x04\x01\x04\x16\x0c\x14\x6d\x6f\x72\x64\x6f\x72\x5f" "\x75\x65\x62\x65\x72\x5f\x70\x72\x6f\x64\x75\x63\x74\x30\x10\x06" "\x0a\x2b\x06\x01\x04\x01\x92\x08\x09\x04\x02\x04\x02\x0c\x00\x30" "\x1d\x06\x0a\x2b\x06\x01\x04\x01\x92\x08\x09\x04\x03\x04\x0f\x0c" "\x0d\x31\x34\x36\x37\x33\x39\x39\x32\x35\x37\x34\x33\x35\x30\x11" "\x06\x0a\x2b\x06\x01\x04\x01\x92\x08\x09\x04\x05\x04\x03\x0c\x01" "\x31\x30\x24\x06\x0a\x2b\x06\x01\x04\x01\x92\x08\x09\x04\x06\x04" "\x16\x0c\x14\x32\x30\x31\x36\x2d\x30\x37\x2d\x30\x31\x54\x31\x38" "\x3a\x35\x34\x3a\x31\x37\x5a\x30\x24\x06\x0a\x2b\x06\x01\x04\x01" "\x92\x08\x09\x04\x07\x04\x16\x0c\x14\x32\x30\x34\x39\x2d\x31\x32" "\x2d\x30\x31\x54\x31\x33\x3a\x30\x30\x3a\x30\x30\x5a\x30\x11\x06" "\x0a\x2b\x06\x01\x04\x01\x92\x08\x09\x04\x0c\x04\x03\x0c\x01\x30" "\x30\x11\x06\x0a\x2b\x06\x01\x04\x01\x92\x08\x09\x04\x0e\x04\x03" "\x0c\x01\x30\x30\x11\x06\x0a\x2b\x06\x01\x04\x01\x92\x08\x09\x04" "\x0b\x04\x03\x0c\x01\x31\x30\x34\x06\x0a\x2b\x06\x01\x04\x01\x92" "\x08\x09\x05\x01\x04\x26\x0c\x24\x39\x34\x35\x33\x66\x38\x65\x36" "\x2d\x38\x34\x62\x32\x2d\x34\x38\x32\x65\x2d\x61\x33\x65\x61\x2d" "\x30\x31\x63\x33\x62\x33\x65\x32\x36\x36\x61\x35\x30\x0d\x06\x09" "\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00" "\xf7\x4d\xf3\x30\x53\xcd\x35\xbf\x49\x07\x29\x9b\xf0\x7a\xaa\x49" "\x60\xda\xce\x14\x45\xb5\x32\x8f\xda\xc3\xce\x6b\xec\xbf\x20\xc0" "\x05\xa3\x3a\x89\xc4\x7d\x66\x34\xfc\xf3\x16\xb8\xf3\x03\xda\xfc" "\x82\x4a\xb8\x97\xf8\x67\x3d\xc2\x8c\x78\xb4\x6d\xb8\xbb\x18\xec" "\x36\xee\xc4\x28\x79\xda\xfe\xa1\x1f\xaf\x0b\x3f\xe4\x75\xde\x83" "\xff\x6b\xf9\x11\x60\x09\x57\xea\x85\x34\xed\x60\xe2\x94\x8b\xd6" "\xf2\x21\x9b\xda\x97\x99\xf3\x0d\xa9\x0f\xb5\x3b\x3a\x8f\x96\x8d" "\x0b\xdf\x30\x17\x03\xe6\x47\xc3\x71\x32\x09\x18\xbc\xc0\xa9\x83" "\x7e\xb7\x5f\x5c\xbb\xeb\x0a\x18\x3f\xa9\x40\x98\xae\x57\xab\x99" "\x3d\x47\x1b\x98\x8a\xdc\x6e\x85\xa2\xea\x5e\x21\x80\xa9\xb5\x48" "\xc9\x1d\x63\xc1\x1b\xe6\x01\xa1\xbd\x84\x38\x7f\x1a\x43\xa5\xd4" "\x7f\x41\x5b\xf6\x88\x33\xb0\xf1\xb8\x8f\xe1\x39\x69\x6f\x60\x13" "\xd3\x5d\x70\xde\x95\x0d\x2f\xa9\x89\x6c\xd4\x3a\xeb\x22\x59\xe6" "\x31\x67\x71\xa5\xed\xfb\xcb\x20\x11\x0c\x31\x2e\xe0\x98\x9a\x3b" "\x9c\x7b\xa2\x74\x6f\x87\x97\xa1\xd9\x82\x7f\x7d\x62\x6b\x45\x6c" "\x0b\x5e\x25\x43\x8a\x20\x16\x7d\xe5\x84\x18\x3f\x7c\xda\xfc\xf9"; int der_data_size = sizeof(der_data)-1; char new_data[4*1024]; int main (int argc, char** argv) { int result = 0; asn1_node definitions = NULL, node1 = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; const char *pkixfile = getenv ("ASN1PKIX"); int new_data_size; if (!pkixfile) pkixfile = "pkix.asn"; /* Encode */ result = asn1_parser2tree (pkixfile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d: %s\n", __LINE__, errorDescription); exit (1); } result = asn1_create_element (definitions, "PKIX1.Certificate", &node1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_der_decoding (&node1, der_data, der_data_size, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d: %s\n", __LINE__, errorDescription); exit (1); } new_data_size = sizeof(new_data); result = asn1_der_coding (node1, "", new_data, &new_data_size, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } if (new_data_size != der_data_size) { printf ("error in %d\n", __LINE__); printf ("new_size is %d, expected: %d\n", new_data_size, der_data_size); exit (1); } if (memcmp(new_data, der_data, der_data_size) != 0) { printf ("error in %d\n", __LINE__); exit (1); } asn1_delete_structure (&node1); asn1_delete_structure (&definitions); return 0; } libtasn1-4.16.0/tests/TestCertOctetOverflow.der0000644000000000000000000000054513246341643016336 000000000000000‚a0‚   îÙcbSÖu0  *†H†÷  0 1 0U a0 150415230933Z 420830230933Z0 1 0U a0\0  *†H†÷ K0HAÐø’kØzú„¹‡F(½v|§yº«T·_?Hßw«iÚ±BsVöL.¯^³Ù_qÇO”8TÞ®ù>vç bf`q$3£P0N0U$".61}Q¡§žI3ð9Fœ¢cI0U#0€".61}Q¡§žI3ð9Fœ¢cI0 U0ÿ0  *†H†÷  AÎJCÛÍù‘f€‡µE¡²±dÂEZŸÏáQ 7Fƒèuåõ;Û5®¤OgZ;ÜŠ„$y¹\3(\ô9!뙥ãlibtasn1-4.16.0/tests/Test_tree.c0000644000000000000000000007766613512007177013503 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /*****************************************************/ /* File: Test_tree.c */ /* Description: Test sequences for these functions: */ /* asn1_visit_tree, */ /* asn1_create_element, */ /* asn1_delete_structure2, */ /* asn1_delete_structure, */ /* asn1_write_value, */ /* asn1_read_value, */ /*****************************************************/ #include #include #include #define ASN1_INTERNAL_BUILD #include "libtasn1.h" #include "Test_tree_asn1_tab.c" #define ACT_NULL 0 #define ACT_CREATE 1 #define ACT_DELETE 2 #define ACT_WRITE 3 #define ACT_READ 4 #define ACT_VISIT 5 #define ACT_ENCODING 6 #define ACT_DECODING 7 #define ACT_PRINT_DER 8 #define ACT_EXPAND_ANY 9 #define ACT_DECODING_ELEMENT 10 #define ACT_EXPAND_OCTET 11 #define ACT_NUMBER_OF_ELEMENTS 12 #define ACT_DECODING_START_END 13 #define ACT_READ_DEFINITIONS 14 #define ACT_READ_TAG_CLASS 15 #define ACT_OID_2_STRUCTURE 16 #define ACT_READ_LENGTH 17 #define ACT_ENCODING_LENGTH 18 #define ACT_READ_BIT 19 #define ACT_SET_DER 20 #define ACT_DELETE_ELEMENT 21 #define ACT_DELETE2 22 typedef struct { int action; const char *par1; const char *par2; int par3; int errorNumber; int line; } test_type; test_type test_array[] = { {ACT_DELETE, "", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__}, /* Test: APPLICATION 30 */ {ACT_CREATE, "TEST_TREE.KrbError", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "pvno", "5", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 5, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 4, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 5, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.KrbError", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE_ELEMENT, "pvno", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE_ELEMENT, "pvno", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__}, {ACT_DELETE2, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: CHOICE */ {ACT_CREATE, "TEST_TREE.CertTemplate", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "version", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "validity", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer", "rdnSequence", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.3", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x0c\x18\x71\x75\x61\x73\x61\x72\x2e\x6c\x61\x73\x2e\x69\x63\x2e\x75\x6e\x69\x63\x61\x6d\x70\x2e\x62\x72", 26, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.7", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x0c\x08\x43\x61\x6d\x70\x69\x6e\x61\x73", 10, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.6", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x13\x06\x42\x72\x61\x73\x69\x6c", 8, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.10", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x0c\x02\x49\x43", 4, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.11", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x0c\x03\x4c\x41\x53", 5, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.8", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x0c\x09\x53\x61\x6f\x20\x50\x61\x75\x6c\x6f", 11, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "1.2.840.113549.1.9.1", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x16\x19\x65\x64\x75\x61\x72\x64\x6f\x40\x6c\x61\x73\x2e\x69\x63\x2e\x75\x6e\x69\x63\x61\x6d\x70\x2e\x62\x72", 27, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 152, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 151, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 152, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.CertTemplate", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?1", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?1", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__}, {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?3", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?5", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?7", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: Empty sequnces */ {ACT_CREATE, "TEST_TREE.sequenceEmpty", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int1", "1", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "seq1.int", NULL, 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 11, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 10, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 11, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.sequenceEmpty", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "seq1", "START", 5, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "seq1", "END", 6, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "set1", "START", 7, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "set1", "END", 10, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: Indefinite Length */ {ACT_CREATE, "TEST_TREE.IndefiniteLengthTest", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int1", "1", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "seq1.int", "2", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "set1", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "set1.?LAST", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "set1", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "set1.?LAST", "1.2.5.6", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING, "", 0, 255, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_SET_DER, "\x30\x18\xa1\x80\x02\x01\x02\x00\x00\x31\x80\x06\x03\x2a\x03\x04\x06\x03\x2a\x05\x06\x00\x00\x02\x01\x01", 0, 26, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.IndefiniteLengthTest", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "seq1", "START", 2, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "seq1", "END", 8, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "set1", "START", 9, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "set1", "END", 22, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: OID */ {ACT_CREATE, "TEST_TREE.OidTest", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_READ_LENGTH, "oid", NULL, 9, ASN1_MEM_ERROR, __LINE__}, {ACT_READ, "oid", "2.5.29.2", 9, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "oid", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "oid2", "2.5.29.1", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "oid3", "1.2.29.2", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 7, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 6, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 7, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.OidTest", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "oid", "START", 2, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "oid", "END", 6, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "", "START", 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "", "END", 6, ASN1_SUCCESS, __LINE__}, {ACT_READ, "oid2", "2.5.29.1", 9, ASN1_SUCCESS, __LINE__}, {ACT_READ, "oid3", "1.2.29.2", 9, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "oid", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: ENCODING_LENGTH and READ_LEN */ {ACT_CREATE, "TEST_TREE.OidAndTimeTest", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "oid", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "time1", "9801011200Z", 1, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "time2", "2001010112001.12-0700", 1, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "oct", "ABCD", 4, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "bol", "TRUE", 1, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "enum", "2", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "bit", "1\xC0", 10, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "any", "\x30\x01\x01", 3, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "set", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "set.?LAST", "10", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "set", "NEW", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "set.?LAST", "1", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "gen", "Prova", 5, ASN1_SUCCESS, __LINE__}, {ACT_READ_LENGTH, "oid", NULL, 8, ASN1_MEM_ERROR, __LINE__}, {ACT_READ_LENGTH, "time1", NULL, 12, ASN1_MEM_ERROR, __LINE__}, {ACT_READ_LENGTH, "time2", NULL, 22, ASN1_MEM_ERROR, __LINE__}, {ACT_READ_LENGTH, "oct", NULL, 4, ASN1_MEM_ERROR, __LINE__}, {ACT_READ_LENGTH, "bol", NULL, 5, ASN1_MEM_ERROR, __LINE__}, {ACT_READ_LENGTH, "enum", NULL, 1, ASN1_MEM_ERROR, __LINE__}, {ACT_READ_LENGTH, "any", NULL, 3, ASN1_MEM_ERROR, __LINE__}, {ACT_READ_LENGTH, "gen", NULL, 5, ASN1_MEM_ERROR, __LINE__}, {ACT_READ_LENGTH, "bit", NULL, 10, ASN1_MEM_ERROR, __LINE__}, {ACT_READ_BIT, "bit", "1\xC0", 10, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 79, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 78, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 79, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.OidAndTimeTest", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: OID to STRUCTURE */ {ACT_OID_2_STRUCTURE, "2.5.29.3", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__}, {ACT_OID_2_STRUCTURE, "1.2.29.2", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__}, {ACT_OID_2_STRUCTURE, "2.5.29.2", "anyTest2", 0, ASN1_SUCCESS, __LINE__}, /* Test: READ TAG and CLASS */ {ACT_CREATE, "TEST_TREE.SequenceTestTag", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "int", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__}, {ACT_READ_TAG_CLASS, "int1", "TAG", ASN1_TAG_INTEGER, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "int1", "CLASS", ASN1_CLASS_UNIVERSAL, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "int2", "TAG", 3, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "int2", "CLASS", ASN1_CLASS_CONTEXT_SPECIFIC, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "str1", "TAG", 1, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "str1", "CLASS", ASN1_CLASS_CONTEXT_SPECIFIC, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "str2", "TAG", 28, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "str2", "CLASS", ASN1_CLASS_UNIVERSAL, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "str3", "TAG", 28, ASN1_SUCCESS, __LINE__}, {ACT_READ_TAG_CLASS, "str3", "CLASS", ASN1_CLASS_UNIVERSAL, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: OBJECT IDENTIFIER elements */ {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int1", "v2", 0, ASN1_SUCCESS, __LINE__}, {ACT_READ, "int1", "\x01", 1, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int2", "0", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "oct", "\x02\x01\x0a", 3, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "id", "1 2 3 4 5", 0, ASN1_VALUE_NOT_VALID, __LINE__}, {ACT_WRITE, "id", "2.5.29.2", 0, ASN1_SUCCESS, __LINE__}, {ACT_READ, "id", "2.5.29.2", 9, ASN1_SUCCESS, __LINE__}, {ACT_READ_LENGTH, "id", NULL, 9, ASN1_MEM_ERROR, __LINE__}, {ACT_WRITE, "any1", "\x02\x01\x05", 3, ASN1_SUCCESS, __LINE__}, {ACT_READ_DEFINITIONS, "TEST_TREE.id-anyTest", "2.5.29.1", 9, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 20, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 19, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 200, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "id", "START", 7, ASN1_SUCCESS, __LINE__}, {ACT_READ, "id", "2.5.29.2", 9, ASN1_SUCCESS, __LINE__}, {ACT_EXPAND_ANY, "", NULL, 0, ASN1_SUCCESS, __LINE__}, {ACT_EXPAND_OCTET, "oct", "id", 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: CHOICE elements */ {ACT_CREATE, "TEST_TREE.X520LocalityName", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "", "teletexString", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "teletexString", "PROVA", 5, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 7, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 6, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 7, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.X520LocalityName", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: OPTIONAL elements */ {ACT_CREATE, "TEST_TREE.DHParameter", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "prime", "1", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "base", "2", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "privateValueLength", NULL, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 8, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 7, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 8, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.DHParameter", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: Integer */ {ACT_CREATE, "TEST_TREE.AnyTest2", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "", "int", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int", "0", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 3, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 2, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 3, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int", "-1", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int", "1", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int", "2000000000", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int", "-2000000000", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int", "-20000000000", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int", "20000000000", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test: elements without names */ {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "int2", "10", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "seq", "NEW", 1, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "seq.?LAST", "1", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "seq", "NEW", 1, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "seq.?LAST", "2", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "any1", NULL, 0, ASN1_SUCCESS, __LINE__}, {ACT_NUMBER_OF_ELEMENTS, "seq", "", 2, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "id", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "oct", "\x30\x03\x02\x01\x15", 5, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING, "int2", 0, 1024, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING, "seq.?2", 0, 2, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "seq.?2", 0, 3, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 25, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 24, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 25, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_ELEMENT, "int2", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_READ, "int2", "\x0a", 1, ASN1_SUCCESS, __LINE__}, {ACT_READ_LENGTH, "int2", NULL, 1, ASN1_MEM_ERROR, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_START_END, "seq.?2", "START", 10, ASN1_SUCCESS, __LINE__}, {ACT_EXPAND_OCTET, "oct", "id", 0, ASN1_SUCCESS, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Test GeneralString */ {ACT_CREATE, "TEST_TREE.Test3", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "a", "1234", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "b", "prova", 5, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 17, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 16, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 17, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.Test3", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_ELEMENT, "b", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_READ, "b", "prova", 5, ASN1_SUCCESS, __LINE__}, {ACT_READ_LENGTH, "b", NULL, 5, ASN1_MEM_ERROR, __LINE__}, {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* Bug regression test: Empty write on 64-bit platforms */ {ACT_CREATE, "TEST_TREE.Checksum", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "checksum", "foo", 0, ASN1_SUCCESS, __LINE__}, {ACT_WRITE, "checksum", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_ENCODING_LENGTH, "", 0, 4, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 3, ASN1_MEM_ERROR, __LINE__}, {ACT_ENCODING, "", 0, 4, ASN1_SUCCESS, __LINE__}, {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_CREATE, "TEST_TREE.Checksum", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_DECODING_ELEMENT, "checksum", 0, 0, ASN1_SUCCESS, __LINE__}, {ACT_READ, "checksum", "", 0, ASN1_SUCCESS, __LINE__}, {ACT_READ_LENGTH, "checksum", NULL, 0, ASN1_SUCCESS, __LINE__}, /* MEM_FAILURE? */ {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__}, {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__}, /* end */ {ACT_NULL} }; #define error() fprintf(stderr, "Error at line %d\n", __LINE__); exit(1) int main (int argc, char *argv[]) { int result; asn1_node definitions = NULL; asn1_node asn1_element = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; FILE *out; test_type *test; int errorCounter = 0, testCounter = 0, der_len; unsigned char value[1024], der[1024]; int valueLen, tag = 0, class = 0; int k; int start, end, verbose = 0; const char *str_p = NULL; const char *treefile = getenv ("ASN1TREE"); if (argc > 1) verbose = 1; if (!treefile) treefile = "Test_tree.asn"; if (verbose != 0) { printf ("\n\n/****************************************/\n"); printf ("/* Test sequence : Test_tree */\n"); printf ("/****************************************/\n\n"); printf ("ASN1TREE: %s\n", treefile); } /* Check version */ if (asn1_check_version ("0.2.11") == NULL) printf ("\nLibrary version check ERROR:\n actual version: %s\n\n", asn1_check_version (NULL)); if (1) result = asn1_parser2tree (treefile, &definitions, errorDescription); else result = asn1_array2tree (Test_tree_asn1_tab, &definitions, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } if (1) out = stdout; else out = fopen ("Test_tree.out", "w"); if (out == NULL) { printf ("Output file ERROR\n"); exit (1); } if (0) { asn1_print_structure (out, definitions, "TEST_TREE", ASN1_PRINT_ALL); fprintf (out, "\n"); } test = test_array; while (test->action != ACT_NULL) { testCounter++; switch (test->action) { case ACT_CREATE: result = asn1_create_element (definitions, test->par1, &asn1_element); break; case ACT_DELETE: result = asn1_delete_structure (&asn1_element); break; case ACT_DELETE2: result = asn1_delete_structure2 (&asn1_element, ASN1_DELETE_FLAG_ZEROIZE); break; case ACT_DELETE_ELEMENT: result = asn1_delete_element (asn1_element, test->par1); break; case ACT_WRITE: if ((test->par2) && (!strcmp ("DER", test->par2))) result = asn1_write_value (asn1_element, test->par1, der, der_len); else result = asn1_write_value (asn1_element, test->par1, test->par2, test->par3); break; case ACT_READ: case ACT_READ_BIT: valueLen = test->par3; result = asn1_read_value (asn1_element, test->par1, value, &valueLen); break; case ACT_READ_LENGTH: valueLen = 0; result = asn1_read_value (asn1_element, test->par1, NULL, &valueLen); break; case ACT_READ_DEFINITIONS: valueLen = 1024; result = asn1_read_value (definitions, test->par1, value, &valueLen); break; case ACT_READ_TAG_CLASS: result = asn1_read_tag (asn1_element, test->par1, &tag, &class); break; case ACT_ENCODING: der_len = test->par3; result = asn1_der_coding (asn1_element, test->par1, der, &der_len, errorDescription); break; case ACT_ENCODING_LENGTH: der_len = 0; result = asn1_der_coding (asn1_element, test->par1, NULL, &der_len, errorDescription); break; case ACT_DECODING: result = asn1_der_decoding (&asn1_element, der, der_len, errorDescription); break; case ACT_DECODING_ELEMENT: result = asn1_der_decoding_element (&asn1_element, test->par1, der, der_len, errorDescription); break; case ACT_DECODING_START_END: result = asn1_der_decoding_startEnd (asn1_element, der, der_len, test->par1, &start, &end); break; case ACT_EXPAND_ANY: result = asn1_expand_any_defined_by (definitions, &asn1_element); break; case ACT_EXPAND_OCTET: result = asn1_expand_octet_string (definitions, &asn1_element, test->par1, test->par2); break; case ACT_OID_2_STRUCTURE: str_p = asn1_find_structure_from_oid (definitions, test->par1); break; case ACT_VISIT: if (verbose) { asn1_print_structure (out, asn1_element, test->par1, test->par3); fprintf (out, "\n"); } result = ASN1_SUCCESS; break; case ACT_PRINT_DER: if (verbose) { printf ("DER encoding len:%i\n", der_len); printf ("DER encoding: "); for (k = 0; k < der_len; k++) printf ("%02x ", der[k]); printf ("\n\n"); } result = ASN1_SUCCESS; break; case ACT_SET_DER: der_len = test->par3; memcpy (der, test->par1, der_len); result = ASN1_SUCCESS; break; case ACT_NUMBER_OF_ELEMENTS: result = asn1_number_of_elements (asn1_element, test->par1, &valueLen); break; default: break; } switch (test->action) { case ACT_CREATE: case ACT_DELETE: case ACT_DELETE_ELEMENT: case ACT_WRITE: case ACT_VISIT: case ACT_ENCODING: case ACT_DECODING: case ACT_PRINT_DER: case ACT_EXPAND_ANY: case ACT_EXPAND_OCTET: case ACT_SET_DER: if (result != test->errorNumber) { errorCounter++; printf ("ERROR in %d:\n", test->line); printf (" Action %d - %s - %s - %d\n", test->action, test->par1, test->par2, test->par3); printf (" Error expected: %s\n", asn1_strerror (test->errorNumber)); printf (" Error detected: %s\n\n", asn1_strerror (result)); error (); } break; case ACT_DECODING_ELEMENT: if (result != test->errorNumber) { errorCounter++; printf ("ERROR in %d:\n", test->line); printf (" Action %d - %s - %s - %d\n", test->action, test->par1, test->par2, test->par3); printf (" Error expected: %s\n", asn1_strerror (test->errorNumber)); printf (" Error detected: %s\n", asn1_strerror (result)); printf (" Error description : %s\n\n", errorDescription); error (); } break; case ACT_NUMBER_OF_ELEMENTS: case ACT_READ_LENGTH: if ((result != test->errorNumber) || (valueLen != test->par3)) { errorCounter++; printf ("ERROR in %d:\n", test->line); printf (" Action %d - %s\n", test->action, test->par1); printf (" Error expected: %s - %d\n", asn1_strerror (test->errorNumber), test->par3); printf (" Error detected: %s - %d\n\n", asn1_strerror (result), valueLen); error (); } break; case ACT_ENCODING_LENGTH: if ((result != test->errorNumber) || (der_len != test->par3)) { errorCounter++; printf ("ERROR in %d:\n", test->line); printf (" Action %d - %s\n", test->action, test->par1); printf (" Error expected: %s - %d\n", asn1_strerror (test->errorNumber), test->par3); printf (" Error detected: %s - %d\n\n", asn1_strerror (result), der_len); error (); } break; case ACT_OID_2_STRUCTURE: if (((test->errorNumber != ASN1_SUCCESS) && (str_p != NULL)) || ((test->errorNumber == ASN1_SUCCESS) && (str_p == NULL)) || ((test->errorNumber == ASN1_SUCCESS) && (strcmp (str_p, test->par2)))) { errorCounter++; printf ("ERROR in %d:\n", test->line); printf (" Action %d - %s\n", test->action, test->par1); printf (" Error expected: %s - %s\n", asn1_strerror (test->errorNumber), test->par2); printf (" Value detected: %s\n\n", str_p); error (); } break; case ACT_DECODING_START_END: if ((result != test->errorNumber) || ((!strcmp (test->par2, "START")) && (start != test->par3)) || ((!strcmp (test->par2, "END")) && (end != test->par3))) { errorCounter++; printf ("ERROR in %d:\n", test->line); printf (" Action %d - %s - %d\n", test->action, test->par1, test->par3); printf (" Error expected: %s - %s - %d\n", asn1_strerror (test->errorNumber), test->par2, test->par3); printf (" Error detected: %s - %d - %d\n\n", asn1_strerror (result), start, end); error (); } break; case ACT_READ_TAG_CLASS: if ((result != test->errorNumber) || ((!strcmp (test->par2, "TAG")) && (tag != test->par3)) || ((!strcmp (test->par2, "CLASS")) && (class != test->par3))) { errorCounter++; printf ("ERROR in %d:\n", test->line); printf (" Action %d - %s - %d\n", test->action, test->par1, test->par3); printf (" Error expected: %s - %s - %d\n", asn1_strerror (test->errorNumber), test->par2, test->par3); printf (" Error detected: %s - %d - %d\n\n", asn1_strerror (result), tag, class); error (); } break; case ACT_READ: case ACT_READ_DEFINITIONS: case ACT_READ_BIT: if (test->action == ACT_READ_BIT) { if (valueLen % 8 == 0) tag = valueLen / 8; else tag = (valueLen / 8) + 1; if (test->par3 % 8 == 0) class = test->par3 / 8; else class = (test->par3 / 8) + 1; } for (k = 0; k < class; k++) if ((unsigned char) test->par2[k] != value[k]) { k = -1; break; } if ((result != test->errorNumber) || (valueLen != test->par3) || (k == -1)) { errorCounter++; printf ("ERROR in %d:\n", test->line); printf (" Action %d - %s\n", test->action, test->par1); printf (" Error expected: %s - %d - ", asn1_strerror (test->errorNumber), test->par3); for (k = 0; k < test->par3; k++) printf ("%02x", (unsigned int)test->par2[k]); printf ("\n Error detected: %s - %d - ", asn1_strerror (result), valueLen); for (k = 0; k < valueLen; k++) printf ("%02x", value[k]); printf ("\n\n"); error (); } break; default: break; } test++; } if (verbose != 0) { printf ("Total tests : %d\n", testCounter); printf ("Total errors: %d\n", errorCounter); } /* Clear the definition structures */ asn1_delete_structure (&definitions); if (out != stdout) fclose (out); if (errorCounter > 0) return 1; exit (0); } libtasn1-4.16.0/tests/libtasn1.supp0000644000000000000000000000003313246341643014000 00000000000000leak:_asn1_add_static_node libtasn1-4.16.0/tests/coding-decoding2.asn0000644000000000000000000000055313246341643015163 00000000000000TEST {} DEFINITIONS IMPLICIT TAGS ::= BEGIN Choice2 ::= CHOICE { oct1 OCTET STRING, int1 [3] INTEGER, oct2 OCTET STRING } Choice1 ::= CHOICE { int4 [0] INTEGER, choice2 Choice2, int5 [1] INTEGER } Choice0 ::= CHOICE { int6 [0] INTEGER, choice1 Choice1, int7 [1] INTEGER } Main ::= SEQUENCE { pad1 INTEGER, choice0 Choice0, pad2 INTEGER } END libtasn1-4.16.0/tests/decoding-invalid-x5090000755000000000000000000000246713611145057015215 00000000000000#!/bin/sh # Copyright (C) 2016 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . srcdir="${srcdir:-.}" if ! test -z "${VALGRIND}";then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=7 --leak-check=no" fi TMPFILE=decoding-invalid.$$.tmp ASN1DECODING="${ASN1DECODING:-../src/asn1Decoding$EXEEXT}" ASN1PKIX="${ASN1PKIX:-pkix.asn}" # This tests an invalid input which caused an infinite recursion # to certain libtasn1 versions. for i in "${srcdir}/invalid-x509/"*.der;do $VALGRIND $ASN1DECODING -s "$ASN1PKIX" "$i" PKIX1.Certificate >$TMPFILE 2>&1 ret=$? if test $ret != 1;then echo "Decoding failed for $i" cat $TMPFILE exit 1 fi echo "$(basename $i): ok" done rm -f $TMPFILE exit 0 libtasn1-4.16.0/tests/Test_errors.c0000644000000000000000000000202413246341643014033 00000000000000/* * Copyright (C) 2010-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include "libtasn1.h" int main (int argc, char *argv[]) { int ec = 0; const char *errstr; int verbose = 0; if (argc > 1) verbose = 1; do { errstr = asn1_strerror (ec); if (verbose != 0) asn1_perror (ec); ec++; } while (errstr); return 0; } libtasn1-4.16.0/tests/crlf0000755000000000000000000000223113246341643012230 00000000000000#!/bin/sh # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # Author: Simon Josefsson # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . set -e srcdir=${srcdir:-.} ASN1DECODING=../src/asn1Decoding${EXEEXT} # The crlf.cer file is a normal certificate which contains bytes 0x0A # (LF), 0x0D (CF), and 0xFF (EOF), all are known to cause failures # when using fopen/fgetc/fscanf on streams on some systems (read: # Windows). $ASN1DECODING \ $srcdir/../examples/pkix.asn \ $srcdir/crlf.cer \ PKIX1Implicit88.Certificate >/dev/null 2>&1 libtasn1-4.16.0/tests/CVE-2018-1000654-1.asn0000644000000000000000000000046313514140427014037 00000000000000TEST_TREE {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)} DEFINITIONS IMPLICIT TAGS ::= BEGIN id-xnyTest OBJECT IDENTIFIER ::= {id-ix 29 1} id-ix OBJECR ::= {id-ix 29 2} id-xnyTest OBJECT IDENTIFIER ::= {id-ix 29 1} END libtasn1-4.16.0/tests/coding-decoding2.c0000644000000000000000000001237513246341643014631 00000000000000/* * Copyright (C) 2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include int main (int argc, char** argv) { int result = 0; asn1_node definitions = NULL, node1 = NULL, node2 = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; const char *choicefile = getenv ("ASN1CODINGDECODING2"); int start, end; char data[1024]; int data_size = sizeof (data); if (!choicefile) choicefile = "coding-decoding2.asn"; /* Encode */ result = asn1_parser2tree (choicefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_create_element (definitions, "TEST.Main", &node1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "pad1", "\x01\x02\x03", 3); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "pad2", "\x00\x01", 2); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "choice0", "choice1", 1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "choice0.choice1", "choice2", 1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "choice0.choice1.choice2", "int1", 1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "choice0.choice1.choice2.int1", "1234", 0); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_der_coding (node1, "", data, &data_size, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } /*asn1_print_structure(stdout, node1, "", ASN1_PRINT_ALL);*/ result = asn1_der_decoding_startEnd (node1, data, data_size, "choice0.choice1.choice2.int1", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End: %d\n", __LINE__); exit (1); } if (start != 7 && end != 10) { printf("Error in start and end values for choice1.choice2.int1. Have: %d..%d\n", start, end); exit(1); } result = asn1_der_decoding_startEnd (node1, data, data_size, "choice0.choice1", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End: %d\n", __LINE__); exit (1); } if (start != 7 && end != 10) { printf("Error in start and end values for choice1. Have: %d..%d\n", start, end); exit(1); } result = asn1_der_decoding_startEnd (node1, data, data_size, "pad2", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End\n"); exit (1); } if (start != 11 && end != 13) { printf("Error in start and end values for pad2. Have: %d..%d\n", start, end); exit(1); } asn1_delete_structure (&node1); /* Decode */ result = asn1_create_element (definitions, "TEST.Main", &node2); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } #if 0 printf ("der:"); for (i = 0; i < data_size; i++) printf ("%.2x ", (unsigned char) (data[i])); printf ("\n"); #endif result = asn1_der_decoding (&node2, data, data_size, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d: %s\n", __LINE__, errorDescription); exit (1); } result = asn1_der_decoding_startEnd (node2, data, data_size, "choice0.choice1.choice2.int1", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End: %d\n", __LINE__); exit (1); } if (start != 7 && end != 10) { printf("Error in start and end values for choice0.choice1.choice2.int1. Have: %d..%d\n", start, end); exit(1); } result = asn1_der_decoding_startEnd (node2, data, data_size, "pad2", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End: %d\n", __LINE__); exit (1); } if (start != 11 && end != 13) { printf("Error in start and end values for pad2. Have: %d..%d\n", start, end); exit(1); } asn1_delete_structure (&node2); asn1_delete_structure (&definitions); return 0; } libtasn1-4.16.0/tests/Makefile.in0000644000000000000000000020334113615375040013424 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = Test_parser$(EXEEXT) Test_tree$(EXEEXT) \ Test_encoding$(EXEEXT) Test_indefinite$(EXEEXT) \ Test_errors$(EXEEXT) Test_simple$(EXEEXT) \ Test_overflow$(EXEEXT) Test_strings$(EXEEXT) \ Test_choice$(EXEEXT) Test_encdec$(EXEEXT) copynode$(EXEEXT) \ coding-decoding2$(EXEEXT) strict-der$(EXEEXT) \ Test_choice_ocsp$(EXEEXT) ocsp-basic-response$(EXEEXT) \ octet-string$(EXEEXT) coding-long-oid$(EXEEXT) \ object-id-decoding$(EXEEXT) spc_pe_image_data$(EXEEXT) \ setof$(EXEEXT) CVE-2018-1000654$(EXEEXT) reproducers$(EXEEXT) \ object-id-encoding$(EXEEXT) TESTS = Test_parser$(EXEEXT) Test_tree$(EXEEXT) Test_encoding$(EXEEXT) \ Test_indefinite$(EXEEXT) Test_errors$(EXEEXT) \ Test_simple$(EXEEXT) Test_overflow$(EXEEXT) crlf threadsafety \ Test_strings$(EXEEXT) Test_choice$(EXEEXT) \ Test_encdec$(EXEEXT) copynode$(EXEEXT) \ coding-decoding2$(EXEEXT) strict-der$(EXEEXT) \ Test_choice_ocsp$(EXEEXT) decoding decoding-invalid-x509 \ ocsp-basic-response$(EXEEXT) octet-string$(EXEEXT) \ coding-long-oid$(EXEEXT) object-id-decoding$(EXEEXT) \ spc_pe_image_data$(EXEEXT) decoding-invalid-pkcs7 coding \ setof$(EXEEXT) CVE-2018-1000654$(EXEEXT) parser.sh \ reproducers$(EXEEXT) object-id-encoding$(EXEEXT) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ $(top_srcdir)/m4/ax_am_macros_static.m4 \ $(top_srcdir)/m4/ax_check_gnu_make.m4 \ $(top_srcdir)/m4/ax_code_coverage.m4 \ $(top_srcdir)/m4/ax_file_escapes.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4-gl/00gnulib.m4 \ $(top_srcdir)/m4-gl/__inline.m4 \ $(top_srcdir)/m4-gl/absolute-header.m4 \ $(top_srcdir)/m4-gl/extensions.m4 \ $(top_srcdir)/m4-gl/extern-inline.m4 \ $(top_srcdir)/m4-gl/gnulib-common.m4 \ $(top_srcdir)/m4-gl/gnulib-comp.m4 \ $(top_srcdir)/m4-gl/include_next.m4 \ $(top_srcdir)/m4-gl/ld-version-script.m4 \ $(top_srcdir)/m4-gl/limits-h.m4 \ $(top_srcdir)/m4-gl/longlong.m4 \ $(top_srcdir)/m4-gl/manywarnings.m4 \ $(top_srcdir)/m4-gl/minmax.m4 $(top_srcdir)/m4-gl/multiarch.m4 \ $(top_srcdir)/m4-gl/off_t.m4 $(top_srcdir)/m4-gl/ssize_t.m4 \ $(top_srcdir)/m4-gl/stdbool.m4 $(top_srcdir)/m4-gl/stddef_h.m4 \ $(top_srcdir)/m4-gl/stdint.m4 $(top_srcdir)/m4-gl/string_h.m4 \ $(top_srcdir)/m4-gl/strverscmp.m4 \ $(top_srcdir)/m4-gl/sys_types_h.m4 \ $(top_srcdir)/m4-gl/valgrind-tests.m4 \ $(top_srcdir)/m4-gl/visibility.m4 \ $(top_srcdir)/m4-gl/warn-on-use.m4 \ $(top_srcdir)/m4-gl/warnings.m4 $(top_srcdir)/m4-gl/wchar_t.m4 \ $(top_srcdir)/m4-gl/wint_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_CVE_2018_1000654_OBJECTS = CVE-2018-1000654.$(OBJEXT) CVE_2018_1000654_OBJECTS = $(am_CVE_2018_1000654_OBJECTS) CVE_2018_1000654_LDADD = $(LDADD) CVE_2018_1000654_DEPENDENCIES = ../lib/libtasn1.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = Test_choice_SOURCES = Test_choice.c Test_choice_OBJECTS = Test_choice.$(OBJEXT) Test_choice_LDADD = $(LDADD) Test_choice_DEPENDENCIES = ../lib/libtasn1.la Test_choice_ocsp_SOURCES = Test_choice_ocsp.c Test_choice_ocsp_OBJECTS = Test_choice_ocsp.$(OBJEXT) Test_choice_ocsp_LDADD = $(LDADD) Test_choice_ocsp_DEPENDENCIES = ../lib/libtasn1.la Test_encdec_SOURCES = Test_encdec.c Test_encdec_OBJECTS = Test_encdec.$(OBJEXT) Test_encdec_LDADD = $(LDADD) Test_encdec_DEPENDENCIES = ../lib/libtasn1.la Test_encoding_SOURCES = Test_encoding.c Test_encoding_OBJECTS = Test_encoding.$(OBJEXT) Test_encoding_LDADD = $(LDADD) Test_encoding_DEPENDENCIES = ../lib/libtasn1.la Test_errors_SOURCES = Test_errors.c Test_errors_OBJECTS = Test_errors.$(OBJEXT) Test_errors_LDADD = $(LDADD) Test_errors_DEPENDENCIES = ../lib/libtasn1.la Test_indefinite_SOURCES = Test_indefinite.c Test_indefinite_OBJECTS = Test_indefinite.$(OBJEXT) Test_indefinite_LDADD = $(LDADD) Test_indefinite_DEPENDENCIES = ../lib/libtasn1.la Test_overflow_SOURCES = Test_overflow.c Test_overflow_OBJECTS = Test_overflow.$(OBJEXT) Test_overflow_LDADD = $(LDADD) Test_overflow_DEPENDENCIES = ../lib/libtasn1.la Test_parser_SOURCES = Test_parser.c Test_parser_OBJECTS = Test_parser.$(OBJEXT) Test_parser_LDADD = $(LDADD) Test_parser_DEPENDENCIES = ../lib/libtasn1.la Test_simple_SOURCES = Test_simple.c Test_simple_OBJECTS = Test_simple.$(OBJEXT) Test_simple_LDADD = $(LDADD) Test_simple_DEPENDENCIES = ../lib/libtasn1.la Test_strings_SOURCES = Test_strings.c Test_strings_OBJECTS = Test_strings.$(OBJEXT) Test_strings_LDADD = $(LDADD) Test_strings_DEPENDENCIES = ../lib/libtasn1.la Test_tree_SOURCES = Test_tree.c Test_tree_OBJECTS = Test_tree.$(OBJEXT) Test_tree_LDADD = $(LDADD) Test_tree_DEPENDENCIES = ../lib/libtasn1.la coding_decoding2_SOURCES = coding-decoding2.c coding_decoding2_OBJECTS = coding-decoding2.$(OBJEXT) coding_decoding2_LDADD = $(LDADD) coding_decoding2_DEPENDENCIES = ../lib/libtasn1.la coding_long_oid_SOURCES = coding-long-oid.c coding_long_oid_OBJECTS = coding-long-oid.$(OBJEXT) coding_long_oid_LDADD = $(LDADD) coding_long_oid_DEPENDENCIES = ../lib/libtasn1.la copynode_SOURCES = copynode.c copynode_OBJECTS = copynode.$(OBJEXT) copynode_LDADD = $(LDADD) copynode_DEPENDENCIES = ../lib/libtasn1.la object_id_decoding_SOURCES = object-id-decoding.c object_id_decoding_OBJECTS = object-id-decoding.$(OBJEXT) object_id_decoding_LDADD = $(LDADD) object_id_decoding_DEPENDENCIES = ../lib/libtasn1.la object_id_encoding_SOURCES = object-id-encoding.c object_id_encoding_OBJECTS = object-id-encoding.$(OBJEXT) object_id_encoding_LDADD = $(LDADD) object_id_encoding_DEPENDENCIES = ../lib/libtasn1.la ocsp_basic_response_SOURCES = ocsp-basic-response.c ocsp_basic_response_OBJECTS = ocsp-basic-response.$(OBJEXT) ocsp_basic_response_LDADD = $(LDADD) ocsp_basic_response_DEPENDENCIES = ../lib/libtasn1.la octet_string_SOURCES = octet-string.c octet_string_OBJECTS = octet-string.$(OBJEXT) octet_string_LDADD = $(LDADD) octet_string_DEPENDENCIES = ../lib/libtasn1.la reproducers_SOURCES = reproducers.c reproducers_OBJECTS = reproducers.$(OBJEXT) reproducers_LDADD = $(LDADD) reproducers_DEPENDENCIES = ../lib/libtasn1.la setof_SOURCES = setof.c setof_OBJECTS = setof.$(OBJEXT) setof_LDADD = $(LDADD) setof_DEPENDENCIES = ../lib/libtasn1.la spc_pe_image_data_SOURCES = spc_pe_image_data.c spc_pe_image_data_OBJECTS = spc_pe_image_data.$(OBJEXT) spc_pe_image_data_LDADD = $(LDADD) spc_pe_image_data_DEPENDENCIES = ../lib/libtasn1.la strict_der_SOURCES = strict-der.c strict_der_OBJECTS = strict-der.$(OBJEXT) strict_der_LDADD = $(LDADD) strict_der_DEPENDENCIES = ../lib/libtasn1.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/CVE-2018-1000654.Po \ ./$(DEPDIR)/Test_choice.Po ./$(DEPDIR)/Test_choice_ocsp.Po \ ./$(DEPDIR)/Test_encdec.Po ./$(DEPDIR)/Test_encoding.Po \ ./$(DEPDIR)/Test_errors.Po ./$(DEPDIR)/Test_indefinite.Po \ ./$(DEPDIR)/Test_overflow.Po ./$(DEPDIR)/Test_parser.Po \ ./$(DEPDIR)/Test_simple.Po ./$(DEPDIR)/Test_strings.Po \ ./$(DEPDIR)/Test_tree.Po ./$(DEPDIR)/coding-decoding2.Po \ ./$(DEPDIR)/coding-long-oid.Po ./$(DEPDIR)/copynode.Po \ ./$(DEPDIR)/object-id-decoding.Po \ ./$(DEPDIR)/object-id-encoding.Po \ ./$(DEPDIR)/ocsp-basic-response.Po ./$(DEPDIR)/octet-string.Po \ ./$(DEPDIR)/reproducers.Po ./$(DEPDIR)/setof.Po \ ./$(DEPDIR)/spc_pe_image_data.Po ./$(DEPDIR)/strict-der.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(CVE_2018_1000654_SOURCES) Test_choice.c Test_choice_ocsp.c \ Test_encdec.c Test_encoding.c Test_errors.c Test_indefinite.c \ Test_overflow.c Test_parser.c Test_simple.c Test_strings.c \ Test_tree.c coding-decoding2.c coding-long-oid.c copynode.c \ object-id-decoding.c object-id-encoding.c \ ocsp-basic-response.c octet-string.c reproducers.c setof.c \ spc_pe_image_data.c strict-der.c DIST_SOURCES = $(CVE_2018_1000654_SOURCES) Test_choice.c \ Test_choice_ocsp.c Test_encdec.c Test_encoding.c Test_errors.c \ Test_indefinite.c Test_overflow.c Test_parser.c Test_simple.c \ Test_strings.c Test_tree.c coding-decoding2.c \ coding-long-oid.c copynode.c object-id-decoding.c \ object-id-encoding.c ocsp-basic-response.c octet-string.c \ reproducers.c setof.c spc_pe_image_data.c strict-der.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASN1_VERSION_MAJOR = @ASN1_VERSION_MAJOR@ ASN1_VERSION_MINOR = @ASN1_VERSION_MINOR@ ASN1_VERSION_NUMBER = @ASN1_VERSION_NUMBER@ ASN1_VERSION_PATCH = @ASN1_VERSION_PATCH@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FUZZ_LIBS = @FUZZ_LIBS@ GCOV = @GCOV@ GENHTML = @GENHTML@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTOOL = @LIBTOOL@ LIB_FUZZING_ENGINE = @LIB_FUZZING_ENGINE@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ ifGNUmake = @ifGNUmake@ ifnGNUmake = @ifnGNUmake@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAG_VISIBILITY) AM_CPPFLAGS = -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes -I$(top_srcdir)/lib AM_LDFLAGS = -no-install LDADD = ../lib/libtasn1.la BUILT_SOURCES = CVE-2018-1000654-1_asn1_tab.h CVE-2018-1000654-2_asn1_tab.h # For crlf. EXTRA_DIST = Test_parser.asn Test_tree.asn Test_tree_asn1_tab.c \ mscat.asn Test_encoding.asn pkix.asn TestIndef.p12 choice.asn \ coding-decoding2.asn TestIndef2.p12 TestIndef3.der \ TestCertOctetOverflow.der cert-invalid-time.der setof.asn \ CVE-2018-1000654-1.asn CVE-2018-1000654-2.asn libtasn1.supp \ ocsp-basic-response.der spc_pe_image_data.der \ invalid-x509/id-000000.der invalid-x509/id-000001.der \ invalid-x509/id-000002.der invalid-x509/id-000003.der \ invalid-x509/id-000004.der invalid-x509/id-000005.der \ invalid-x509/id-000006.der invalid-x509/id-000007.der \ invalid-x509/id-000008.der invalid-x509/id-000009.der \ invalid-x509/id-000010.der invalid-x509/id-000011.der \ invalid-x509/id-000012.der invalid-x509/id-000013.der \ invalid-x509/id-000014.der invalid-x509/id-000015.der \ invalid-x509/id-000016.der invalid-x509/id-000017.der \ invalid-x509/id-000018.der invalid-x509/id-000019.der \ invalid-x509/id-000020.der invalid-x509/id-000021.der \ invalid-x509/id-000022.der invalid-x509/id-000023.der \ invalid-x509/id-000024.der invalid-x509/id-000025.der \ invalid-x509/id-000026.der invalid-x509/id-000027.der \ invalid-x509/id-000028.der invalid-x509/id-000029.der \ invalid-x509/id-000030.der invalid-x509/id-000031.der \ invalid-x509/id-000032.der invalid-x509/id-000033.der \ invalid-x509/id-000034.der invalid-x509/id-000035.der \ invalid-pkcs7/id-000001.der invalid-pkcs7/id-000002.der \ invalid-pkcs7/id-000003.der invalid-assignments1.txt \ invalid-assignments2.txt pkix.asn.out crlf.cer crl.der \ ocsp.der dist_check_SCRIPTS = crlf benchmark threadsafety decoding decoding-invalid-x509 \ decoding-invalid-pkcs7 coding parser.sh MOSTLYCLEANFILES = Test_parser_ERROR.asn CVE-2018-1000654-1_asn1_tab.h CVE-2018-1000654-2_asn1_tab.h CVE_2018_1000654_SOURCES = CVE-2018-1000654-1_asn1_tab.h CVE-2018-1000654-2_asn1_tab.h CVE-2018-1000654.c LOG_COMPILER = $(VALGRIND) TESTS_ENVIRONMENT = \ ASN1PARSER=$(srcdir)/Test_parser.asn \ ASN1TREE=$(srcdir)/Test_tree.asn \ ASN1CHOICE=$(srcdir)/choice.asn \ ASN1CODINGDECODING2=$(srcdir)/coding-decoding2.asn \ ASN1PKIX=$(srcdir)/pkix.asn \ ASN1SETOF=$(srcdir)/setof.asn \ ASN1CRLDER=$(srcdir)/crl.der \ ASN1INDEF=$(srcdir)/TestIndef.p12 \ ASN1INDEF2=$(srcdir)/TestIndef2.p12 \ ASN1INDEF3=$(srcdir)/TestIndef3.der \ ASN1ENCODING=$(srcdir)/Test_encoding.asn \ ASN1CHOICE_OCSP=$(srcdir)/pkix.asn \ ASN1CHOICE_OCSP_DATA=$(srcdir)/ocsp.der \ ASN1_RESPONSE_OCSP_DATA=$(srcdir)/ocsp-basic-response.der \ ASN1_MSCAT=$(srcdir)/mscat.asn \ ASN1_SPC_PE_IMAGE_DATA=$(srcdir)/spc_pe_image_data.der \ ASAN_OPTIONS="detect_leaks=0:exitcode=6" \ THREADSAFETY_FILES=`find $(top_srcdir)/lib -name \*.c` \ EXEEXT=$(EXEEXT) \ LSAN_OPTIONS=suppressions=libtasn1.supp all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list CVE-2018-1000654$(EXEEXT): $(CVE_2018_1000654_OBJECTS) $(CVE_2018_1000654_DEPENDENCIES) $(EXTRA_CVE_2018_1000654_DEPENDENCIES) @rm -f CVE-2018-1000654$(EXEEXT) $(AM_V_CCLD)$(LINK) $(CVE_2018_1000654_OBJECTS) $(CVE_2018_1000654_LDADD) $(LIBS) Test_choice$(EXEEXT): $(Test_choice_OBJECTS) $(Test_choice_DEPENDENCIES) $(EXTRA_Test_choice_DEPENDENCIES) @rm -f Test_choice$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_choice_OBJECTS) $(Test_choice_LDADD) $(LIBS) Test_choice_ocsp$(EXEEXT): $(Test_choice_ocsp_OBJECTS) $(Test_choice_ocsp_DEPENDENCIES) $(EXTRA_Test_choice_ocsp_DEPENDENCIES) @rm -f Test_choice_ocsp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_choice_ocsp_OBJECTS) $(Test_choice_ocsp_LDADD) $(LIBS) Test_encdec$(EXEEXT): $(Test_encdec_OBJECTS) $(Test_encdec_DEPENDENCIES) $(EXTRA_Test_encdec_DEPENDENCIES) @rm -f Test_encdec$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_encdec_OBJECTS) $(Test_encdec_LDADD) $(LIBS) Test_encoding$(EXEEXT): $(Test_encoding_OBJECTS) $(Test_encoding_DEPENDENCIES) $(EXTRA_Test_encoding_DEPENDENCIES) @rm -f Test_encoding$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_encoding_OBJECTS) $(Test_encoding_LDADD) $(LIBS) Test_errors$(EXEEXT): $(Test_errors_OBJECTS) $(Test_errors_DEPENDENCIES) $(EXTRA_Test_errors_DEPENDENCIES) @rm -f Test_errors$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_errors_OBJECTS) $(Test_errors_LDADD) $(LIBS) Test_indefinite$(EXEEXT): $(Test_indefinite_OBJECTS) $(Test_indefinite_DEPENDENCIES) $(EXTRA_Test_indefinite_DEPENDENCIES) @rm -f Test_indefinite$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_indefinite_OBJECTS) $(Test_indefinite_LDADD) $(LIBS) Test_overflow$(EXEEXT): $(Test_overflow_OBJECTS) $(Test_overflow_DEPENDENCIES) $(EXTRA_Test_overflow_DEPENDENCIES) @rm -f Test_overflow$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_overflow_OBJECTS) $(Test_overflow_LDADD) $(LIBS) Test_parser$(EXEEXT): $(Test_parser_OBJECTS) $(Test_parser_DEPENDENCIES) $(EXTRA_Test_parser_DEPENDENCIES) @rm -f Test_parser$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_parser_OBJECTS) $(Test_parser_LDADD) $(LIBS) Test_simple$(EXEEXT): $(Test_simple_OBJECTS) $(Test_simple_DEPENDENCIES) $(EXTRA_Test_simple_DEPENDENCIES) @rm -f Test_simple$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_simple_OBJECTS) $(Test_simple_LDADD) $(LIBS) Test_strings$(EXEEXT): $(Test_strings_OBJECTS) $(Test_strings_DEPENDENCIES) $(EXTRA_Test_strings_DEPENDENCIES) @rm -f Test_strings$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_strings_OBJECTS) $(Test_strings_LDADD) $(LIBS) Test_tree$(EXEEXT): $(Test_tree_OBJECTS) $(Test_tree_DEPENDENCIES) $(EXTRA_Test_tree_DEPENDENCIES) @rm -f Test_tree$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Test_tree_OBJECTS) $(Test_tree_LDADD) $(LIBS) coding-decoding2$(EXEEXT): $(coding_decoding2_OBJECTS) $(coding_decoding2_DEPENDENCIES) $(EXTRA_coding_decoding2_DEPENDENCIES) @rm -f coding-decoding2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(coding_decoding2_OBJECTS) $(coding_decoding2_LDADD) $(LIBS) coding-long-oid$(EXEEXT): $(coding_long_oid_OBJECTS) $(coding_long_oid_DEPENDENCIES) $(EXTRA_coding_long_oid_DEPENDENCIES) @rm -f coding-long-oid$(EXEEXT) $(AM_V_CCLD)$(LINK) $(coding_long_oid_OBJECTS) $(coding_long_oid_LDADD) $(LIBS) copynode$(EXEEXT): $(copynode_OBJECTS) $(copynode_DEPENDENCIES) $(EXTRA_copynode_DEPENDENCIES) @rm -f copynode$(EXEEXT) $(AM_V_CCLD)$(LINK) $(copynode_OBJECTS) $(copynode_LDADD) $(LIBS) object-id-decoding$(EXEEXT): $(object_id_decoding_OBJECTS) $(object_id_decoding_DEPENDENCIES) $(EXTRA_object_id_decoding_DEPENDENCIES) @rm -f object-id-decoding$(EXEEXT) $(AM_V_CCLD)$(LINK) $(object_id_decoding_OBJECTS) $(object_id_decoding_LDADD) $(LIBS) object-id-encoding$(EXEEXT): $(object_id_encoding_OBJECTS) $(object_id_encoding_DEPENDENCIES) $(EXTRA_object_id_encoding_DEPENDENCIES) @rm -f object-id-encoding$(EXEEXT) $(AM_V_CCLD)$(LINK) $(object_id_encoding_OBJECTS) $(object_id_encoding_LDADD) $(LIBS) ocsp-basic-response$(EXEEXT): $(ocsp_basic_response_OBJECTS) $(ocsp_basic_response_DEPENDENCIES) $(EXTRA_ocsp_basic_response_DEPENDENCIES) @rm -f ocsp-basic-response$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ocsp_basic_response_OBJECTS) $(ocsp_basic_response_LDADD) $(LIBS) octet-string$(EXEEXT): $(octet_string_OBJECTS) $(octet_string_DEPENDENCIES) $(EXTRA_octet_string_DEPENDENCIES) @rm -f octet-string$(EXEEXT) $(AM_V_CCLD)$(LINK) $(octet_string_OBJECTS) $(octet_string_LDADD) $(LIBS) reproducers$(EXEEXT): $(reproducers_OBJECTS) $(reproducers_DEPENDENCIES) $(EXTRA_reproducers_DEPENDENCIES) @rm -f reproducers$(EXEEXT) $(AM_V_CCLD)$(LINK) $(reproducers_OBJECTS) $(reproducers_LDADD) $(LIBS) setof$(EXEEXT): $(setof_OBJECTS) $(setof_DEPENDENCIES) $(EXTRA_setof_DEPENDENCIES) @rm -f setof$(EXEEXT) $(AM_V_CCLD)$(LINK) $(setof_OBJECTS) $(setof_LDADD) $(LIBS) spc_pe_image_data$(EXEEXT): $(spc_pe_image_data_OBJECTS) $(spc_pe_image_data_DEPENDENCIES) $(EXTRA_spc_pe_image_data_DEPENDENCIES) @rm -f spc_pe_image_data$(EXEEXT) $(AM_V_CCLD)$(LINK) $(spc_pe_image_data_OBJECTS) $(spc_pe_image_data_LDADD) $(LIBS) strict-der$(EXEEXT): $(strict_der_OBJECTS) $(strict_der_DEPENDENCIES) $(EXTRA_strict_der_DEPENDENCIES) @rm -f strict-der$(EXEEXT) $(AM_V_CCLD)$(LINK) $(strict_der_OBJECTS) $(strict_der_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CVE-2018-1000654.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_choice.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_choice_ocsp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_encdec.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_encoding.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_errors.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_indefinite.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_overflow.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_parser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_simple.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_strings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_tree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coding-decoding2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coding-long-oid.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copynode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-id-decoding.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-id-encoding.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ocsp-basic-response.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/octet-string.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reproducers.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setof.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spc_pe_image_data.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strict-der.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) $(dist_check_SCRIPTS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? Test_parser.log: Test_parser$(EXEEXT) @p='Test_parser$(EXEEXT)'; \ b='Test_parser'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_tree.log: Test_tree$(EXEEXT) @p='Test_tree$(EXEEXT)'; \ b='Test_tree'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_encoding.log: Test_encoding$(EXEEXT) @p='Test_encoding$(EXEEXT)'; \ b='Test_encoding'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_indefinite.log: Test_indefinite$(EXEEXT) @p='Test_indefinite$(EXEEXT)'; \ b='Test_indefinite'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_errors.log: Test_errors$(EXEEXT) @p='Test_errors$(EXEEXT)'; \ b='Test_errors'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_simple.log: Test_simple$(EXEEXT) @p='Test_simple$(EXEEXT)'; \ b='Test_simple'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_overflow.log: Test_overflow$(EXEEXT) @p='Test_overflow$(EXEEXT)'; \ b='Test_overflow'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crlf.log: crlf @p='crlf'; \ b='crlf'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) threadsafety.log: threadsafety @p='threadsafety'; \ b='threadsafety'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_strings.log: Test_strings$(EXEEXT) @p='Test_strings$(EXEEXT)'; \ b='Test_strings'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_choice.log: Test_choice$(EXEEXT) @p='Test_choice$(EXEEXT)'; \ b='Test_choice'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_encdec.log: Test_encdec$(EXEEXT) @p='Test_encdec$(EXEEXT)'; \ b='Test_encdec'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) copynode.log: copynode$(EXEEXT) @p='copynode$(EXEEXT)'; \ b='copynode'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) coding-decoding2.log: coding-decoding2$(EXEEXT) @p='coding-decoding2$(EXEEXT)'; \ b='coding-decoding2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) strict-der.log: strict-der$(EXEEXT) @p='strict-der$(EXEEXT)'; \ b='strict-der'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Test_choice_ocsp.log: Test_choice_ocsp$(EXEEXT) @p='Test_choice_ocsp$(EXEEXT)'; \ b='Test_choice_ocsp'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) decoding.log: decoding @p='decoding'; \ b='decoding'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) decoding-invalid-x509.log: decoding-invalid-x509 @p='decoding-invalid-x509'; \ b='decoding-invalid-x509'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ocsp-basic-response.log: ocsp-basic-response$(EXEEXT) @p='ocsp-basic-response$(EXEEXT)'; \ b='ocsp-basic-response'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) octet-string.log: octet-string$(EXEEXT) @p='octet-string$(EXEEXT)'; \ b='octet-string'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) coding-long-oid.log: coding-long-oid$(EXEEXT) @p='coding-long-oid$(EXEEXT)'; \ b='coding-long-oid'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) object-id-decoding.log: object-id-decoding$(EXEEXT) @p='object-id-decoding$(EXEEXT)'; \ b='object-id-decoding'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) spc_pe_image_data.log: spc_pe_image_data$(EXEEXT) @p='spc_pe_image_data$(EXEEXT)'; \ b='spc_pe_image_data'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) decoding-invalid-pkcs7.log: decoding-invalid-pkcs7 @p='decoding-invalid-pkcs7'; \ b='decoding-invalid-pkcs7'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) coding.log: coding @p='coding'; \ b='coding'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) setof.log: setof$(EXEEXT) @p='setof$(EXEEXT)'; \ b='setof'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) CVE-2018-1000654.log: CVE-2018-1000654$(EXEEXT) @p='CVE-2018-1000654$(EXEEXT)'; \ b='CVE-2018-1000654'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) parser.sh.log: parser.sh @p='parser.sh'; \ b='parser.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) reproducers.log: reproducers$(EXEEXT) @p='reproducers$(EXEEXT)'; \ b='reproducers'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) object-id-encoding.log: object-id-encoding$(EXEEXT) @p='object-id-encoding$(EXEEXT)'; \ b='object-id-encoding'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \ $(dist_check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/CVE-2018-1000654.Po -rm -f ./$(DEPDIR)/Test_choice.Po -rm -f ./$(DEPDIR)/Test_choice_ocsp.Po -rm -f ./$(DEPDIR)/Test_encdec.Po -rm -f ./$(DEPDIR)/Test_encoding.Po -rm -f ./$(DEPDIR)/Test_errors.Po -rm -f ./$(DEPDIR)/Test_indefinite.Po -rm -f ./$(DEPDIR)/Test_overflow.Po -rm -f ./$(DEPDIR)/Test_parser.Po -rm -f ./$(DEPDIR)/Test_simple.Po -rm -f ./$(DEPDIR)/Test_strings.Po -rm -f ./$(DEPDIR)/Test_tree.Po -rm -f ./$(DEPDIR)/coding-decoding2.Po -rm -f ./$(DEPDIR)/coding-long-oid.Po -rm -f ./$(DEPDIR)/copynode.Po -rm -f ./$(DEPDIR)/object-id-decoding.Po -rm -f ./$(DEPDIR)/object-id-encoding.Po -rm -f ./$(DEPDIR)/ocsp-basic-response.Po -rm -f ./$(DEPDIR)/octet-string.Po -rm -f ./$(DEPDIR)/reproducers.Po -rm -f ./$(DEPDIR)/setof.Po -rm -f ./$(DEPDIR)/spc_pe_image_data.Po -rm -f ./$(DEPDIR)/strict-der.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/CVE-2018-1000654.Po -rm -f ./$(DEPDIR)/Test_choice.Po -rm -f ./$(DEPDIR)/Test_choice_ocsp.Po -rm -f ./$(DEPDIR)/Test_encdec.Po -rm -f ./$(DEPDIR)/Test_encoding.Po -rm -f ./$(DEPDIR)/Test_errors.Po -rm -f ./$(DEPDIR)/Test_indefinite.Po -rm -f ./$(DEPDIR)/Test_overflow.Po -rm -f ./$(DEPDIR)/Test_parser.Po -rm -f ./$(DEPDIR)/Test_simple.Po -rm -f ./$(DEPDIR)/Test_strings.Po -rm -f ./$(DEPDIR)/Test_tree.Po -rm -f ./$(DEPDIR)/coding-decoding2.Po -rm -f ./$(DEPDIR)/coding-long-oid.Po -rm -f ./$(DEPDIR)/copynode.Po -rm -f ./$(DEPDIR)/object-id-decoding.Po -rm -f ./$(DEPDIR)/object-id-encoding.Po -rm -f ./$(DEPDIR)/ocsp-basic-response.Po -rm -f ./$(DEPDIR)/octet-string.Po -rm -f ./$(DEPDIR)/reproducers.Po -rm -f ./$(DEPDIR)/setof.Po -rm -f ./$(DEPDIR)/spc_pe_image_data.Po -rm -f ./$(DEPDIR)/strict-der.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all check check-am install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile CVE-2018-1000654-1_asn1_tab.h: $(srcdir)/CVE-2018-1000654-1.asn $(top_builddir)/src/asn1Parser$(EXEEXT) $^ -o $@ CVE-2018-1000654-2_asn1_tab.h: $(srcdir)/CVE-2018-1000654-2.asn $(top_builddir)/src/asn1Parser$(EXEEXT) $^ -o $@ # 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: libtasn1-4.16.0/tests/ocsp-basic-response.der0000644000000000000000000000067113246341643015735 000000000000000‚µ0ž¢Pês‰Û)ûžå ÔÞy™Hƒ÷20140904054900Z0s0q0I0 +íH­ÝË{â„*©´ ñ¬04Ï–Pês‰Û)ûžå ÔÞy™Hƒ÷H‘]ý^¶à©g°äd€20140904054900Z 20140911060400Z0  *†H†÷ ‚n^^ÿ?MÇSÇóÓÜšÇÎw,gV˜‘vÜH²›ê¿, õ˜<_UÂÿKš¼¦ƒž«+ëê;_¾)pc*¤¨«i²dº]s‘\’óiÔÉ9œ|}¢G’ÂVþ¡ JiÿÚHÅ^Ø«9ˆjúWÖHµÎÉ_¥–þ7^5QÁžyZ&ºgg8*€uB™h>ì/~-¡¦¾ŸQ"ˆ:ÉœíQï!f~©Ð?œ»Ò”oKÙÄõ,õ}hóQ¬Ú f©=í­Mœ)Tû~6ô» ŒjB)|V Gÿ‡ý²ûÉ"ã{ù˜ª:2¶/º¶ÁÜÃ]µK®])j1ÞÍlibtasn1-4.16.0/tests/invalid-assignments2.txt0000644000000000000000000000034013246341643016155 00000000000000dp PKIX1. s sK. su e IX!.s suKIX1. X!. QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQþÿÿÿQQQQQQQQQQQQ‹æÿ¿QQQQQQQQQQQQªªªªIX!. su sue IX!. su X1. nue IX!. 41. nue IX.( 3libtasn1-4.16.0/tests/spc_pe_image_data.c0000644000000000000000000000674013246341643015135 00000000000000/* * Copyright (C) 2016 Red Hat, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include int main (int argc, char** argv) { int result = 0, len; asn1_node definitions = NULL, node1 = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; const char *choicefile = getenv ("ASN1_MSCAT"); const char *datafile = getenv ("ASN1_SPC_PE_IMAGE_DATA"); FILE *fp; char data[1024]; int data_size = sizeof (data); unsigned etype; int cmp; if (choicefile == NULL) { choicefile = "mscat.asn"; } if (datafile == NULL) { datafile = "spc_pe_image_data.der"; } result = asn1_parser2tree(choicefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { fprintf(stderr, "error in %d: %s\n", __LINE__, errorDescription); exit (1); } result = asn1_create_element(definitions, "CATALOG.SpcPEImageData", &node1); if (result != ASN1_SUCCESS) { fprintf(stderr, "error in %d\n", __LINE__); exit (1); } fp = fopen(datafile, "rb"); if (fp == NULL) { fprintf (stderr, "error in %d\n", __LINE__); exit(1); } data_size = fread(data, 1, sizeof(data), fp); fclose(fp); result = asn1_der_decoding2(&node1, data, &data_size, ASN1_DECODE_FLAG_STRICT_DER, errorDescription); if (result != ASN1_SUCCESS) { fprintf(stderr, "error in %d: decoding: %s\n", __LINE__, errorDescription); exit(1); } len = 0; result = asn1_read_value_type(node1, "flags", NULL, &len, &etype); if (result != ASN1_MEM_ERROR) { fprintf(stderr, "error in %d: %s\n", __LINE__, errorDescription); exit(1); } if ((size_t)len >= sizeof(data)) { fprintf(stderr, "error len=%d, sizeof(data)=%zu\n", len, sizeof(data)); exit(1); } result = asn1_read_value(node1, "flags", data, &len); if (result != ASN1_SUCCESS) { fprintf(stderr, "error in %d: %s\n", __LINE__, errorDescription); exit (1); } etype = 0; len = 0; result = asn1_read_value_type(node1, "link", NULL, &len, &etype); if (result != ASN1_MEM_ERROR) { fprintf(stderr, "error in %d: result is: %s\n", __LINE__, asn1_strerror(result)); exit(1); } if (etype != ASN1_ETYPE_CHOICE) { fprintf(stderr, "error in %d: The type (%u) doesn't match choice.\n", __LINE__, etype); exit(1); } if (len != 5) { fprintf (stderr, "length doesn't match the expected (got: %d, should be: 20)\n", len); exit (1); } len = sizeof(data); result = asn1_read_value(node1, "link", data, &len); if (result != ASN1_SUCCESS) { fprintf(stderr, "error in %d: %s\n", __LINE__, errorDescription); exit (1); } cmp = memcmp(data, "file", len); if (cmp != 0) { fprintf(stderr, "contents don't match\n"); exit(1); } printf("SUCCESS\n"); asn1_delete_structure (&node1); asn1_delete_structure (&definitions); return 0; } libtasn1-4.16.0/tests/Test_choice.c0000644000000000000000000000561013246341643013755 00000000000000/* * Copyright (C) 2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include int main (int argc, char** argv) { int result = 0; asn1_node definitions = NULL, node1 = NULL, node2 = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; const char *choicefile = getenv ("ASN1CHOICE"); char data[1024]; int data_size = sizeof (data); if (!choicefile) choicefile = "pkix.asn"; /* Encode */ result = asn1_parser2tree (choicefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_create_element (definitions, "TEST.Choice0", &node1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "", "choice1", 1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "choice1", "choice2", 1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "choice1.choice2", "int1", 1); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_write_value (node1, "choice1.choice2.int1", "1234", 0); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } result = asn1_der_coding (node1, "", data, &data_size, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } asn1_delete_structure (&node1); /* Decode */ result = asn1_create_element (definitions, "TEST.Choice0", &node2); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } #if 0 printf ("der:"); for (i = 0; i < data_size; i++) printf ("%.2x ", (unsigned char) (data[i])); printf ("\n"); #endif result = asn1_der_decoding (&node2, data, data_size, errorDescription); if (result != ASN1_SUCCESS) { printf ("error in %d\n", __LINE__); exit (1); } asn1_delete_structure (&node2); asn1_delete_structure (&definitions); return 0; } libtasn1-4.16.0/tests/pkix.asn.out0000644000000000000000000012010013520774070013633 00000000000000#if HAVE_CONFIG_H # include "config.h" #endif #include const asn1_static_node pkix_asn1_tab[] = { { "PKIX1", 536875024, NULL }, { NULL, 1073741836, NULL }, { "id-ce", 1879048204, NULL }, { "joint-iso-ccitt", 1073741825, "2"}, { "ds", 1073741825, "5"}, { NULL, 1, "29"}, { "id-ce-authorityKeyIdentifier", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "35"}, { "AuthorityKeyIdentifier", 1610612741, NULL }, { "keyIdentifier", 1610637314, "KeyIdentifier"}, { NULL, 4104, "0"}, { "authorityCertIssuer", 1610637314, "GeneralNames"}, { NULL, 4104, "1"}, { "authorityCertSerialNumber", 536895490, "CertificateSerialNumber"}, { NULL, 4104, "2"}, { "KeyIdentifier", 1073741831, NULL }, { "id-ce-subjectKeyIdentifier", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "14"}, { "SubjectKeyIdentifier", 1073741826, "KeyIdentifier"}, { "id-ce-keyUsage", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "15"}, { "KeyUsage", 1610874886, NULL }, { "digitalSignature", 1073741825, "0"}, { "nonRepudiation", 1073741825, "1"}, { "keyEncipherment", 1073741825, "2"}, { "dataEncipherment", 1073741825, "3"}, { "keyAgreement", 1073741825, "4"}, { "keyCertSign", 1073741825, "5"}, { "cRLSign", 1073741825, "6"}, { "encipherOnly", 1073741825, "7"}, { "decipherOnly", 1, "8"}, { "id-ce-privateKeyUsagePeriod", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "16"}, { "PrivateKeyUsagePeriod", 1610612741, NULL }, { "notBefore", 1610637349, NULL }, { NULL, 4104, "0"}, { "notAfter", 536895525, NULL }, { NULL, 4104, "1"}, { "id-ce-certificatePolicies", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "32"}, { "CertificatePolicies", 1612709899, NULL }, { NULL, 2, "PolicyInformation"}, { "PolicyInformation", 1610612741, NULL }, { "policyIdentifier", 1073741826, "CertPolicyId"}, { "policyQualifiers", 538984459, NULL }, { NULL, 2, "PolicyQualifierInfo"}, { "CertPolicyId", 1073741836, NULL }, { "PolicyQualifierInfo", 1610612741, NULL }, { "policyQualifierId", 1073741826, "PolicyQualifierId"}, { "qualifier", 541065229, NULL }, { "policyQualifierId", 1, NULL }, { "PolicyQualifierId", 1073741836, NULL }, { "CPSuri", 1073741853, NULL }, { "UserNotice", 1610612741, NULL }, { "noticeRef", 1073758210, "NoticeReference"}, { "explicitText", 16386, "DisplayText"}, { "NoticeReference", 1610612741, NULL }, { "organization", 1073741826, "DisplayText"}, { "noticeNumbers", 536870923, NULL }, { NULL, 3, NULL }, { "DisplayText", 1610612754, NULL }, { "visibleString", 1075839011, NULL }, { "bmpString", 1075839009, NULL }, { "utf8String", 2097186, NULL }, { "id-ce-policyMappings", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "33"}, { "PolicyMappings", 1612709899, NULL }, { NULL, 536870917, NULL }, { "issuerDomainPolicy", 1073741826, "CertPolicyId"}, { "subjectDomainPolicy", 2, "CertPolicyId"}, { "DirectoryString", 1610612754, NULL }, { "teletexString", 1075839006, NULL }, { "printableString", 1075839007, NULL }, { "universalString", 1075839008, NULL }, { "utf8String", 1075839010, NULL }, { "bmpString", 1075839009, NULL }, { "ia5String", 2097181, NULL }, { "id-ce-subjectAltName", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "17"}, { "SubjectAltName", 1073741826, "GeneralNames"}, { "GeneralNames", 1612709899, NULL }, { NULL, 2, "GeneralName"}, { "GeneralName", 1610612754, NULL }, { "otherName", 1610620930, "AnotherName"}, { NULL, 4104, "0"}, { "rfc822Name", 1610620957, NULL }, { NULL, 4104, "1"}, { "dNSName", 1610620957, NULL }, { NULL, 4104, "2"}, { "x400Address", 1610620930, "ORAddress"}, { NULL, 4104, "3"}, { "directoryName", 1610620930, "RDNSequence"}, { NULL, 2056, "4"}, { "ediPartyName", 1610620930, "EDIPartyName"}, { NULL, 4104, "5"}, { "uniformResourceIdentifier", 1610620957, NULL }, { NULL, 4104, "6"}, { "iPAddress", 1610620935, NULL }, { NULL, 4104, "7"}, { "registeredID", 536879116, NULL }, { NULL, 4104, "8"}, { "AnotherName", 1610612741, NULL }, { "type-id", 1073741836, NULL }, { "value", 541073421, NULL }, { NULL, 1073743880, "0"}, { "type-id", 1, NULL }, { "EDIPartyName", 1610612741, NULL }, { "nameAssigner", 1610637314, "DirectoryString"}, { NULL, 4104, "0"}, { "partyName", 536879106, "DirectoryString"}, { NULL, 4104, "1"}, { "id-ce-issuerAltName", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "18"}, { "IssuerAltName", 1073741826, "GeneralNames"}, { "id-ce-subjectDirectoryAttributes", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "9"}, { "SubjectDirectoryAttributes", 1612709899, NULL }, { NULL, 2, "Attribute"}, { "id-ce-basicConstraints", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "19"}, { "BasicConstraints", 1610612741, NULL }, { "cA", 1610645508, NULL }, { NULL, 131081, NULL }, { "pathLenConstraint", 16387, NULL }, { "id-ce-nameConstraints", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "30"}, { "NameConstraints", 1610612741, NULL }, { "permittedSubtrees", 1610637314, "GeneralSubtrees"}, { NULL, 4104, "0"}, { "excludedSubtrees", 536895490, "GeneralSubtrees"}, { NULL, 4104, "1"}, { "GeneralSubtrees", 1612709899, NULL }, { NULL, 2, "GeneralSubtree"}, { "GeneralSubtree", 1610612741, NULL }, { "base", 1073741826, "GeneralName"}, { "minimum", 1610653698, "BaseDistance"}, { NULL, 1073741833, "0"}, { NULL, 4104, "0"}, { "maximum", 536895490, "BaseDistance"}, { NULL, 4104, "1"}, { "BaseDistance", 1073741827, NULL }, { "id-ce-policyConstraints", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "36"}, { "PolicyConstraints", 1610612741, NULL }, { "requireExplicitPolicy", 1610637314, "SkipCerts"}, { NULL, 4104, "0"}, { "inhibitPolicyMapping", 536895490, "SkipCerts"}, { NULL, 4104, "1"}, { "SkipCerts", 1073741827, NULL }, { "id-ce-cRLDistributionPoints", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "31"}, { "CRLDistributionPoints", 1612709899, NULL }, { NULL, 2, "DistributionPoint"}, { "DistributionPoint", 1610612741, NULL }, { "distributionPoint", 1610637314, "DistributionPointName"}, { NULL, 2056, "0"}, { "reasons", 1610637314, "ReasonFlags"}, { NULL, 4104, "1"}, { "cRLIssuer", 536895490, "GeneralNames"}, { NULL, 4104, "2"}, { "DistributionPointName", 1610612754, NULL }, { "fullName", 1610620930, "GeneralNames"}, { NULL, 4104, "0"}, { "nameRelativeToCRLIssuer", 536879106, "RelativeDistinguishedName"}, { NULL, 4104, "1"}, { "ReasonFlags", 1610874886, NULL }, { "unused", 1073741825, "0"}, { "keyCompromise", 1073741825, "1"}, { "cACompromise", 1073741825, "2"}, { "affiliationChanged", 1073741825, "3"}, { "superseded", 1073741825, "4"}, { "cessationOfOperation", 1073741825, "5"}, { "certificateHold", 1073741825, "6"}, { "privilegeWithdrawn", 1073741825, "7"}, { "aACompromise", 1, "8"}, { "id-ce-extKeyUsage", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "37"}, { "ExtKeyUsageSyntax", 1612709899, NULL }, { NULL, 2, "KeyPurposeId"}, { "KeyPurposeId", 1073741836, NULL }, { "id-kp-serverAuth", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "1"}, { "id-kp-clientAuth", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "2"}, { "id-kp-codeSigning", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "3"}, { "id-kp-emailProtection", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "4"}, { "id-kp-ipsecEndSystem", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "5"}, { "id-kp-ipsecTunnel", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "6"}, { "id-kp-ipsecUser", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "7"}, { "id-kp-timeStamping", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "8"}, { "id-pe-authorityInfoAccess", 1879048204, NULL }, { NULL, 1073741825, "id-pe"}, { NULL, 1, "1"}, { "AuthorityInfoAccessSyntax", 1612709899, NULL }, { NULL, 2, "AccessDescription"}, { "AccessDescription", 1610612741, NULL }, { "accessMethod", 1073741836, NULL }, { "accessLocation", 2, "GeneralName"}, { "id-ce-cRLNumber", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "20"}, { "CRLNumber", 1073741827, NULL }, { "id-ce-issuingDistributionPoint", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "28"}, { "IssuingDistributionPoint", 1610612741, NULL }, { "distributionPoint", 1610637314, "DistributionPointName"}, { NULL, 4104, "0"}, { "onlyContainsUserCerts", 1610653700, NULL }, { NULL, 1073872905, NULL }, { NULL, 4104, "1"}, { "onlyContainsCACerts", 1610653700, NULL }, { NULL, 1073872905, NULL }, { NULL, 4104, "2"}, { "onlySomeReasons", 1610637314, "ReasonFlags"}, { NULL, 4104, "3"}, { "indirectCRL", 536911876, NULL }, { NULL, 1073872905, NULL }, { NULL, 4104, "4"}, { "id-ce-deltaCRLIndicator", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "27"}, { "BaseCRLNumber", 1073741826, "CRLNumber"}, { "id-ce-cRLReasons", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "21"}, { "CRLReason", 1610874901, NULL }, { "unspecified", 1073741825, "0"}, { "keyCompromise", 1073741825, "1"}, { "cACompromise", 1073741825, "2"}, { "affiliationChanged", 1073741825, "3"}, { "superseded", 1073741825, "4"}, { "cessationOfOperation", 1073741825, "5"}, { "certificateHold", 1073741825, "6"}, { "removeFromCRL", 1, "8"}, { "id-ce-certificateIssuer", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "29"}, { "CertificateIssuer", 1073741826, "GeneralNames"}, { "id-ce-holdInstructionCode", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "23"}, { "HoldInstructionCode", 1073741836, NULL }, { "holdInstruction", 1879048204, NULL }, { "joint-iso-itu-t", 1073741825, "2"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "x9cm", 1073741825, "10040"}, { NULL, 1, "2"}, { "id-holdinstruction-none", 1879048204, NULL }, { NULL, 1073741825, "holdInstruction"}, { NULL, 1, "1"}, { "id-holdinstruction-callissuer", 1879048204, NULL }, { NULL, 1073741825, "holdInstruction"}, { NULL, 1, "2"}, { "id-holdinstruction-reject", 1879048204, NULL }, { NULL, 1073741825, "holdInstruction"}, { NULL, 1, "3"}, { "id-ce-invalidityDate", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "24"}, { "InvalidityDate", 1073741861, NULL }, { "id-pkix", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "identified-organization", 1073741825, "3"}, { "dod", 1073741825, "6"}, { "internet", 1073741825, "1"}, { "security", 1073741825, "5"}, { "mechanisms", 1073741825, "5"}, { "pkix", 1, "7"}, { "id-pe", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "1"}, { "id-qt", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "2"}, { "id-kp", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "3"}, { "id-ad", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "48"}, { "id-qt-cps", 1879048204, NULL }, { NULL, 1073741825, "id-qt"}, { NULL, 1, "1"}, { "id-qt-unotice", 1879048204, NULL }, { NULL, 1073741825, "id-qt"}, { NULL, 1, "2"}, { "id-ad-ocsp", 1879048204, NULL }, { NULL, 1073741825, "id-ad"}, { NULL, 1, "1"}, { "id-ad-caIssuers", 1879048204, NULL }, { NULL, 1073741825, "id-ad"}, { NULL, 1, "2"}, { "Attribute", 1610612741, NULL }, { "type", 1073741826, "AttributeType"}, { "values", 536870927, NULL }, { NULL, 2, "AttributeValue"}, { "AttributeType", 1073741836, NULL }, { "AttributeValue", 1614807053, NULL }, { "type", 1, NULL }, { "AttributeTypeAndValue", 1610612741, NULL }, { "type", 1073741826, "AttributeType"}, { "value", 2, "AttributeValue"}, { "id-at", 1879048204, NULL }, { "joint-iso-ccitt", 1073741825, "2"}, { "ds", 1073741825, "5"}, { NULL, 1, "4"}, { "id-at-initials", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "43"}, { "X520initials", 1073741826, "DirectoryString"}, { "id-at-generationQualifier", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "44"}, { "X520generationQualifier", 1073741826, "DirectoryString"}, { "id-at-surname", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "4"}, { "X520surName", 1073741826, "DirectoryString"}, { "id-at-givenName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "42"}, { "X520givenName", 1073741826, "DirectoryString"}, { "id-at-name", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "41"}, { "X520name", 1073741826, "DirectoryString"}, { "id-at-commonName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "3"}, { "X520CommonName", 1073741826, "DirectoryString"}, { "id-at-localityName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "7"}, { "X520LocalityName", 1073741826, "DirectoryString"}, { "id-at-stateOrProvinceName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "8"}, { "X520StateOrProvinceName", 1073741826, "DirectoryString"}, { "id-at-organizationName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "10"}, { "X520OrganizationName", 1073741826, "DirectoryString"}, { "id-at-organizationalUnitName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "11"}, { "X520OrganizationalUnitName", 1073741826, "DirectoryString"}, { "id-at-title", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "12"}, { "X520Title", 1073741826, "DirectoryString"}, { "id-at-description", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "13"}, { "X520Description", 1073741826, "DirectoryString"}, { "id-at-dnQualifier", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "46"}, { "X520dnQualifier", 1073741855, NULL }, { "id-at-countryName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "6"}, { "X520countryName", 1075839007, NULL }, { "id-at-serialNumber", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "5"}, { "X520serialNumber", 1073741855, NULL }, { "id-at-telephoneNumber", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "20"}, { "X520telephoneNumber", 1073741855, NULL }, { "id-at-facsimileTelephoneNumber", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "23"}, { "X520facsimileTelephoneNumber", 1073741855, NULL }, { "id-at-pseudonym", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "65"}, { "X520pseudonym", 1073741826, "DirectoryString"}, { "id-at-name", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "41"}, { "X520name", 1073741826, "DirectoryString"}, { "id-at-streetAddress", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "9"}, { "X520streetAddress", 1073741826, "DirectoryString"}, { "id-at-postalAddress", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "16"}, { "X520postalAddress", 1073741826, "PostalAddress"}, { "PostalAddress", 1610612747, NULL }, { NULL, 2, "DirectoryString"}, { "pkcs", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "rsadsi", 1073741825, "113549"}, { "pkcs", 1, "1"}, { "pkcs-9", 1879048204, NULL }, { NULL, 1073741825, "pkcs"}, { NULL, 1, "9"}, { "emailAddress", 1880096780, "AttributeType"}, { NULL, 1073741825, "pkcs-9"}, { NULL, 1, "1"}, { "Pkcs9email", 1075839005, NULL }, { "Name", 1610612754, NULL }, { "rdnSequence", 2, "RDNSequence"}, { "RDNSequence", 1610612747, NULL }, { NULL, 2, "RelativeDistinguishedName"}, { "DistinguishedName", 1073741826, "RDNSequence"}, { "RelativeDistinguishedName", 1612709903, NULL }, { NULL, 2, "AttributeTypeAndValue"}, { "Certificate", 1610612741, NULL }, { "tbsCertificate", 1073741826, "TBSCertificate"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 6, NULL }, { "TBSCertificate", 1610612741, NULL }, { "version", 1610653698, "Version"}, { NULL, 1073741833, "v1"}, { NULL, 2056, "0"}, { "serialNumber", 1073741826, "CertificateSerialNumber"}, { "signature", 1073741826, "AlgorithmIdentifier"}, { "issuer", 1073741826, "Name"}, { "validity", 1073741826, "Validity"}, { "subject", 1073741826, "Name"}, { "subjectPublicKeyInfo", 1073741826, "SubjectPublicKeyInfo"}, { "issuerUniqueID", 1610637314, "UniqueIdentifier"}, { NULL, 4104, "1"}, { "subjectUniqueID", 1610637314, "UniqueIdentifier"}, { NULL, 4104, "2"}, { "extensions", 536895490, "Extensions"}, { NULL, 2056, "3"}, { "Version", 1610874883, NULL }, { "v1", 1073741825, "0"}, { "v2", 1073741825, "1"}, { "v3", 1, "2"}, { "CertificateSerialNumber", 1073741827, NULL }, { "Validity", 1610612741, NULL }, { "notBefore", 1073741826, "Time"}, { "notAfter", 2, "Time"}, { "Time", 1610612754, NULL }, { "utcTime", 1073741860, NULL }, { "generalTime", 37, NULL }, { "UniqueIdentifier", 1073741830, NULL }, { "SubjectPublicKeyInfo", 1610612741, NULL }, { "algorithm", 1073741826, "AlgorithmIdentifier"}, { "subjectPublicKey", 6, NULL }, { "Extensions", 1612709899, NULL }, { NULL, 2, "Extension"}, { "Extension", 1610612741, NULL }, { "extnID", 1073741836, NULL }, { "critical", 1610645508, NULL }, { NULL, 131081, NULL }, { "extnValue", 7, NULL }, { "CertificateList", 1610612741, NULL }, { "tbsCertList", 1073741826, "TBSCertList"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 6, NULL }, { "TBSCertList", 1610612741, NULL }, { "version", 1073758210, "Version"}, { "signature", 1073741826, "AlgorithmIdentifier"}, { "issuer", 1073741826, "Name"}, { "thisUpdate", 1073741826, "Time"}, { "nextUpdate", 1073758210, "Time"}, { "revokedCertificates", 1610629131, NULL }, { NULL, 536870917, NULL }, { "userCertificate", 1073741826, "CertificateSerialNumber"}, { "revocationDate", 1073741826, "Time"}, { "crlEntryExtensions", 16386, "Extensions"}, { "crlExtensions", 536895490, "Extensions"}, { NULL, 2056, "0"}, { "AlgorithmIdentifier", 1610612741, NULL }, { "algorithm", 1073741836, NULL }, { "parameters", 541081613, NULL }, { "algorithm", 1, NULL }, { "pkcs-1", 1879048204, NULL }, { NULL, 1073741825, "pkcs"}, { NULL, 1, "1"}, { "rsaEncryption", 1879048204, NULL }, { NULL, 1073741825, "pkcs-1"}, { NULL, 1, "1"}, { "md2WithRSAEncryption", 1879048204, NULL }, { NULL, 1073741825, "pkcs-1"}, { NULL, 1, "2"}, { "md5WithRSAEncryption", 1879048204, NULL }, { NULL, 1073741825, "pkcs-1"}, { NULL, 1, "4"}, { "sha1WithRSAEncryption", 1879048204, NULL }, { NULL, 1073741825, "pkcs-1"}, { NULL, 1, "5"}, { "id-dsa-with-sha1", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "x9-57", 1073741825, "10040"}, { "x9algorithm", 1073741825, "4"}, { NULL, 1, "3"}, { "Dss-Sig-Value", 1610612741, NULL }, { "r", 1073741827, NULL }, { "s", 3, NULL }, { "dhpublicnumber", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "ansi-x942", 1073741825, "10046"}, { "number-type", 1073741825, "2"}, { NULL, 1, "1"}, { "DomainParameters", 1610612741, NULL }, { "p", 1073741827, NULL }, { "g", 1073741827, NULL }, { "q", 1073741827, NULL }, { "j", 1073758211, NULL }, { "validationParms", 16386, "ValidationParms"}, { "ValidationParms", 1610612741, NULL }, { "seed", 1073741830, NULL }, { "pgenCounter", 3, NULL }, { "id-dsa", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "x9-57", 1073741825, "10040"}, { "x9algorithm", 1073741825, "4"}, { NULL, 1, "1"}, { "Dss-Parms", 1610612741, NULL }, { "p", 1073741827, NULL }, { "q", 1073741827, NULL }, { "g", 3, NULL }, { "ORAddress", 1610612741, NULL }, { "built-in-standard-attributes", 1073741826, "BuiltInStandardAttributes"}, { "built-in-domain-defined-attributes", 1073758210, "BuiltInDomainDefinedAttributes"}, { "extension-attributes", 16386, "ExtensionAttributes"}, { "BuiltInStandardAttributes", 1610612741, NULL }, { "country-name", 1073758210, "CountryName"}, { "administration-domain-name", 1073758210, "AdministrationDomainName"}, { "network-address", 1610637314, "NetworkAddress"}, { NULL, 2056, "0"}, { "terminal-identifier", 1610637314, "TerminalIdentifier"}, { NULL, 2056, "1"}, { "private-domain-name", 1610637314, "PrivateDomainName"}, { NULL, 2056, "2"}, { "organization-name", 1610637314, "OrganizationName"}, { NULL, 2056, "3"}, { "numeric-user-identifier", 1610637314, "NumericUserIdentifier"}, { NULL, 2056, "4"}, { "personal-name", 1610637314, "PersonalName"}, { NULL, 2056, "5"}, { "organizational-unit-names", 536895490, "OrganizationalUnitNames"}, { NULL, 2056, "6"}, { "CountryName", 1610620946, NULL }, { NULL, 1073746952, "1"}, { "x121-dcc-code", 1075839004, NULL }, { "iso-3166-alpha2-code", 2097183, NULL }, { "AdministrationDomainName", 1610620946, NULL }, { NULL, 1073744904, "2"}, { "numeric", 1075839004, NULL }, { "printable", 2097183, NULL }, { "NetworkAddress", 1073741826, "X121Address"}, { "X121Address", 1075839004, NULL }, { "TerminalIdentifier", 1075839007, NULL }, { "PrivateDomainName", 1610612754, NULL }, { "numeric", 1075839004, NULL }, { "printable", 2097183, NULL }, { "OrganizationName", 1075839007, NULL }, { "NumericUserIdentifier", 1075839004, NULL }, { "PersonalName", 1610612750, NULL }, { "surname", 1814044703, NULL }, { NULL, 4104, "0"}, { "given-name", 1814061087, NULL }, { NULL, 4104, "1"}, { "initials", 1814061087, NULL }, { NULL, 4104, "2"}, { "generation-qualifier", 740319263, NULL }, { NULL, 4104, "3"}, { "OrganizationalUnitNames", 1612709899, NULL }, { NULL, 2, "OrganizationalUnitName"}, { "OrganizationalUnitName", 1075839007, NULL }, { "BuiltInDomainDefinedAttributes", 1612709899, NULL }, { NULL, 2, "BuiltInDomainDefinedAttribute"}, { "BuiltInDomainDefinedAttribute", 1610612741, NULL }, { "type", 1075839007, NULL }, { "value", 2097183, NULL }, { "ExtensionAttributes", 1612709903, NULL }, { NULL, 2, "ExtensionAttribute"}, { "ExtensionAttribute", 1610612741, NULL }, { "extension-attribute-type", 1610620931, NULL }, { NULL, 2056, "0"}, { "extension-attribute-value", 541073421, NULL }, { NULL, 1073743880, "1"}, { "extension-attribute-type", 1, NULL }, { "common-name", 1342177283, "1"}, { "CommonName", 1075839007, NULL }, { "teletex-common-name", 1342177283, "2"}, { "TeletexCommonName", 1075839006, NULL }, { "teletex-organization-name", 1342177283, "3"}, { "TeletexOrganizationName", 1075839006, NULL }, { "teletex-personal-name", 1342177283, "4"}, { "TeletexPersonalName", 1610612750, NULL }, { "surname", 1814044702, NULL }, { NULL, 2056, "0"}, { "given-name", 1814061086, NULL }, { NULL, 2056, "1"}, { "initials", 1814061086, NULL }, { NULL, 2056, "2"}, { "generation-qualifier", 740319262, NULL }, { NULL, 2056, "3"}, { "teletex-organizational-unit-names", 1342177283, "5"}, { "TeletexOrganizationalUnitNames", 1612709899, NULL }, { NULL, 2, "TeletexOrganizationalUnitName"}, { "TeletexOrganizationalUnitName", 1075839006, NULL }, { "pds-name", 1342177283, "7"}, { "PDSName", 1075839007, NULL }, { "physical-delivery-country-name", 1342177283, "8"}, { "PhysicalDeliveryCountryName", 1610612754, NULL }, { "x121-dcc-code", 1075839004, NULL }, { "iso-3166-alpha2-code", 2097183, NULL }, { "postal-code", 1342177283, "9"}, { "PostalCode", 1610612754, NULL }, { "numeric-code", 1075839004, NULL }, { "printable-code", 2097183, NULL }, { "physical-delivery-office-name", 1342177283, "10"}, { "PhysicalDeliveryOfficeName", 1073741826, "PDSParameter"}, { "physical-delivery-office-number", 1342177283, "11"}, { "PhysicalDeliveryOfficeNumber", 1073741826, "PDSParameter"}, { "extension-OR-address-components", 1342177283, "12"}, { "ExtensionORAddressComponents", 1073741826, "PDSParameter"}, { "physical-delivery-personal-name", 1342177283, "13"}, { "PhysicalDeliveryPersonalName", 1073741826, "PDSParameter"}, { "physical-delivery-organization-name", 1342177283, "14"}, { "PhysicalDeliveryOrganizationName", 1073741826, "PDSParameter"}, { "extension-physical-delivery-address-components", 1342177283, "15"}, { "ExtensionPhysicalDeliveryAddressComponents", 1073741826, "PDSParameter"}, { "unformatted-postal-address", 1342177283, "16"}, { "UnformattedPostalAddress", 1610612750, NULL }, { "printable-address", 1814052875, NULL }, { NULL, 2097183, NULL }, { "teletex-string", 203440158, NULL }, { "street-address", 1342177283, "17"}, { "StreetAddress", 1073741826, "PDSParameter"}, { "post-office-box-address", 1342177283, "18"}, { "PostOfficeBoxAddress", 1073741826, "PDSParameter"}, { "poste-restante-address", 1342177283, "19"}, { "PosteRestanteAddress", 1073741826, "PDSParameter"}, { "unique-postal-name", 1342177283, "20"}, { "UniquePostalName", 1073741826, "PDSParameter"}, { "local-postal-attributes", 1342177283, "21"}, { "LocalPostalAttributes", 1073741826, "PDSParameter"}, { "PDSParameter", 1610612750, NULL }, { "printable-string", 1277181983, NULL }, { "teletex-string", 203440158, NULL }, { "extended-network-address", 1342177283, "22"}, { "ExtendedNetworkAddress", 1610612754, NULL }, { "e163-4-address", 1610612741, NULL }, { "number", 1612718108, NULL }, { NULL, 2056, "0"}, { "sub-address", 538992668, NULL }, { NULL, 2056, "1"}, { "psap-address", 536879106, "PresentationAddress"}, { NULL, 2056, "0"}, { "PresentationAddress", 1610612741, NULL }, { "pSelector", 1610637319, NULL }, { NULL, 2056, "0"}, { "sSelector", 1610637319, NULL }, { NULL, 2056, "1"}, { "tSelector", 1610637319, NULL }, { NULL, 2056, "2"}, { "nAddresses", 538976271, NULL }, { NULL, 1073743880, "3"}, { NULL, 7, NULL }, { "terminal-type", 1342177283, "23"}, { "TerminalType", 1610874883, NULL }, { "telex", 1073741825, "3"}, { "teletex", 1073741825, "4"}, { "g3-facsimile", 1073741825, "5"}, { "g4-facsimile", 1073741825, "6"}, { "ia5-terminal", 1073741825, "7"}, { "videotex", 1, "8"}, { "teletex-domain-defined-attributes", 1342177283, "6"}, { "TeletexDomainDefinedAttributes", 1612709899, NULL }, { NULL, 2, "TeletexDomainDefinedAttribute"}, { "TeletexDomainDefinedAttribute", 1610612741, NULL }, { "type", 1075839006, NULL }, { "value", 2097182, NULL }, { "ub-name", 1342177283, "32768"}, { "ub-common-name", 1342177283, "64"}, { "ub-locality-name", 1342177283, "128"}, { "ub-state-name", 1342177283, "128"}, { "ub-organization-name", 1342177283, "64"}, { "ub-organizational-unit-name", 1342177283, "64"}, { "ub-title", 1342177283, "64"}, { "ub-match", 1342177283, "128"}, { "ub-emailaddress-length", 1342177283, "128"}, { "ub-common-name-length", 1342177283, "64"}, { "ub-country-name-alpha-length", 1342177283, "2"}, { "ub-country-name-numeric-length", 1342177283, "3"}, { "ub-domain-defined-attributes", 1342177283, "4"}, { "ub-domain-defined-attribute-type-length", 1342177283, "8"}, { "ub-domain-defined-attribute-value-length", 1342177283, "128"}, { "ub-domain-name-length", 1342177283, "16"}, { "ub-extension-attributes", 1342177283, "256"}, { "ub-e163-4-number-length", 1342177283, "15"}, { "ub-e163-4-sub-address-length", 1342177283, "40"}, { "ub-generation-qualifier-length", 1342177283, "3"}, { "ub-given-name-length", 1342177283, "16"}, { "ub-initials-length", 1342177283, "5"}, { "ub-integer-options", 1342177283, "256"}, { "ub-numeric-user-id-length", 1342177283, "32"}, { "ub-organization-name-length", 1342177283, "64"}, { "ub-organizational-unit-name-length", 1342177283, "32"}, { "ub-organizational-units", 1342177283, "4"}, { "ub-pds-name-length", 1342177283, "16"}, { "ub-pds-parameter-length", 1342177283, "30"}, { "ub-pds-physical-address-lines", 1342177283, "6"}, { "ub-postal-code-length", 1342177283, "16"}, { "ub-surname-length", 1342177283, "40"}, { "ub-terminal-id-length", 1342177283, "24"}, { "ub-unformatted-address-length", 1342177283, "180"}, { "ub-x121-address-length", 1342177283, "16"}, { "pkcs-7-ContentInfo", 1610612741, NULL }, { "contentType", 1073741836, NULL }, { "content", 541073421, NULL }, { NULL, 1073743880, "0"}, { "contentType", 1, NULL }, { "pkcs-7-DigestInfo", 1610612741, NULL }, { "digestAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "digest", 7, NULL }, { "pkcs-7-SignedData", 1610612741, NULL }, { "version", 1073741827, NULL }, { "digestAlgorithms", 1073741826, "pkcs-7-DigestAlgorithmIdentifiers"}, { "encapContentInfo", 1073741826, "pkcs-7-EncapsulatedContentInfo"}, { "certificates", 1610637314, "pkcs-7-CertificateSet"}, { NULL, 4104, "0"}, { "crls", 1610637314, "pkcs-7-CertificateRevocationLists"}, { NULL, 4104, "1"}, { "signerInfos", 2, "pkcs-7-SignerInfos"}, { "pkcs-7-DigestAlgorithmIdentifiers", 1610612751, NULL }, { NULL, 2, "AlgorithmIdentifier"}, { "pkcs-7-EncapsulatedContentInfo", 1610612741, NULL }, { "eContentType", 1073741836, NULL }, { "eContent", 536895501, NULL }, { NULL, 2056, "0"}, { "pkcs-7-CertificateRevocationLists", 1610612751, NULL }, { NULL, 13, NULL }, { "pkcs-7-CertificateChoices", 1610612754, NULL }, { "certificate", 13, NULL }, { "pkcs-7-CertificateSet", 1610612751, NULL }, { NULL, 2, "pkcs-7-CertificateChoices"}, { "IssuerAndSerialNumber", 1610612741, NULL }, { "issuer", 1073741826, "Name"}, { "serialNumber", 2, "CertificateSerialNumber"}, { "pkcs-7-SignerInfo", 1610612741, NULL }, { "version", 1073741827, NULL }, { "sid", 1073741826, "SignerIdentifier"}, { "digestAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signedAttrs", 1610637314, "SignedAttributes"}, { NULL, 4104, "0"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 1073741831, NULL }, { "unsignedAttrs", 536895490, "SignedAttributes"}, { NULL, 4104, "1"}, { "SignedAttributes", 1612709903, NULL }, { NULL, 2, "Attribute"}, { "SignerIdentifier", 1610612754, NULL }, { "issuerAndSerialNumber", 1073741826, "IssuerAndSerialNumber"}, { "subjectKeyIdentifier", 536879106, "SubjectKeyIdentifier"}, { NULL, 4104, "0"}, { "pkcs-7-SignerInfos", 1610612751, NULL }, { NULL, 2, "pkcs-7-SignerInfo"}, { "pkcs-10-CertificationRequestInfo", 1610612741, NULL }, { "version", 1610874883, NULL }, { "v1", 1, "0"}, { "subject", 1073741826, "Name"}, { "subjectPKInfo", 1073741826, "SubjectPublicKeyInfo"}, { "attributes", 536879106, "Attributes"}, { NULL, 4104, "0"}, { "Attributes", 1610612751, NULL }, { NULL, 2, "Attribute"}, { "pkcs-10-CertificationRequest", 1610612741, NULL }, { "certificationRequestInfo", 1073741826, "pkcs-10-CertificationRequestInfo"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 6, NULL }, { "pkcs-9-ub-challengePassword", 1342177283, "255"}, { "pkcs-9-certTypes", 1879048204, NULL }, { NULL, 1073741825, "pkcs-9"}, { NULL, 1, "22"}, { "pkcs-9-crlTypes", 1879048204, NULL }, { NULL, 1073741825, "pkcs-9"}, { NULL, 1, "23"}, { "pkcs-9-at-challengePassword", 1879048204, NULL }, { NULL, 1073741825, "pkcs-9"}, { NULL, 1, "7"}, { "pkcs-9-challengePassword", 1610612754, NULL }, { "printableString", 1075839007, NULL }, { "utf8String", 2097186, NULL }, { "pkcs-9-at-localKeyId", 1879048204, NULL }, { NULL, 1073741825, "pkcs-9"}, { NULL, 1, "21"}, { "pkcs-9-localKeyId", 1073741831, NULL }, { "pkcs-9-at-friendlyName", 1879048204, NULL }, { NULL, 1073741825, "pkcs-9"}, { NULL, 1, "20"}, { "pkcs-9-friendlyName", 1075839009, NULL }, { "pkcs-8-PrivateKeyInfo", 1610612741, NULL }, { "version", 1073741826, "pkcs-8-Version"}, { "privateKeyAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "privateKey", 1073741826, "pkcs-8-PrivateKey"}, { "attributes", 536895490, "Attributes"}, { NULL, 4104, "0"}, { "pkcs-8-Version", 1610874883, NULL }, { "v1", 1, "0"}, { "pkcs-8-PrivateKey", 1073741831, NULL }, { "pkcs-8-Attributes", 1610612751, NULL }, { NULL, 2, "Attribute"}, { "pkcs-8-EncryptedPrivateKeyInfo", 1610612741, NULL }, { "encryptionAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "encryptedData", 2, "pkcs-8-EncryptedData"}, { "pkcs-8-EncryptedData", 1073741831, NULL }, { "pkcs-5", 1879048204, NULL }, { NULL, 1073741825, "pkcs"}, { NULL, 1, "5"}, { "pkcs-5-encryptionAlgorithm", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "rsadsi", 1073741825, "113549"}, { NULL, 1, "3"}, { "pkcs-5-des-EDE3-CBC", 1879048204, NULL }, { NULL, 1073741825, "pkcs-5-encryptionAlgorithm"}, { NULL, 1, "7"}, { "pkcs-5-des-EDE3-CBC-params", 1075838983, NULL }, { "pkcs-5-id-PBES2", 1879048204, NULL }, { NULL, 1073741825, "pkcs-5"}, { NULL, 1, "13"}, { "pkcs-5-PBES2-params", 1610612741, NULL }, { "keyDerivationFunc", 1073741826, "AlgorithmIdentifier"}, { "encryptionScheme", 2, "AlgorithmIdentifier"}, { "pkcs-5-id-PBKDF2", 1879048204, NULL }, { NULL, 1073741825, "pkcs-5"}, { NULL, 1, "12"}, { "pkcs-5-PBKDF2-params", 1610612741, NULL }, { "salt", 1610612754, NULL }, { "specified", 1073741831, NULL }, { "otherSource", 2, "AlgorithmIdentifier"}, { "iterationCount", 1073741827, NULL }, { "keyLength", 1073758211, NULL }, { "prf", 16386, "AlgorithmIdentifier"}, { "pkcs-12", 1879048204, NULL }, { NULL, 1073741825, "pkcs"}, { NULL, 1, "12"}, { "pkcs-12-PFX", 1610612741, NULL }, { "version", 1610874883, NULL }, { "v3", 1, "3"}, { "authSafe", 1073741826, "pkcs-7-ContentInfo"}, { "macData", 16386, "pkcs-12-MacData"}, { "pkcs-12-PbeParams", 1610612741, NULL }, { "salt", 1073741831, NULL }, { "iterations", 3, NULL }, { "pkcs-12-MacData", 1610612741, NULL }, { "mac", 1073741826, "pkcs-7-DigestInfo"}, { "macSalt", 1073741831, NULL }, { "iterations", 536903683, NULL }, { NULL, 9, "1"}, { "pkcs-12-AuthenticatedSafe", 1610612747, NULL }, { NULL, 2, "pkcs-7-ContentInfo"}, { "pkcs-12-SafeContents", 1610612747, NULL }, { NULL, 2, "pkcs-12-SafeBag"}, { "pkcs-12-SafeBag", 1610612741, NULL }, { "bagId", 1073741836, NULL }, { "bagValue", 1614815245, NULL }, { NULL, 1073743880, "0"}, { "badId", 1, NULL }, { "bagAttributes", 536887311, NULL }, { NULL, 2, "pkcs-12-PKCS12Attribute"}, { "pkcs-12-bagtypes", 1879048204, NULL }, { NULL, 1073741825, "pkcs-12"}, { NULL, 1073741825, "10"}, { NULL, 1, "1"}, { "pkcs-12-keyBag", 1879048204, NULL }, { NULL, 1073741825, "pkcs-12-bagtypes"}, { NULL, 1, "1"}, { "pkcs-12-pkcs8ShroudedKeyBag", 1879048204, NULL }, { NULL, 1073741825, "pkcs-12-bagtypes"}, { NULL, 1, "2"}, { "pkcs-12-certBag", 1879048204, NULL }, { NULL, 1073741825, "pkcs-12-bagtypes"}, { NULL, 1, "3"}, { "pkcs-12-crlBag", 1879048204, NULL }, { NULL, 1073741825, "pkcs-12-bagtypes"}, { NULL, 1, "4"}, { "pkcs-12-KeyBag", 1073741826, "pkcs-8-PrivateKeyInfo"}, { "pkcs-12-PKCS8ShroudedKeyBag", 1073741826, "pkcs-8-EncryptedPrivateKeyInfo"}, { "pkcs-12-CertBag", 1610612741, NULL }, { "certId", 1073741836, NULL }, { "certValue", 541073421, NULL }, { NULL, 1073743880, "0"}, { "certId", 1, NULL }, { "pkcs-12-CRLBag", 1610612741, NULL }, { "crlId", 1073741836, NULL }, { "crlValue", 541073421, NULL }, { NULL, 1073743880, "0"}, { "crlId", 1, NULL }, { "pkcs-12-PKCS12Attribute", 1073741826, "Attribute"}, { "pkcs-7-Data", 1073741831, NULL }, { "pkcs-7-EncryptedData", 1610612741, NULL }, { "version", 1073741827, NULL }, { "encryptedContentInfo", 1073741826, "pkcs-7-EncryptedContentInfo"}, { "unprotectedAttrs", 536895490, "pkcs-7-UnprotectedAttributes"}, { NULL, 4104, "1"}, { "pkcs-7-EncryptedContentInfo", 1610612741, NULL }, { "contentType", 1073741836, NULL }, { "contentEncryptionAlgorithm", 1073741826, "pkcs-7-ContentEncryptionAlgorithmIdentifier"}, { "encryptedContent", 536895495, NULL }, { NULL, 4104, "0"}, { "pkcs-7-ContentEncryptionAlgorithmIdentifier", 1073741826, "AlgorithmIdentifier"}, { "pkcs-7-UnprotectedAttributes", 1612709903, NULL }, { NULL, 2, "Attribute"}, { "id-at-ldap-DC", 1880096780, "AttributeType"}, { NULL, 1073741825, "0"}, { NULL, 1073741825, "9"}, { NULL, 1073741825, "2342"}, { NULL, 1073741825, "19200300"}, { NULL, 1073741825, "100"}, { NULL, 1073741825, "1"}, { NULL, 1, "25"}, { "ldap-DC", 1073741853, NULL }, { "id-at-ldap-UID", 1880096780, "AttributeType"}, { NULL, 1073741825, "0"}, { NULL, 1073741825, "9"}, { NULL, 1073741825, "2342"}, { NULL, 1073741825, "19200300"}, { NULL, 1073741825, "100"}, { NULL, 1073741825, "1"}, { NULL, 1, "1"}, { "ldap-UID", 1073741826, "DirectoryString"}, { "id-pda", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "9"}, { "id-pda-dateOfBirth", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-pda"}, { NULL, 1, "1"}, { "DateOfBirth", 1073741861, NULL }, { "id-pda-placeOfBirth", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-pda"}, { NULL, 1, "2"}, { "PlaceOfBirth", 1073741826, "DirectoryString"}, { "id-pda-gender", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-pda"}, { NULL, 1, "3"}, { "Gender", 1075839007, NULL }, { "id-pda-countryOfCitizenship", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-pda"}, { NULL, 1, "4"}, { "CountryOfCitizenship", 1075839007, NULL }, { "id-pda-countryOfResidence", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-pda"}, { NULL, 1, "5"}, { "CountryOfResidence", 1075839007, NULL }, { "id-pe-proxyCertInfo", 1879048204, NULL }, { NULL, 1073741825, "id-pe"}, { NULL, 1, "14"}, { "id-ppl-inheritAll", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1073741825, "21"}, { NULL, 1, "1"}, { "id-ppl-independent", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1073741825, "21"}, { NULL, 1, "2"}, { "ProxyCertInfo", 1610612741, NULL }, { "pCPathLenConstraint", 1073758211, NULL }, { "proxyPolicy", 2, "ProxyPolicy"}, { "ProxyPolicy", 1610612741, NULL }, { "policyLanguage", 1073741836, NULL }, { "policy", 16391, NULL }, { "id-on", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "8"}, { "id-on-xmppAddr", 1879048204, NULL }, { NULL, 1073741825, "id-on"}, { NULL, 1, "5"}, { "XmppAddr", 1073741858, NULL }, { "BasicOCSPResponse", 1610612741, NULL }, { "tbsResponseData", 1073741826, "ResponseData"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 1073741830, NULL }, { "certs", 536895499, NULL }, { NULL, 1073743880, "0"}, { NULL, 2, "Certificate"}, { "ResponseData", 1610612741, NULL }, { "version", 1610653699, NULL }, { NULL, 1073741833, "0"}, { NULL, 2056, "0"}, { "responderID", 1073741826, "ResponderID"}, { "producedAt", 1073741861, NULL }, { "responses", 1610612747, NULL }, { NULL, 2, "SingleResponse"}, { "responseExtensions", 536895490, "Extensions"}, { NULL, 2056, "1"}, { "ResponderID", 1610612754, NULL }, { "byName", 1610620930, "RDNSequence"}, { NULL, 2056, "1"}, { "byKey", 536879111, NULL }, { NULL, 2056, "2"}, { "CertID", 1610612741, NULL }, { "hashAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "issuerNameHash", 1073741831, NULL }, { "issuerKeyHash", 1073741831, NULL }, { "serialNumber", 2, "CertificateSerialNumber"}, { "CertStatus", 1610612754, NULL }, { "good", 1610620948, NULL }, { NULL, 4104, "0"}, { "revoked", 1610620930, "RevokedInfo"}, { NULL, 4104, "1"}, { "unknown", 536879106, "UnknownInfo"}, { NULL, 4104, "2"}, { "SingleResponse", 1610612741, NULL }, { "certID", 1073741826, "CertID"}, { "certStatus", 1073741826, "CertStatus"}, { "thisUpdate", 1073741861, NULL }, { "nextUpdate", 1610637349, NULL }, { NULL, 2056, "0"}, { "singleExtensions", 536895490, "Extensions"}, { NULL, 2056, "1"}, { "RevokedInfo", 1610612741, NULL }, { "revocationTime", 1073741861, NULL }, { "revocationReason", 536895490, "CRLReason"}, { NULL, 2056, "0"}, { "UnknownInfo", 20, NULL }, { NULL, 0, NULL } }; libtasn1-4.16.0/tests/Test_indefinite.c0000644000000000000000000001241513246341643014642 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /*****************************************************/ /* File: Test_tree.c */ /* Description: Test sequences for these functions: */ /* asn1_visit_tree, */ /* asn1_create_element, */ /* asn1_delete_structure, */ /* asn1_write_value, */ /* asn1_read_value, */ /*****************************************************/ #include #include #include #include "libtasn1.h" int main (int argc, char *argv[]) { int result; char buffer[10 * 1024]; asn1_node definitions = NULL; asn1_node asn1_element = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; FILE *out, *fd; ssize_t size; const char *treefile = getenv ("ASN1PKIX"); const char *indeffile = getenv ("ASN1INDEF"); const char *indeffile2 = getenv ("ASN1INDEF2"); const char *indeffile3 = getenv ("ASN1INDEF3"); int verbose = 0; if (argc > 1) verbose = 1; if (!treefile) treefile = "pkix.asn"; if (!indeffile) indeffile = "TestIndef.p12"; if (!indeffile2) indeffile2 = "TestIndef2.p12"; if (!indeffile3) indeffile3 = "TestIndef3.der"; if (verbose) { printf ("\n\n/****************************************/\n"); printf ("/* Test sequence : Test_indefinite */\n"); printf ("/****************************************/\n\n"); printf ("ASN1TREE: %s\n", treefile); } /* Check version */ if (asn1_check_version ("0.2.11") == NULL) printf ("\nLibrary version check ERROR:\n actual version: %s\n\n", asn1_check_version (NULL)); result = asn1_parser2tree (treefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } out = stdout; fd = fopen (indeffile, "rb"); if (fd == NULL) { printf ("Cannot read file %s\n", indeffile); exit (1); } size = fread (buffer, 1, sizeof (buffer), fd); if (size <= 0) { printf ("Cannot read from file %s\n", indeffile); exit (1); } fclose (fd); result = asn1_create_element (definitions, "PKIX1.pkcs-12-PFX", &asn1_element); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot create PKCS12 element\n"); exit (1); } result = asn1_der_decoding (&asn1_element, buffer, size, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot decode BER data (size %ld) in %s: %s\n", (long) size, indeffile, errorDescription); exit (1); } asn1_delete_structure (&asn1_element); /* second test */ fd = fopen (indeffile2, "rb"); if (fd == NULL) { printf ("Cannot read file %s\n", indeffile2); exit (1); } size = fread (buffer, 1, sizeof (buffer), fd); if (size <= 0) { printf ("Cannot read from file %s\n", indeffile2); exit (1); } fclose (fd); result = asn1_create_element (definitions, "PKIX1.pkcs-12-PFX", &asn1_element); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot create PKCS12 element\n"); exit (1); } result = asn1_der_decoding (&asn1_element, buffer, size, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot decode BER data (size %ld) in %s: %s\n", (long) size, indeffile2, errorDescription); exit (1); } asn1_delete_structure (&asn1_element); /* third test */ fd = fopen (indeffile3, "rb"); if (fd == NULL) { printf ("Cannot read file %s\n", indeffile3); exit (1); } size = fread (buffer, 1, sizeof (buffer), fd); if (size <= 0) { printf ("Cannot read from file %s\n", indeffile3); exit (1); } fclose (fd); result = asn1_create_element (definitions, "PKIX1.pkcs-12-CertBag", &asn1_element); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot create CertBag element\n"); exit (1); } result = asn1_der_decoding (&asn1_element, buffer, size, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot decode DER data (size %ld) in %s: %s\n", (long) size, indeffile3, errorDescription); exit (1); } asn1_delete_structure (&asn1_element); /* Clear the definition structures */ asn1_delete_structure (&definitions); if (out != stdout) fclose (out); exit (0); } libtasn1-4.16.0/tests/object-id-decoding.c0000644000000000000000000000620413611145057015133 00000000000000/* * Copyright (C) 2016 Red Hat, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include "libtasn1.h" struct tv { int der_len; const unsigned char *der; const char *oid; int expected_error; }; static const struct tv tv[] = { {.der_len = 5, .der = (void *) "\x06\x03\x80\x37\x03", .oid = "2.999.3", .expected_error = ASN1_DER_ERROR /* leading 0x80 */ }, {.der_len = 12, .der = (void *) "\x06\x0a\x2b\x06\x01\x80\x01\x92\x08\x09\x05\x01", .oid = "1.3.6.1.4.1.2312.9.5.1", .expected_error = ASN1_DER_ERROR /* leading 0x80 */ }, {.der_len = 6, .der = (void *) "\x06\x04\x01\x02\x03\x04", .oid = "0.1.2.3.4", .expected_error = ASN1_SUCCESS}, {.der_len = 5, .der = (void *) "\x06\x03\x51\x02\x03", .oid = "2.1.2.3", .expected_error = ASN1_SUCCESS}, {.der_len = 5, .der = (void *) "\x06\x03\x88\x37\x03", .oid = "2.999.3", .expected_error = ASN1_SUCCESS}, {.der_len = 12, .der = (void *) "\x06\x0a\x2b\x06\x01\x04\x01\x92\x08\x09\x05\x01", .oid = "1.3.6.1.4.1.2312.9.5.1", .expected_error = ASN1_SUCCESS}, {.der_len = 19, .der = (void *) "\x06\x11\xfa\x80\x00\x00\x00\x0e\x01\x0e\xfa\x80\x00\x00\x00\x0e\x63\x6f\x6d", .oid = "2.1998768.0.0.14.1.14.1998848.0.0.14.99.111.109", .expected_error = ASN1_SUCCESS}, {.der_len = 19, .der = (void *) "\x06\x11\x2b\x06\x01\x04\x01\x92\x08\x09\x02\xaa\xda\xbe\xbe\xfa\x72\x01\x07", .oid = "1.3.6.1.4.1.2312.9.2.1467399257458.1.7", .expected_error = ASN1_SUCCESS}, }; int main (int argc, char *argv[]) { char str[128]; int ret, ret_len; size_t i; for (i = 0; i < sizeof (tv) / sizeof (tv[0]); i++) { /* decode */ ret = asn1_get_object_id_der (tv[i].der+1, tv[i].der_len-1, &ret_len, str, sizeof (str)); if (ret != tv[i].expected_error) { fprintf (stderr, "%d: asn1_get_object_id_der iter %lu: got '%s' expected %d\n", __LINE__, (unsigned long) i, asn1_strerror(ret), tv[i].expected_error); return 1; } if (tv[i].expected_error != ASN1_SUCCESS) continue; if (ret_len != tv[i].der_len-1) { fprintf (stderr, "%d: iter %lu: error in DER, length returned is %d, had %d\n", __LINE__, (unsigned long)i, ret_len, tv[i].der_len-1); return 1; } if (strcmp (tv[i].oid, str) != 0) { fprintf (stderr, "%d: strcmp iter %lu: got invalid OID: %s, expected: %s\n", __LINE__, (unsigned long) i, str, tv[i].oid); return 1; } } return 0; } libtasn1-4.16.0/tests/crlf.cer0000644000000000000000000000143413246341643013001 000000000000000‚0‚ D0  *†H†÷ 0=10UHash Collision CA10U Eindhoven1 0 UNL0 050101000001Z 150101000001Z0=10UHash Collision CA10U Eindhoven1 0 UNL0‚"0  *†H†÷ ‚0‚ ‚ÊpúÄ@û´ŽäZ©wu‘tYÒh¹0F[¡ÜµJ(*(H·xºàgp Íd,°W »‰Vß# £Æåß®ïSؽÁdôËå.GªXnÿó²Ÿ ½B9Ldcwï=â÷¾›b™7Eh¹Qj2ñ{Ô¤ê;¤r=/¡ ò4B ùP@ÓÎ í_`Û &FŸ+Ÿb:a€3–Ÿ÷¬k’¤”Á'¦y³«·!Hd7T-ÆÐ]§¶ÐYÎG ³„I7HY•¡èó4ÏÊ1Ö¤ü¤‡W<šBjPƒo•YºM·jh`•¹¸dÞÖ½íSEÛì8@Û¬K ºÌ Åu<(…ôSýR'@C Q£ 00U0ÿ0 U0  *†H†÷ ‚>3ªc‹=jñÕ64@ŠÁSäíŠI¯É ,Ͼ{×ôDF5K¹¹°Œbm[ rümåxšÛ¡Ð½Ù¿$óÛ"`¦ yBV†¥\‘=nGÏþ\‘Ú„T(dS*;XßRš®&¯)]mçú"¤Xû?/ˆ9ŒøId· !Ðß\ëQ¶ì»¡cm-o¢xí=dmð“Þ¶¡à…ÛE(¬³áúDOCñÇÖétÁ_E‘œ‚¡îϽó¢0t°ÓDC`°ªá9%<úL×îÅ$Ÿo¦ ƒõ:!Ö·Q;ž .°õɦé'Ôë…ÇNpgz•k‰Ê3ž×™libtasn1-4.16.0/tests/setof.asn0000644000000000000000000000015613447472162013207 00000000000000TEST {} DEFINITIONS IMPLICIT TAGS ::= BEGIN Seq ::= SEQUENCE { val OCTET STRING } Set ::= SET OF Seq END libtasn1-4.16.0/tests/choice.asn0000644000000000000000000000044113246341643013312 00000000000000TEST {} DEFINITIONS IMPLICIT TAGS ::= BEGIN Choice2 ::= CHOICE { oct1 OCTET STRING, int1 [3] INTEGER, oct2 OCTET STRING } Choice1 ::= CHOICE { int4 [0] INTEGER, choice2 Choice2, int5 [1] INTEGER } Choice0 ::= CHOICE { int6 [0] INTEGER, choice1 Choice1, int7 [1] INTEGER } END libtasn1-4.16.0/tests/ocsp.der0000644000000000000000000000024313246341643013015 000000000000000 ¢¼TZŠ<Å„º óZ2kn®¯š¸20141114184518Z0u0s0K0 +Ù¨G÷òô°ì_Áså%Âb'Aß;;˸¢Á3’¨Ìå}ç™' ø(Á†½³x,˜ÆØz[€20141114000000Z 20141121000000Zlibtasn1-4.16.0/tests/copynode.c0000644000000000000000000001321113447472162013344 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /*****************************************************/ /* File: Test_tree.c */ /* Description: Test sequences for these functions: */ /* asn1_visit_tree, */ /* asn1_create_element, */ /* asn1_delete_structure, */ /* asn1_write_value, */ /* asn1_read_value, */ /*****************************************************/ #include #include #include #include "libtasn1.h" int main (int argc, char *argv[]) { int result; char buffer[5 * 1024]; char buffer2[5 * 1024]; asn1_node definitions = NULL; asn1_node asn1_element = NULL, cpy_node = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; FILE *out, *fd; int start, end; ssize_t size; int size2; const char *treefile = getenv ("ASN1PKIX"); const char *derfile = getenv ("ASN1CRLDER"); int verbose = 0; if (argc > 1) verbose = 1; if (!treefile) treefile = "pkix.asn"; if (!derfile) derfile = "crl.der"; if (verbose) { printf ("\n\n/****************************************/\n"); printf ("/* Test sequence : Test_indefinite */\n"); printf ("/****************************************/\n\n"); printf ("ASN1TREE: %s\n", treefile); } /* Check version */ if (asn1_check_version ("0.3.3") == NULL) printf ("\nLibrary version check ERROR:\n actual version: %s\n\n", asn1_check_version (NULL)); result = asn1_parser2tree (treefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } out = stdout; fd = fopen (derfile, "rb"); if (fd == NULL) { printf ("Cannot read file %s\n", derfile); exit (1); } size = fread (buffer, 1, sizeof (buffer), fd); if (size <= 0) { printf ("Cannot read from file %s\n", derfile); exit (1); } fclose (fd); result = asn1_create_element (definitions, "PKIX1.CertificateList", &asn1_element); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot create CRL element\n"); exit (1); } result = asn1_der_decoding (&asn1_element, buffer, size, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot decode DER data (size %ld)\n", (long) size); exit (1); } /* test asn1_copy_node */ result = asn1_create_element (definitions, "PKIX1.CertificateList", &cpy_node); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot create CRL element\n"); exit (1); } result = asn1_copy_node(cpy_node, "", asn1_element, ""); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot copy node\n"); exit (1); } /* test whether the copied node encodes the same */ size2 = sizeof(buffer2); result = asn1_der_coding (cpy_node, "", buffer2, &size2, NULL); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot encode data (size %ld)\n", (long) size); exit (1); } if (size2 != size || memcmp(buffer, buffer2, size) != 0) { printf("DER encoded data differ!\n"); exit(1); } asn1_delete_structure (&cpy_node); /* Test asn1_dup_node */ cpy_node = asn1_dup_node(asn1_element, ""); if (cpy_node == NULL) { printf ("Cannot copy node (dup_node)\n"); exit (1); } /* test whether the copied node encodes the same */ size2 = sizeof(buffer2); result = asn1_der_coding (cpy_node, "", buffer2, &size2, NULL); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot encode data (size %ld)\n", (long) size); exit (1); } if (size2 != size || memcmp(buffer, buffer2, size) != 0) { printf("DER encoded data differ!\n"); exit(1); } result = asn1_der_decoding_startEnd (asn1_element, buffer, size, "tbsCertList.issuer", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End\n"); exit (1); } if (start != 24 && end != 291) { printf("Error in start and end values for issuer. Have: %d..%d\n", start, end); exit(1); } result = asn1_der_decoding_startEnd (asn1_element, buffer, size, "signature", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End\n"); exit (1); } if (start != 372 && end != 503) { printf("Error in start and end values for signature. Have: %d..%d\n", start, end); exit(1); } /* Clear the definition structures */ asn1_delete_structure (&asn1_element); asn1_delete_structure (&cpy_node); asn1_delete_structure (&definitions); if (out != stdout) fclose (out); exit (0); } libtasn1-4.16.0/tests/threadsafety0000755000000000000000000001122313246341643013766 00000000000000#!/bin/sh # Copyright (C) 2004-2014 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . FILES="$@" FILES=${FILES:-$THREADSAFETY_FILES} EGREP=${EGREP:-egrep} if test -z "$FILES"; then echo "Usage: $0 [FILE...]" exit 1 fi UNSAFE="" # Thread unsafe functions according to latest POSIX, see: # http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_01 UNSAFE="$UNSAFE asctime" UNSAFE="$UNSAFE basename" UNSAFE="$UNSAFE catgets" UNSAFE="$UNSAFE crypt" UNSAFE="$UNSAFE ctime" UNSAFE="$UNSAFE dbm_clearerr" UNSAFE="$UNSAFE dbm_close" UNSAFE="$UNSAFE dbm_delete" UNSAFE="$UNSAFE dbm_error" UNSAFE="$UNSAFE dbm_fetch" UNSAFE="$UNSAFE dbm_firstkey" UNSAFE="$UNSAFE dbm_nextkey" UNSAFE="$UNSAFE dbm_open" UNSAFE="$UNSAFE dbm_store" UNSAFE="$UNSAFE dirname" UNSAFE="$UNSAFE dlerror" UNSAFE="$UNSAFE drand48" UNSAFE="$UNSAFE encrypt" UNSAFE="$UNSAFE endgrent" UNSAFE="$UNSAFE endpwent" UNSAFE="$UNSAFE endutxent" UNSAFE="$UNSAFE ftw" UNSAFE="$UNSAFE getc_unlocked" UNSAFE="$UNSAFE getchar_unlocked" UNSAFE="$UNSAFE getdate" UNSAFE="$UNSAFE getenv" UNSAFE="$UNSAFE getgrent" UNSAFE="$UNSAFE getgrgid" UNSAFE="$UNSAFE getgrnam" UNSAFE="$UNSAFE gethostent" UNSAFE="$UNSAFE getlogin" UNSAFE="$UNSAFE getnetbyaddr" UNSAFE="$UNSAFE getnetbyname" UNSAFE="$UNSAFE getnetent" UNSAFE="$UNSAFE getopt" UNSAFE="$UNSAFE getprotobyname" UNSAFE="$UNSAFE getprotobynumber" UNSAFE="$UNSAFE getprotoent" UNSAFE="$UNSAFE getpwent" UNSAFE="$UNSAFE getpwnam" UNSAFE="$UNSAFE getpwuid" UNSAFE="$UNSAFE getservbyname" UNSAFE="$UNSAFE getservbyport" UNSAFE="$UNSAFE getservent" UNSAFE="$UNSAFE getutxent" UNSAFE="$UNSAFE getutxid" UNSAFE="$UNSAFE getutxline" UNSAFE="$UNSAFE gmtime" UNSAFE="$UNSAFE hcreate" UNSAFE="$UNSAFE hdestroy" UNSAFE="$UNSAFE hsearch" UNSAFE="$UNSAFE inet_ntoa" UNSAFE="$UNSAFE l64a" UNSAFE="$UNSAFE lgamma" UNSAFE="$UNSAFE lgammaf" UNSAFE="$UNSAFE lgammal" UNSAFE="$UNSAFE localeconv" UNSAFE="$UNSAFE localtime" UNSAFE="$UNSAFE lrand48" UNSAFE="$UNSAFE mrand48" UNSAFE="$UNSAFE nftw" UNSAFE="$UNSAFE nl_langinfo" UNSAFE="$UNSAFE ptsname" UNSAFE="$UNSAFE putc_unlocked" UNSAFE="$UNSAFE putchar_unlocked" UNSAFE="$UNSAFE putenv" UNSAFE="$UNSAFE pututxline" UNSAFE="$UNSAFE rand" UNSAFE="$UNSAFE readdir" UNSAFE="$UNSAFE setenv" UNSAFE="$UNSAFE setgrent" UNSAFE="$UNSAFE setkey" UNSAFE="$UNSAFE setpwent" UNSAFE="$UNSAFE setutxent" UNSAFE="$UNSAFE strerror" UNSAFE="$UNSAFE strsignal" UNSAFE="$UNSAFE strtok" UNSAFE="$UNSAFE system" UNSAFE="$UNSAFE ttyname" UNSAFE="$UNSAFE unsetenv" UNSAFE="$UNSAFE wcstombs" UNSAFE="$UNSAFE wctomb" # Additional functions that aren't thread-safe if passed a NULL argument UNSAFE="$UNSAFE ctermid" UNSAFE="$UNSAFE tmpname" UNSAFE="$UNSAFE wcrtomb" UNSAFE="$UNSAFE wcsrtombs" # Legacy functions removed between issue 6 and 7, see: # http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html#tag_02_09_01 UNSAFE="$UNSAFE ecvt" UNSAFE="$UNSAFE fcvt" UNSAFE="$UNSAFE gcvt" UNSAFE="$UNSAFE gethostbyaddr" UNSAFE="$UNSAFE gethostbyname" # Other (potentially) thread unsafe functions, see: # http://blog.josefsson.org/2009/06/23/thread-safe-functions/ UNSAFE="$UNSAFE erand48" UNSAFE="$UNSAFE ether_aton" UNSAFE="$UNSAFE ether_ntoa" UNSAFE="$UNSAFE fgetgrent" UNSAFE="$UNSAFE fgetpwent" UNSAFE="$UNSAFE fgetspent" UNSAFE="$UNSAFE getaliasbyname" UNSAFE="$UNSAFE getaliasent" UNSAFE="$UNSAFE gethostbyname2" UNSAFE="$UNSAFE getmntent" UNSAFE="$UNSAFE getnetgrent" UNSAFE="$UNSAFE getrpcbyname" UNSAFE="$UNSAFE getrpcbynumber" UNSAFE="$UNSAFE getrpcent" UNSAFE="$UNSAFE getspent" UNSAFE="$UNSAFE getspnam" UNSAFE="$UNSAFE getutent" UNSAFE="$UNSAFE getutid" UNSAFE="$UNSAFE getutline" UNSAFE="$UNSAFE initstate" UNSAFE="$UNSAFE jrand48" UNSAFE="$UNSAFE lcong48" UNSAFE="$UNSAFE nrand48" UNSAFE="$UNSAFE qecvt" UNSAFE="$UNSAFE qfcvt" UNSAFE="$UNSAFE random" UNSAFE="$UNSAFE seed48" UNSAFE="$UNSAFE setstate" UNSAFE="$UNSAFE sgetspent" UNSAFE="$UNSAFE srand48" UNSAFE="$UNSAFE srandom" set -- $UNSAFE cmd="-e [^.>=_0-9a-z]($1" shift while test $# != 0; do cmd="${cmd}|$1" shift done cmd="${cmd})[^.>=_0-9a-z]*\(" if $EGREP $cmd $FILES; then exit 1 fi exit 0 libtasn1-4.16.0/tests/setof.c0000644000000000000000000001313513447472162012651 00000000000000/* * Copyright (C) 2002-2018 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /****************************************************************/ /* File: Test_setof.c */ /* Description: Test writing of SET OF values and DER encoding. */ /****************************************************************/ #include #include #include #include #include "libtasn1.h" static unsigned char expected_der[] = { 0x31, 0x40, 0x30, 0x03, 0x04, 0x01, 0x01, 0x30, 0x03, 0x04, 0x01, 0x05, 0x30, 0x04, 0x04, 0x02, 0x00, 0x02, 0x30, 0x06, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x30, 0x06, 0x04, 0x04, 0x00, 0x00, 0x00, 0x02, 0x30, 0x06, 0x04, 0x04, 0x00, 0x01, 0x00, 0x00, 0x30, 0x06, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00, 0x30, 0x06, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00 }; static unsigned char data[1024]; int data_size = sizeof (data); int main (int argc, char *argv[]) { int result, verbose = 0; asn1_node definitions = NULL; asn1_node asn1_element = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; const char *treefile = getenv ("ASN1SETOF"); unsigned i; if (argc > 1) verbose = 1; if (!treefile) treefile = "setof.asn"; if (verbose != 0) { printf ("\n\n/****************************************/\n"); printf ("/* Test sequence : coding-decoding */\n"); printf ("/****************************************/\n\n"); } /* Check version */ if (asn1_check_version ("0.3.3") == NULL) printf ("\nLibrary version check ERROR:\n actual version: %s\n\n", asn1_check_version (NULL)); result = asn1_parser2tree (treefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } result = asn1_create_element (definitions, "TEST.Set", &asn1_element); if (result != ASN1_SUCCESS) { fprintf (stderr, "asn1_create_element(): "); asn1_perror (result); exit (1); } result = asn1_write_value (asn1_element, "", "NEW", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "?LAST.val", "\x00\x02", 2); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "", "NEW", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "?LAST.val", "\x00\x01\x00\x00", 4); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "", "NEW", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "?LAST.val", "\x00\x00\x00\x00", 4); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "", "NEW", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "?LAST.val", "\x00\x00\x00\x02", 4); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "", "NEW", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "?LAST.val", "\x00\x00\x00\x01", 4); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "", "NEW", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "?LAST.val", "\x01\x00\x00\x00", 4); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "", "NEW", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "?LAST.val", "\x01\x01\x00\x00", 4); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "", "NEW", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "?LAST.val", "\x05", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "", "NEW", 1); assert(result == ASN1_SUCCESS); result = asn1_write_value (asn1_element, "?LAST.val", "\x01", 1); assert(result == ASN1_SUCCESS); /* Clear the definition structures */ result = asn1_der_coding (asn1_element, "", data, &data_size, NULL); if (result != ASN1_SUCCESS) { fprintf (stderr, "Encoding error.\n"); asn1_perror (result); exit (1); } asn1_delete_structure (&asn1_element); asn1_delete_structure (&definitions); if (data_size != sizeof(expected_der) || memcmp(data, expected_der, data_size) != 0) { fprintf(stderr, "encoded data differ to expected [%d - %d]!\n", data_size, (int)sizeof(expected_der)); printf("static unsigned char got[] = {\n"); for (i=0;i<(unsigned)data_size;i++) { printf("0x%.2x, ", (unsigned)data[i]); if ((i+1) % 8 == 0) printf("\n"); } printf("};\n"); printf("static unsigned char expected[] = {\n"); for (i=0;i<(unsigned)sizeof(expected_der);i++) { printf("0x%.2x, ", (unsigned)expected_der[i]); if ((i+1) % 8 == 0) printf("\n"); } printf("};\n"); exit(1); } if (verbose) printf ("Success\n"); exit (0); } libtasn1-4.16.0/tests/Test_strings.c0000644000000000000000000001074413447472162014224 00000000000000/* * Copyright (C) 2012-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Written by Simon Josefsson * */ #include #include #include #include "libtasn1.h" struct tv { unsigned int etype; unsigned int str_len; const void *str; unsigned int der_len; const void *der; }; static const struct tv tv[] = { {ASN1_ETYPE_IA5_STRING, 20, "\x63\x73\x63\x61\x40\x70\x61\x73\x73\x70\x6f\x72\x74\x2e\x67\x6f\x76\x2e\x67\x72", 22, "\x16\x14\x63\x73\x63\x61\x40\x70\x61\x73\x73\x70\x6f\x72\x74\x2e\x67\x6f\x76\x2e\x67\x72"}, {ASN1_ETYPE_PRINTABLE_STRING, 5, "\x4e\x69\x6b\x6f\x73", 7, "\x13\x05\x4e\x69\x6b\x6f\x73"}, {ASN1_ETYPE_UTF8_STRING, 12, "Αττική", 14, "\x0c\x0c\xce\x91\xcf\x84\xcf\x84\xce\xb9\xce\xba\xce\xae"}, {ASN1_ETYPE_TELETEX_STRING, 15, "\x53\x69\x6d\x6f\x6e\x20\x4a\x6f\x73\x65\x66\x73\x73\x6f\x6e", 17, "\x14\x0f\x53\x69\x6d\x6f\x6e\x20\x4a\x6f\x73\x65\x66\x73\x73\x6f\x6e"}, {ASN1_ETYPE_OCTET_STRING, 36, "\x30\x22\x80\x0F\x32\x30\x31\x31\x30\x38\x32\x31\x30\x38\x30\x30\x30\x36\x5A\x81\x0F\x32\x30\x31\x31\x30\x38\x32\x33\x32\x30\x35\x39\x35\x39\x5A", 38, "\x04\x24\x30\x22\x80\x0F\x32\x30\x31\x31\x30\x38\x32\x31\x30\x38\x30\x30\x30\x36\x5A\x81\x0F\x32\x30\x31\x31\x30\x38\x32\x33\x32\x30\x35\x39\x35\x39\x5A"} }; #define SSTR(x) sizeof(x)-1,x static const struct tv ber[] = { {ASN1_ETYPE_OCTET_STRING, SSTR("\xa0\xa0"), SSTR("\x24\x80\x04\x82\x00\x02\xa0\xa0\x00\x00")}, {ASN1_ETYPE_OCTET_STRING, SSTR("\xa0\xa0\xb0\xb0\xb0"), SSTR("\x24\x80\x04\x82\x00\x02\xa0\xa0\x04\x82\x00\x03\xb0\xb0\xb0\x00\x00")}, {ASN1_ETYPE_OCTET_STRING, SSTR("\xa0\xa0\xb0\xb0\xb0\xa1\xa1"), SSTR("\x24\x80\x04\x82\x00\x02\xa0\xa0\x04\x82\x00\x03\xb0\xb0\xb0\x24\x80\x04\x82\x00\x02\xa1\xa1\x00\x00\x00\x00")}, {ASN1_ETYPE_OCTET_STRING, SSTR("\xa0\xa0\xb0\xb0\xb0\xa1\xa1\xc1"), SSTR("\x24\x80\x04\x82\x00\x02\xa0\xa0\x04\x82\x00\x03\xb0\xb0\xb0\x24\x80\x04\x82\x00\x02\xa1\xa1\x04\x82\x00\x01\xc1\x00\x00\x00\x00")}, }; int main (int argc, char *argv[]) { int ret; unsigned char tl[ASN1_MAX_TL_SIZE]; unsigned int tl_len, der_len, str_len; const unsigned char *str; unsigned char *b; unsigned int i; /* Dummy test */ for (i = 0; i < sizeof (tv) / sizeof (tv[0]); i++) { /* Encode */ tl_len = sizeof (tl); ret = asn1_encode_simple_der (tv[i].etype, tv[i].str, tv[i].str_len, tl, &tl_len); if (ret != ASN1_SUCCESS) { fprintf (stderr, "Encoding error in %u: %s\n", i, asn1_strerror (ret)); return 1; } der_len = tl_len + tv[i].str_len; if (der_len != tv[i].der_len || memcmp (tl, tv[i].der, tl_len) != 0) { fprintf (stderr, "DER encoding differs in %u! (size: %u, expected: %u)\n", i, der_len, tv[i].der_len); return 1; } /* decoding */ ret = asn1_decode_simple_der (tv[i].etype, tv[i].der, tv[i].der_len, &str, &str_len); if (ret != ASN1_SUCCESS) { fprintf (stderr, "Decoding error in %u: %s\n", i, asn1_strerror (ret)); return 1; } if (str_len != tv[i].str_len || memcmp (str, tv[i].str, str_len) != 0) { fprintf (stderr, "DER decoded data differ in %u! (size: %u, expected: %u)\n", i, der_len, tv[i].str_len); return 1; } } /* BER decoding */ for (i = 0; i < sizeof (ber) / sizeof (ber[0]); i++) { /* decoding */ ret = asn1_decode_simple_ber (ber[i].etype, ber[i].der, ber[i].der_len, &b, &str_len, NULL); if (ret != ASN1_SUCCESS) { fprintf (stderr, "BER decoding error in %u: %s\n", i, asn1_strerror (ret)); return 1; } if (str_len != ber[i].str_len || memcmp (b, ber[i].str, str_len) != 0) { fprintf (stderr, "BER decoded data differ in %u! (size: %u, expected: %u)\n", i, str_len, ber[i].str_len); return 1; } free(b); } return 0; } libtasn1-4.16.0/tests/CVE-2018-1000654-1_asn1_tab.h0000644000000000000000000000155513603745137015270 00000000000000#if HAVE_CONFIG_H # include "config.h" #endif #include const asn1_static_node CVE_2018_1000654_1_asn1_tab[] = { { "TEST_TREE", 536875024, NULL }, { NULL, 1610612748, NULL }, { "iso", 1073741825, "1"}, { "identified-organization", 1073741825, "3"}, { "dod", 1073741825, "6"}, { "internet", 1073741825, "1"}, { "security", 1073741825, "5"}, { "mechanisms", 1073741825, "5"}, { "pkix", 1073741825, "7"}, { "id-mod", 1073741825, "0"}, { "id-pkix1-implicit-88", 1, "2"}, { "id-xnyTest", 1879048204, NULL }, { NULL, 1073741825, "id-ix"}, { NULL, 1073741825, "29"}, { NULL, 1, "1"}, { "id-ix", 1880096780, "OBJECR"}, { NULL, 1073741825, "id-ix"}, { NULL, 1073741825, "29"}, { NULL, 1, "2"}, { "id-xnyTest", 805306380, NULL }, { NULL, 1073741825, "id-ix"}, { NULL, 1073741825, "29"}, { NULL, 1, "1"}, { NULL, 0, NULL } }; libtasn1-4.16.0/tests/CVE-2018-1000654.c0000644000000000000000000000362213514140427013342 00000000000000/* * Copyright (C) 2002-2018 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /****************************************************************/ /* Description: reproducer for CVE-2018-1000654 */ /****************************************************************/ #include #include #include #include "CVE-2018-1000654-1_asn1_tab.h" #include "CVE-2018-1000654-2_asn1_tab.h" int main (int argc, char *argv[]) { int result, verbose = 0; asn1_node definitions = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; if (argc > 1) verbose = 1; printf("Test 1\n"); result = asn1_array2tree (CVE_2018_1000654_1_asn1_tab, &definitions, errorDescription); if (result != ASN1_RECURSION) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } asn1_delete_structure (&definitions); printf("Test 2\n"); result = asn1_array2tree (CVE_2018_1000654_2_asn1_tab, &definitions, errorDescription); if (result != ASN1_RECURSION) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } asn1_delete_structure (&definitions); if (verbose) printf ("Success\n"); exit (0); } libtasn1-4.16.0/tests/invalid-assignments1.txt0000644000000000000000000000021513246341643016155 00000000000000dp ?CIX1-V÷÷Kçrú÷÷÷alxeKIX1ãããi‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰g-VãþãããããKIX1.ããããããIsÿg-V÷÷Kçr÷÷÷÷-Vlibtasn1-4.16.0/tests/decoding0000755000000000000000000000304213246341643013057 00000000000000#!/bin/sh # Copyright (C) 2015 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . srcdir="${srcdir:-.}" if ! test -z "${VALGRIND}";then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=7 --leak-check=no" fi ASN1DECODING="${ASN1DECODING:-../src/asn1Decoding$EXEEXT}" ASN1PKIX="${ASN1PKIX:-pkix.asn}" $VALGRIND $ASN1DECODING $ASN1PKIX ${srcdir}/TestCertOctetOverflow.der PKIX1.Certificate if test $? != 1;then echo "Decoding failed" exit 1 fi # test decoding of certificate with invalid time field $VALGRIND $ASN1DECODING -s $ASN1PKIX ${srcdir}/cert-invalid-time.der PKIX1.Certificate if test $? != 1;then echo "Decoding with invalid time succeeded when not expected" exit 1 fi # test decoding of certificate with invalid time field $VALGRIND $ASN1DECODING -t $ASN1PKIX ${srcdir}/cert-invalid-time.der PKIX1.Certificate if test $? != 0;then echo "Decoding with invalid time failed when not expected" exit 1 fi exit 0 libtasn1-4.16.0/tests/TestIndef2.p120000644000000000000000000000276613246341643013664 000000000000000‚ò0€ *†H†÷  €‚©0‚¥0€ *†H†÷  €0‚”0‚ *†H†÷ 0 *†H†÷  0Óx›ŸPr€‚`ú¶Êœs¢°#NÌé‡ú¯°Õ)¤XÝfÐÇ >?Ú¾iÜy%#^Œ"S,Îs~¢ê2¢Ú »í«t‘»ý7³K¤…)=?¨ãVޔЀ *#2—úY Ã$és³J2)&QýM’~” ‰bææ1!Ü8Zÿ©,*ÅÚq›Ô( ÏB?eÎ÷6‘$ÉÝKYÈ~Tœd`åùM¶n)]VZÔAAŸ—g€‘´«ö•¥ Ö"±¤0@îze_—’Ð…ïA'u’Àóï>\¹ùxNU ¦¿B°£ÿ%`î³_R‘?Ÿy¯Ä™€#F豸Sc¢î§ÇÓ‘€² =­$´ (I¨+¼G©Ê°±É%É%¥^üƲÃõ3P};ÓÀ‚)O¼7Ûm¸´vU]{ƒ÷è@©ÂH¸©¯²ò«Bl÷ÍÒ"`ñ.Ki.ñ·¬l‡m“­Ï¿—MÀªP*FbسgóåhQ¯M¢¸ Gô²T¨Y#S¤Î¿7¡Í¿¶Øµ:ªH½äNE¦ÌqÐAäÎ÷º»~h£v—ŸÌ%»õBYc6¿›¢ž!»ctN%ØàY¶ÁédƒTu$Yú¿ÍH‚Tü™ìäô . |B¸ù¯Æáý¹)d• Pnû’>GáçyF¹[½4YPhÝ­Øna·4³å5V’‹gÌ}>Kõ1‰"X0×ùˆóp–Ç(ûoŠcLp“°ã½Íë?®ñ‚9¢”®ã[õ¢–¦-’¥ÇfV=%8V??["ö$SmRäNKȸ·¥âŒzZ‹Mˆn7^u=†p±“”ÜXE|TáäÝá 2kÛîlÒl·ó! )EàÀ|˱ٞ›?8…Ë –wݹ˜6,i6ªßŵá2æù9 HUØ£)Ͱ_ÄGÉm9u$-q!ü\ng‰ü9÷‹z%Ç9¬½½ø¤åJ¶¡§hNéñ,Ø®º7ßÙ™Mңʳ³ör„QÏ@«M˜Ìîù^î<Æì+&óÕ¿ ïs(”:{qêa<œÄ“`^ž‘åk„L|@ÄŠ÷Ãæ±<‹õÖ»K˜Ì”ägE8ÞÀ€£H4ÿªc±’KøbérŸJ—i÷¥³rõÊWAâ–ü% (Q`+” 0€ *†H†÷  €‚ã0‚ß0‚Û *†H†÷   ‚v0‚r0 *†H†÷  0KRÁ*ÖΟh‚P2b™8ô("µ‡F…No²*JFüRåÔÏ ¤fKZ Ä¥L7œFt¾/1ïŠDx+¹0Igú¹ÐÆ-!TC1Y‡e…—ió¦ªÖ"lôÉ/éÇ7ÏéˆC%‹¥‘ñ½6qíx…:ï/ ño*‹D{_‹ e,«úÖ($‰0ˆ™ ïZ’ê¹í*éïc@çkË8oá€A !‚:H–,ƒÝh‡R¹Ÿw…+ÌG˜û”=̵¦(~¬Ý«âƒ‰…K,F+(¾†¯Ú#íïG³Š<¨÷Z ÒÒ¼0‚ ÇÒ©QxIl¶W¸K•«œpÌ})6‰_bÈFh,Ÿ­šV\lqÜåµc¬S èt ©ŸsɨI…„ÂÎÍFð‹F/5ÁNb]~þ<WFÀfjбñwúpï/1cÕPê÷ƒmiABªz¶ðé?ÅIÊa÷2â²8É1R0# *†H†÷  1œ7 Jœú$Ï2K𮺚0+ *†H†÷  1My Certificate0-0!0 +|½ðœw2Ùe²Hí½˜FÅä)O:³ÝŠ’libtasn1-4.16.0/tests/Test_encoding.asn0000644000000000000000000000207213246341643014647 00000000000000-- -- File used in the test sequence Test_encoding. -- TEST_TREE { } DEFINITIONS IMPLICIT TAGS ::= BEGIN Koko ::= SEQUENCE { seqint SEQUENCE OF INTEGER, int INTEGER, a [1] OCTET STRING, b [10] OCTET STRING, c [100] OCTET STRING, exp [3] EXPLICIT OCTET STRING OPTIONAL, str OCTET STRING } END -- Copyright (C) 2002-2014 Free Software Foundation, Inc. -- -- This file is part of LIBTASN1. -- -- 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 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . libtasn1-4.16.0/tests/ocsp-basic-response.c0000644000000000000000000000675713447472162015424 00000000000000/* * Copyright (C) 2016 Red Hat, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include int main (int argc, char** argv) { int result = 0, len; asn1_node definitions = NULL, node1 = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; const char *choicefile = getenv ("ASN1CHOICE_OCSP"); const char *datafile = getenv ("ASN1_RESPONSE_OCSP_DATA"); FILE *fp; char data[1024]; int data_size = sizeof (data); unsigned etype; if (!choicefile) choicefile = "pkix.asn"; if (!datafile) datafile = "ocsp-basic-response.der"; result = asn1_parser2tree (choicefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { fprintf (stderr, "error in %d: %s\n", __LINE__, errorDescription); exit (1); } result = asn1_create_element (definitions, "PKIX1.BasicOCSPResponse", &node1); if (result != ASN1_SUCCESS) { fprintf (stderr, "error in %d\n", __LINE__); exit (1); } fp = fopen(datafile, "rb"); if (fp == NULL) { fprintf (stderr, "error in %d\n", __LINE__); exit (1); } data_size = fread(data, 1, sizeof(data), fp); fclose(fp); result = asn1_der_decoding2 (&node1, data, &data_size, ASN1_DECODE_FLAG_STRICT_DER, errorDescription); if (result != ASN1_SUCCESS) { fprintf (stderr, "error in %d: decoding: %s\n", __LINE__, errorDescription); exit (1); } len = sizeof(data); result = asn1_read_value(node1, "tbsResponseData.responderID", data, &len); if (result != ASN1_SUCCESS) { fprintf (stderr, "error in %d: %s\n", __LINE__, errorDescription); exit (1); } if (strcmp(data, "byKey") != 0) { fprintf (stderr, "error in %d: %s\n", __LINE__, data); exit (1); } len = 0; result = asn1_read_value_type(node1, "tbsResponseData.responderID.byKey", NULL, &len, &etype); if (result != ASN1_MEM_ERROR) { fprintf (stderr, "error in %d: result is: %s\n", __LINE__, asn1_strerror(result)); exit (1); } if (etype != ASN1_ETYPE_OCTET_STRING) { fprintf (stderr, "error in %d: The type (%d) doesn't match octet string.\n", __LINE__, (int)etype); exit (1); } if (len != 20) { fprintf (stderr, "length doesn't match the expected (got: %d, should be: 20)\n", len); exit (1); } len = sizeof(data); result = asn1_read_value(node1, "tbsResponseData.responderID.byKey", data, &len); if (result != ASN1_SUCCESS) { fprintf (stderr, "error in %d: %s\n", __LINE__, errorDescription); exit (1); } if (memcmp(data, "\x50\xEA\x73\x89\xDB\x29\xFB\x10\x8F\x9E\xE5\x01\x20\xD4\xDE\x79\x99\x48\x83\xF7", len) != 0) { fprintf (stderr, "contents don't match\n"); exit (1); } asn1_delete_structure (&node1); asn1_delete_structure (&definitions); return 0; } libtasn1-4.16.0/tests/Test_parser.c0000644000000000000000000001556713520774070014032 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /*****************************************************/ /* File: Test_parser.c */ /* Description: Test sequences for these functions: */ /* asn1_parser_asn1, */ /*****************************************************/ #include #include #include #include "libtasn1.h" typedef struct { int lineNumber; const char *line; int errorNumber; const char *errorDescription; } test_type; const char *fileCorrectName; char fileErroredName[] = "Test_parser_ERROR.asn"; #define _FILE_ "Test_parser_ERROR.asn" test_type test_array[] = { /* Test DEFINITIONS syntax */ {5, "TEST_PARSER2 { } DEFINITIONS IMPLICIT TAGS ::= BEGIN int1 ::= INTEGER END", ASN1_SYNTAX_ERROR, _FILE_ ":6: Error: syntax error, unexpected IDENTIFIER, expecting $end near 'TEST_PARSER'"}, {6, "TEST_PARSER { }", ASN1_SUCCESS, ""}, /* Test ASN1_MAX_NAME_SIZE (128) */ {12, "a123456789012345678901234567890123456789012345678901234567890123 ::= INTEGER", ASN1_SUCCESS, ""}, {12, "a1234567890123456789012345678901234567890123456789012345678901234 ::= INTEGER", ASN1_NAME_TOO_LONG, _FILE_ ":12: name too long (more than 64 characters)"}, /* Test 'check identifier' function */ {12, "ident1 ::= ident2 ident2 ::= INTEGER", ASN1_SUCCESS, ""}, {12, "ident1 ::= ident2", ASN1_IDENTIFIER_NOT_FOUND, _FILE_ ":: identifier 'ident2' not found"}, {12, "obj1 OBJECT IDENTIFIER ::= {pkix 0 5 4} " "pkix OBJECT IDENTIFIER ::= {1 2}", ASN1_SUCCESS, ""}, {12, "obj1 OBJECT IDENTIFIER ::= {pkix 0 5 4}", ASN1_IDENTIFIER_NOT_FOUND, _FILE_ ":: identifier 'pkix' not found"}, /* Test INTEGER */ {14, "int1 INTEGER (-5..5),", ASN1_SUCCESS, ""}, {14, "int1 INTEGER OPTIONAL,", ASN1_SUCCESS, ""}, {14, "int1 INTEGER DEFAULT 1,", ASN1_SUCCESS, ""}, {14, "int1 INTEGER DEFAULT -1,", ASN1_SUCCESS, ""}, {14, "int1 INTEGER DEFAULT v1,", ASN1_SUCCESS, ""}, {14, "int1 [1] INTEGER,", ASN1_SUCCESS, ""}, {14, "int1 [1] EXPLICIT INTEGER,", ASN1_SUCCESS, ""}, {14, "int1 [1] IMPLICIT INTEGER,", ASN1_SUCCESS, ""}, {12, "Integer ::= [1] EXPLICIT INTEGER {v1(-1), v2(1)}", ASN1_SUCCESS, ""}, {12, "Integer ::= INTEGER {v1(0), v2}", ASN1_SYNTAX_ERROR, _FILE_ ":12: Error: syntax error, unexpected '}', expecting '(' near '}'"}, {12, "Integer ::= INTEGER {v1(0), 1}", ASN1_SYNTAX_ERROR, _FILE_ ":12: Error: syntax error, unexpected NUM, expecting IDENTIFIER or '(' near '1'"}, {12, "const1 INTEGER ::= -1", ASN1_SUCCESS, ""}, {12, "const1 INTEGER ::= 1", ASN1_SUCCESS, ""}, {12, "const1 INTEGER ::= v1", ASN1_SYNTAX_ERROR, _FILE_ ":12: Error: syntax error, unexpected IDENTIFIER, expecting NUM or '+' or '-' near 'v1'"}, {16, " generic generalstring", ASN1_IDENTIFIER_NOT_FOUND, _FILE_ ":: identifier 'generalstring' not found"}, /* Test: OID */ {20, " oid1 OBJECT IDENTIFIER DEFAULT Oid-type", ASN1_IDENTIFIER_NOT_FOUND, _FILE_ ":: identifier 'Oid-type' not found"}, {20, " oid1 OBJECT IDENTIFIER DEFAULT 1", ASN1_IDENTIFIER_NOT_FOUND, _FILE_ ":: identifier '1' not found"}, {20, " oid1 OBJECT IDENTIFIER DEFAULT", ASN1_SYNTAX_ERROR, _FILE_ ":21: Error: syntax error, unexpected '}' near '}'"}, {20, " oid1 OBJECT IDENTIFIER DEFAULT Oid-type1", ASN1_SUCCESS, ""}, {22, "KeyUsage ::= BIT STRING { xxx (0), enring UTF8String (SIZE (1..200)) }", ASN1_SYNTAX_ERROR, _FILE_":22: Error: syntax error, unexpected UTF8String, expecting '(' near 'UTF8String'"}, /* end */ {0} }; static int readLine (FILE * file, char *line) { int c; while (((c = fgetc (file)) != EOF) && (c != '\n')) { *line = c; line++; } *line = 0; return c; } static void createFile (int lineNumber, const char *line) { FILE *fileIn, *fileOut; char lineRead[1024]; int fileInLineNumber = 0; fileIn = fopen (fileCorrectName, "r"); fileOut = fopen (fileErroredName, "w"); while (readLine (fileIn, lineRead) != EOF) { fileInLineNumber++; if (fileInLineNumber == lineNumber) fprintf (fileOut, "%s\n", line); else fprintf (fileOut, "%s\n", lineRead); } fclose (fileOut); fclose (fileIn); } int main (int argc, char *argv[]) { int result; asn1_node definitions = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; test_type *test; int errorCounter = 0, testCounter = 0; int verbose = 0; if (argc > 1) verbose = 1; fileCorrectName = getenv ("ASN1PARSER"); if (!fileCorrectName) fileCorrectName = "Test_parser.asn"; if (verbose != 0) { printf ("\n\n/****************************************/\n"); printf ("/* Test sequence : Test_parser */\n"); printf ("/****************************************/\n\n"); printf ("ASN1PARSER: %s\n", fileCorrectName); } result = asn1_parser2tree (fileCorrectName, &definitions, errorDescription); if (result != ASN1_SUCCESS) { printf ("File '%s' not correct\n", fileCorrectName); asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } /* Only for Test */ /* asn1_visit_tree(stdout,definitions,"TEST_PARSER",ASN1_PRINT_ALL); */ /* Clear the definitions structures */ asn1_delete_structure (&definitions); test = test_array; while (test->lineNumber != 0) { testCounter++; createFile (test->lineNumber, test->line); result = asn1_parser2tree (fileErroredName, &definitions, errorDescription); asn1_delete_structure (&definitions); if ((result != test->errorNumber) || (strcmp (errorDescription, test->errorDescription))) { errorCounter++; printf ("ERROR N. %d:\n", errorCounter); printf (" Line %d - %s\n", test->lineNumber, test->line); printf (" Error expected: %s - %s\n", asn1_strerror (test->errorNumber), test->errorDescription); printf (" Error detected: %s - %s\n\n", asn1_strerror (result), errorDescription); exit (1); } test++; } if (verbose != 0) { printf ("Total tests : %d\n", testCounter); printf ("Total errors: %d\n", errorCounter); } if (errorCounter > 0) return 1; exit (0); } libtasn1-4.16.0/tests/crl.der0000644000000000000000000000077013246341643012636 000000000000000‚ô0‚_0  *†H†÷ 0‚10U VeriSign, Inc.10U VeriSign Trust Network1F0DU =www.verisign.com/repository/RPA Incorp. by Ref.,LIAB.LTD(c)9810U Persona Not Validated1&0$U Digital ID Class 1 - Netscape10USimon Josefsson1"0  *†H†÷  simon@josefsson.org 061227080234Z 070207080235Z0#0!.7ßF…zU ¦Ya…8 061227080234Z0  *†H†÷ =3_âv†G5ºêÔ9ù ¢ürà. * * Written by Simon Josefsson * */ #include #include #include #include "libtasn1.h" struct tv { int bitlen; const char *bitstr; int derlen; const char *der; }; static const struct tv tv[] = { {0, "", 2, "\x01\x00"}, {1, "\x00", 3, "\x02\x07\x00"}, {2, "\x00", 3, "\x02\x06\x00"}, {3, "\x00", 3, "\x02\x05\x00"}, {4, "\x00", 3, "\x02\x04\x00"}, {5, "\x00", 3, "\x02\x03\x00"}, {6, "\x00", 3, "\x02\x02\x00"}, {7, "\x00", 3, "\x02\x01\x00"}, {8, "\x00\x00", 3, "\x02\x00\x00"}, {9, "\x00\x00", 4, "\x03\x07\x00\x00"}, {10, "\x00\x00", 4, "\x03\x06\x00\x00"}, {11, "\x00\x00", 4, "\x03\x05\x00\x00"}, {12, "\x00\x00", 4, "\x03\x04\x00\x00"}, {13, "\x00\x00", 4, "\x03\x03\x00\x00"}, {14, "\x00\x00", 4, "\x03\x02\x00\x00"}, {15, "\x00\x00", 4, "\x03\x01\x00\x00"}, {16, "\x00\x00", 4, "\x03\x00\x00\x00"}, {17, "\x00\x00\x00", 5, "\x04\x07\x00\x00\x00"}, {18, "\x00\x00\x00", 5, "\x04\x06\x00\x00\x00"}, {19, "\x00\x00\x00", 5, "\x04\x05\x00\x00\x00"}, {1, "\xFF", 3, "\x02\x07\x80"}, {2, "\xFF", 3, "\x02\x06\xc0"}, {3, "\xFF", 3, "\x02\x05\xe0"}, {4, "\xFF", 3, "\x02\x04\xf0"}, {5, "\xFF", 3, "\x02\x03\xf8"}, {6, "\xFF", 3, "\x02\x02\xfc"}, {7, "\xFF", 3, "\x02\x01\xfe"}, {8, "\xFF\xFF", 3, "\x02\x00\xff"}, {9, "\xFF\xFF", 4, "\x03\x07\xff\x80"}, {10, "\xFF\xFF", 4, "\x03\x06\xff\xc0"}, {11, "\xFF\xFF", 4, "\x03\x05\xff\xe0"}, {12, "\xFF\xFF", 4, "\x03\x04\xff\xf0"}, {13, "\xFF\xFF", 4, "\x03\x03\xff\xf8"}, {14, "\xFF\xFF", 4, "\x03\x02\xff\xfc"}, {15, "\xFF\xFF", 4, "\x03\x01\xff\xfe"}, {16, "\xFF\xFF", 4, "\x03\x00\xff\xff"}, {17, "\xFF\xFF\xFF", 5, "\x04\x07\xff\xff\x80"}, {18, "\xFF\xFF\xFF", 5, "\x04\x06\xff\xff\xc0"}, {19, "\xFF\xFF\xFF", 5, "\x04\x05\xff\xff\xe0"}, }; int main (int argc, char *argv[]) { int result; unsigned char der[100]; unsigned char str[100]; int der_len = sizeof (der); int str_size = sizeof (str); int ret_len, bit_len; size_t i; /* Dummy test */ asn1_bit_der (NULL, 0, der, &der_len); result = asn1_get_bit_der (der, 0, &ret_len, str, str_size, &bit_len); if (result != ASN1_GENERIC_ERROR) { fprintf (stderr, "asn1_get_bit_der zero\n"); return 1; } /* Encode short strings with increasing bit lengths */ for (i = 0; i < sizeof (tv) / sizeof (tv[0]); i++) { /* Encode */ asn1_bit_der ((const unsigned char *) tv[i].bitstr, tv[i].bitlen, der, &der_len); #if 0 { size_t j; for (j = 0; j < der_len; j++) printf ("\\x%02x", der[j]); printf ("\n"); } #endif if (der_len != tv[i].derlen || memcmp (der, tv[i].der, der_len) != 0) { fprintf (stderr, "asn1_bit_der iter %lu\n", (unsigned long) i); return 1; } /* Decode it */ result = asn1_get_bit_der (der, der_len, &ret_len, str, str_size, &bit_len); if (result != ASN1_SUCCESS || ret_len != tv[i].derlen || bit_len != tv[i].bitlen) { fprintf (stderr, "asn1_get_bit_der iter %lu, err: %d\n", (unsigned long) i, result); return 1; } } /* Decode sample from "A Layman's Guide to a Subset of ASN.1, BER, and DER" section 5.4 "BIT STRING": "The BER encoding of the BIT STRING value "011011100101110111" can be any of the following, among others, depending on the choice of padding bits, the form of length octets [...]". */ /* 03 04 06 6e 5d c0 DER encoding */ memcpy (der, "\x04\x06\x6e\x5d\xc0", 5); der_len = 5; result = asn1_get_bit_der (der, der_len, &ret_len, str, str_size, &bit_len); if (result != ASN1_SUCCESS || ret_len != 5 || bit_len != 18 || memcmp (str, "\x6e\x5d\xc0", 3) != 0) { fprintf (stderr, "asn1_get_bit_der example\n"); return 1; } der_len = sizeof (der); asn1_bit_der (str, bit_len, der, &der_len); if (der_len != 5 || memcmp (der, "\x04\x06\x6e\x5d\xc0", 5) != 0) { fprintf (stderr, "asn1_bit_der example roundtrip\n"); return 1; } /* 03 04 06 6e 5d e0 padded with "100000" */ memcpy (der, "\x04\x06\x6e\x5d\xe0", 5); der_len = 5; result = asn1_get_bit_der (der, der_len, &ret_len, str, str_size, &bit_len); if (result != ASN1_SUCCESS || ret_len != 5 || bit_len != 18 || memcmp (str, "\x6e\x5d\xe0", 3) != 0) { fprintf (stderr, "asn1_get_bit_der example padded\n"); return 1; } der_len = sizeof (der); asn1_bit_der (str, bit_len, der, &der_len); if (der_len != 5 || memcmp (der, "\x04\x06\x6e\x5d\xc0", 5) != 0) { fprintf (stderr, "asn1_bit_der example roundtrip\n"); return 1; } /* 03 81 04 06 6e 5d c0 long form of length octets */ memcpy (der, "\x81\x04\x06\x6e\x5d\xc0", 6); der_len = 6; result = asn1_get_bit_der (der, der_len, &ret_len, str, str_size, &bit_len); if (result != ASN1_SUCCESS || ret_len != 6 || bit_len != 18 || memcmp (str, "\x6e\x5d\xc0", 3) != 0) { fprintf (stderr, "asn1_get_bit_der example long form\n"); return 1; } der_len = sizeof (der); asn1_bit_der (str, bit_len, der, &der_len); if (der_len != 5 || memcmp (der, "\x04\x06\x6e\x5d\xc0", 5) != 0) { fprintf (stderr, "asn1_bit_der example roundtrip\n"); return 1; } return 0; } libtasn1-4.16.0/tests/CVE-2018-1000654-2_asn1_tab.h0000644000000000000000000000173713603745137015273 00000000000000#if HAVE_CONFIG_H # include "config.h" #endif #include const asn1_static_node CVE_2018_1000654_2_asn1_tab[] = { { "TEST_TREE", 536875024, NULL }, { NULL, 1610612748, NULL }, { "iso", 1073741825, "1"}, { "identified-organization", 1073741825, "3"}, { "dod", 1073741825, "6"}, { "internet", 1073741825, "1"}, { "security", 1073741825, "5"}, { "mechanisms", 1073741825, "5"}, { "pkix", 1073741825, "7"}, { "id-mod", 1073741825, "0"}, { "id-pkix1-implicit-88", 1, "2"}, { "id-oneTest", 1879048204, NULL }, { NULL, 1073741825, "id-two"}, { NULL, 1073741825, "9"}, { NULL, 1, "1"}, { "id-two", 1879048204, NULL }, { NULL, 1073741825, "id-three"}, { NULL, 1073741825, "2"}, { NULL, 1, "2"}, { "id-three", 1879048204, NULL }, { NULL, 1073741825, "id-four"}, { NULL, 1073741825, "3"}, { NULL, 1, "3"}, { "id-four", 805306380, NULL }, { NULL, 1073741825, "id-two"}, { NULL, 1073741825, "3"}, { NULL, 1, "3"}, { NULL, 0, NULL } }; libtasn1-4.16.0/tests/Test_encdec.c0000644000000000000000000001160513447472162013751 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /*****************************************************/ /* File: Test_tree.c */ /* Description: Test sequences for these functions: */ /* asn1_visit_tree, */ /* asn1_create_element, */ /* asn1_delete_structure, */ /* asn1_write_value, */ /* asn1_read_value, */ /*****************************************************/ #include #include #include #include "libtasn1.h" int main (int argc, char *argv[]) { int result; char buffer[5 * 1024]; char buffer2[5 * 1024]; asn1_node definitions = NULL; asn1_node asn1_element = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; FILE *out, *fd; ssize_t size; int start, end; int size2; const char *treefile = getenv ("ASN1PKIX"); const char *derfile = getenv ("ASN1CRLDER"); int verbose = 0; if (argc > 1) verbose = 1; if (!treefile) treefile = "pkix.asn"; if (!derfile) derfile = "crl.der"; if (verbose) { printf ("\n\n/****************************************/\n"); printf ("/* Test sequence : Test_indefinite */\n"); printf ("/****************************************/\n\n"); printf ("ASN1TREE: %s\n", treefile); } /* Check version */ if (asn1_check_version ("0.3.3") == NULL) printf ("\nLibrary version check ERROR:\n actual version: %s\n\n", asn1_check_version (NULL)); result = asn1_parser2tree (treefile, &definitions, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("ErrorDescription = %s\n\n", errorDescription); exit (1); } out = stdout; fd = fopen (derfile, "rb"); if (fd == NULL) { printf ("Cannot read file %s\n", derfile); exit (1); } size = fread (buffer, 1, sizeof (buffer), fd); if (size <= 0) { printf ("Cannot read from file %s\n", derfile); exit (1); } fclose (fd); result = asn1_create_element (definitions, "PKIX1.CertificateList", &asn1_element); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot create CRL element\n"); exit (1); } result = asn1_der_decoding (&asn1_element, buffer, size, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot decode DER data (size %ld)\n", (long) size); exit (1); } result = asn1_der_decoding_startEnd (asn1_element, buffer, size, "tbsCertList", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End\n"); exit (1); } if (start != 4 && end != 358) { printf("Error in start and end values. Have: %d..%d\n", start, end); exit(1); } result = asn1_der_decoding_startEnd (asn1_element, buffer, size, "signature", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End\n"); exit (1); } if (start != 372 && end != 503) { printf("Error in start and end values for signature. Have: %d..%d\n", start, end); exit(1); } result = asn1_der_decoding_startEnd (asn1_element, buffer, size, "tbsCertList.revokedCertificates.?1.userCertificate", &start, &end); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot find start End\n"); exit (1); } if (start != 326 && end != 343) { printf("Error in start and end values for userCertificate. Have: %d..%d\n", start, end); exit(1); } size2 = sizeof(buffer2); result = asn1_der_coding (asn1_element, "", buffer2, &size2, NULL); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("Cannot encode data (size %ld)\n", (long) size); exit (1); } if (size2 != size || memcmp(buffer, buffer2, size) != 0) { printf("DER encoded data differ!\n"); exit(1); } /* Clear the definition structures */ asn1_delete_structure (&definitions); asn1_delete_structure (&asn1_element); if (out != stdout) fclose (out); exit (0); } libtasn1-4.16.0/tests/cert-invalid-time.der0000644000000000000000000000216013246341643015366 000000000000000‚l0‚T 0  *†H†÷ 0I1 0 UUS10U  iiordanov.com1"0 Uovirt.iiordanov.com.719750"140616221110+0000 190522221110Z0C1 0 UUS10U  iiordanov.com10Uovirt.iiordanov.com0‚"0  *†H†÷ ‚0‚ ‚ÓÌî T(° 9•q—ýkÜújO|º/{Ü‘ŠgÒÅ)ËpZ¤¬ÝÛnI9´ž›¥b N.ùŽrö±ÿY‡­D*¶VÝiû˜)kv8vÀþ ¸’ wžýŒ4ô/^t6pè uþ#T§€cÄG“2CíðzRuꈟçúl3†O³ý«èfå•x3ÐTz]sE>á—5|¯âܵ1zó]VèÐ?íaRôôIâ\bÖ†d’ à²ðOÐuN-xµãAÆo*!z;ßLòÖ kK×^²þg:Q^õÝ\¬ ™¤I¾¥Õ‡ž8%ÄfÂ*!€ø>tm£‚^0‚Z0Ut”Ø–É𔻘ðAíWtmcšÐ0‡+{0y0w+0†khttp://ovirt.iiordanov.com:80/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA0rU#k0i€HHjh"ÍúbþvÏ'ÍRCd¡M¤K0I1 0 UUS10U  iiordanov.com1"0 Uovirt.iiordanov.com.71975‚0 U00Uÿ 0 U%ÿ0++0  *†H†÷ ‚0ÿdê®þ´­ƒ8n0Õ{DÿõÞ™ìqUG¤Ôîíºý'¹U.Û)6*BÈöfût­(GÝ0ë2u¯ò«ùÞ9×Ê{#š)÷iCw‘Ψá¥~m"ë›"¡lèéßµ ɶËÜCyYqÜ]`s6ew¬@Í•qé›Õ0dmhˆAfìV]BÃQ7T§Uȼ'"c7¶ý¢’ý Ò1ß²!Ïù¬»Paâ°‘K°/N‹ö¦úÈ:½uö¿ÉsʱñužZFD¥**M D;PÊ™.Jsx Bàh÷a™ë·R¯1füÅ⸣™¥Þ_Ãë n”½³!€Y.libtasn1-4.16.0/tests/CVE-2018-1000654-2.asn0000644000000000000000000000055513514140427014042 00000000000000TEST_TREE {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)} DEFINITIONS IMPLICIT TAGS ::= BEGIN id-oneTest OBJECT IDENTIFIER ::= {id-two 9 1} id-two OBJECT IDENTIFIER ::= {id-three 2 2} id-three OBJECT IDENTIFIER ::= {id-four 3 3} id-four OBJECT IDENTIFIER ::= {id-two 3 3} END libtasn1-4.16.0/Makefile.am0000644000000000000000000001024113520774070012245 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc EXTRA_DIST = windows/asn1-parser/asn1-parser.vcproj \ windows/asn1-parser/config.h windows/libtasn1.ncb \ windows/libtasn1.sln windows/libtasn1.suo \ windows/gnulib/getopt.h windows/gnulib/gnulib.vcproj \ windows/libtasn1/libtasn1.vcproj \ windows/test-parser/test-parser.vcproj \ windows/test-tree/test-tree.vcproj windows/libtasn14win.mk \ CONTRIBUTING.md cfg.mk maint.mk AUTHORS NEWS ChangeLog \ THANKS LICENSE SUBDIRS = lib src fuzz tests if ENABLE_DOC SUBDIRS += doc examples endif include $(top_srcdir)/aminclude_static.am ACLOCAL_AMFLAGS = -I m4 -I m4-gl EXTRA_DIST += cfg.mk maint.mk .clcopying README.md ABIDW_COMMON = --no-show-locs --no-corpus-path ABIGNORE_FILE = "$(top_srcdir)/devel/libtasn1.abignore" LIBGNUTLS_ABI_LAST_FILE = "$(top_srcdir)/devel/libtasn1-latest-$$(uname -m).abi" abi-dump-versioned: lib/libtasn1.la @echo "**************************************************" @echo "Generating versioned ABI files of current libtasn1" @echo "**************************************************" @abidw lib/.libs/libtasn1.so $(ABIDW_COMMON) --suppressions $(ABIGNORE_FILE) --out-file "$(srcdir)/devel/libtasn1-$(VERSION)-$$(uname -m).abi" abi-dump-latest: lib/libtasn1.la @echo "****************************************" @echo "Generating ABI files of current libtasn1" @echo "****************************************" @abidw lib/.libs/libtasn1.so $(ABIDW_COMMON) --suppressions $(ABIGNORE_FILE) --out-file $(LIBGNUTLS_ABI_LAST_FILE) @rm -f "./devel/libtasn1-latest-$$(uname -m).tmp" abi-check-latest: lib/libtasn1.la @echo "Checking whether the latest ABI dump matches" @abidiff --suppressions $(ABIGNORE_FILE) lib/.libs/libtasn1.so $(LIBGNUTLS_ABI_LAST_FILE) --hd2 "$(srcdir)/lib/includes/"; if test $$? != 0;then \ echo "*********************************************************"; \ echo "libtasn1 ABI has changed; use 'make files-update' "; \ echo "and use 'git diff' to check correctness before committing"; \ echo "*********************************************************"; \ false; \ fi @echo "********************************" @echo "Current release matches ABI dump" @echo "********************************" ABICHECK_COMMON = --no-added-syms abi-check: lib/libtasn1.la @for file in $$(echo $(srcdir)/devel/libtasn1-*-$$(uname -m).abi);do \ echo "Comparing libtasn1 with $$file"; \ abidiff $${file} lib/.libs/libtasn1.so $(ABICHECK_COMMON) --suppressions $(ABIGNORE_FILE) --hd2 "$(srcdir)/lib/includes//"; \ if test $$? != 0;then \ echo "****************************************************************************"; \ echo "ABI check failed; If intentional add suppression in devel/libtasn1.abignore"; \ echo "****************************************************************************"; \ false; \ fi; \ done @echo "********************" @echo "ABI checks completed" @echo "********************" files-update: abi-dump-latest local-code-coverage-output: code-coverage-capture cat "GNU Libtasn1-$(VERSION)-coverage/index.html"|grep headerCovTableEntry|grep '%'|head -1|sed 's/^.*>\([0-9]\+\.[0-9]\+\s*%\)<.*$$/ coverage lines: \1/' || true clean-local: code-coverage-clean distclean-local: code-coverage-dist-clean dist-hook: if test -d "$(top_srcdir)/devel";then \ $(MAKE) -C $(top_srcdir) abi-check-latest; \ make -C doc/ compare-makefile; \ fi .PHONY: abi-check abi-dump-versioned abi-dump-latest libtasn1-4.16.0/src/0000755000000000000000000000000013615400132011050 500000000000000libtasn1-4.16.0/src/Makefile.am0000644000000000000000000000235013517123367013041 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CODE_COVERAGE_CFLAGS) AM_CPPFLAGS = -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes \ -I$(top_builddir)/lib/gl -I$(top_srcdir)/lib/gl $(CODE_COVERAGE_CPPFLAGS) LDADD = ../lib/libtasn1.la AM_LDFLAGS = $(CODE_COVERAGE_LDFLAGS) bin_PROGRAMS = asn1Parser asn1Coding asn1Decoding asn1Parser_SOURCES = asn1Parser.c asn1Coding_SOURCES = asn1Coding.c asn1Decoding_SOURCES = asn1Decoding.c benchmark.c benchmark.h libtasn1-4.16.0/src/Makefile.in0000644000000000000000000007166213615375040013062 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = asn1Parser$(EXEEXT) asn1Coding$(EXEEXT) \ asn1Decoding$(EXEEXT) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ $(top_srcdir)/m4/ax_am_macros_static.m4 \ $(top_srcdir)/m4/ax_check_gnu_make.m4 \ $(top_srcdir)/m4/ax_code_coverage.m4 \ $(top_srcdir)/m4/ax_file_escapes.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4-gl/00gnulib.m4 \ $(top_srcdir)/m4-gl/__inline.m4 \ $(top_srcdir)/m4-gl/absolute-header.m4 \ $(top_srcdir)/m4-gl/extensions.m4 \ $(top_srcdir)/m4-gl/extern-inline.m4 \ $(top_srcdir)/m4-gl/gnulib-common.m4 \ $(top_srcdir)/m4-gl/gnulib-comp.m4 \ $(top_srcdir)/m4-gl/include_next.m4 \ $(top_srcdir)/m4-gl/ld-version-script.m4 \ $(top_srcdir)/m4-gl/limits-h.m4 \ $(top_srcdir)/m4-gl/longlong.m4 \ $(top_srcdir)/m4-gl/manywarnings.m4 \ $(top_srcdir)/m4-gl/minmax.m4 $(top_srcdir)/m4-gl/multiarch.m4 \ $(top_srcdir)/m4-gl/off_t.m4 $(top_srcdir)/m4-gl/ssize_t.m4 \ $(top_srcdir)/m4-gl/stdbool.m4 $(top_srcdir)/m4-gl/stddef_h.m4 \ $(top_srcdir)/m4-gl/stdint.m4 $(top_srcdir)/m4-gl/string_h.m4 \ $(top_srcdir)/m4-gl/strverscmp.m4 \ $(top_srcdir)/m4-gl/sys_types_h.m4 \ $(top_srcdir)/m4-gl/valgrind-tests.m4 \ $(top_srcdir)/m4-gl/visibility.m4 \ $(top_srcdir)/m4-gl/warn-on-use.m4 \ $(top_srcdir)/m4-gl/warnings.m4 $(top_srcdir)/m4-gl/wchar_t.m4 \ $(top_srcdir)/m4-gl/wint_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_asn1Coding_OBJECTS = asn1Coding.$(OBJEXT) asn1Coding_OBJECTS = $(am_asn1Coding_OBJECTS) asn1Coding_LDADD = $(LDADD) asn1Coding_DEPENDENCIES = ../lib/libtasn1.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_asn1Decoding_OBJECTS = asn1Decoding.$(OBJEXT) benchmark.$(OBJEXT) asn1Decoding_OBJECTS = $(am_asn1Decoding_OBJECTS) asn1Decoding_LDADD = $(LDADD) asn1Decoding_DEPENDENCIES = ../lib/libtasn1.la am_asn1Parser_OBJECTS = asn1Parser.$(OBJEXT) asn1Parser_OBJECTS = $(am_asn1Parser_OBJECTS) asn1Parser_LDADD = $(LDADD) asn1Parser_DEPENDENCIES = ../lib/libtasn1.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/asn1Coding.Po \ ./$(DEPDIR)/asn1Decoding.Po ./$(DEPDIR)/asn1Parser.Po \ ./$(DEPDIR)/benchmark.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(asn1Coding_SOURCES) $(asn1Decoding_SOURCES) \ $(asn1Parser_SOURCES) DIST_SOURCES = $(asn1Coding_SOURCES) $(asn1Decoding_SOURCES) \ $(asn1Parser_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASN1_VERSION_MAJOR = @ASN1_VERSION_MAJOR@ ASN1_VERSION_MINOR = @ASN1_VERSION_MINOR@ ASN1_VERSION_NUMBER = @ASN1_VERSION_NUMBER@ ASN1_VERSION_PATCH = @ASN1_VERSION_PATCH@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FUZZ_LIBS = @FUZZ_LIBS@ GCOV = @GCOV@ GENHTML = @GENHTML@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTOOL = @LIBTOOL@ LIB_FUZZING_ENGINE = @LIB_FUZZING_ENGINE@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ ifGNUmake = @ifGNUmake@ ifnGNUmake = @ifnGNUmake@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CODE_COVERAGE_CFLAGS) AM_CPPFLAGS = -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes \ -I$(top_builddir)/lib/gl -I$(top_srcdir)/lib/gl $(CODE_COVERAGE_CPPFLAGS) LDADD = ../lib/libtasn1.la AM_LDFLAGS = $(CODE_COVERAGE_LDFLAGS) asn1Parser_SOURCES = asn1Parser.c asn1Coding_SOURCES = asn1Coding.c asn1Decoding_SOURCES = asn1Decoding.c benchmark.c benchmark.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list asn1Coding$(EXEEXT): $(asn1Coding_OBJECTS) $(asn1Coding_DEPENDENCIES) $(EXTRA_asn1Coding_DEPENDENCIES) @rm -f asn1Coding$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asn1Coding_OBJECTS) $(asn1Coding_LDADD) $(LIBS) asn1Decoding$(EXEEXT): $(asn1Decoding_OBJECTS) $(asn1Decoding_DEPENDENCIES) $(EXTRA_asn1Decoding_DEPENDENCIES) @rm -f asn1Decoding$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asn1Decoding_OBJECTS) $(asn1Decoding_LDADD) $(LIBS) asn1Parser$(EXEEXT): $(asn1Parser_OBJECTS) $(asn1Parser_DEPENDENCIES) $(EXTRA_asn1Parser_DEPENDENCIES) @rm -f asn1Parser$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asn1Parser_OBJECTS) $(asn1Parser_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1Coding.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1Decoding.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1Parser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/asn1Coding.Po -rm -f ./$(DEPDIR)/asn1Decoding.Po -rm -f ./$(DEPDIR)/asn1Parser.Po -rm -f ./$(DEPDIR)/benchmark.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/asn1Coding.Po -rm -f ./$(DEPDIR)/asn1Decoding.Po -rm -f ./$(DEPDIR)/asn1Parser.Po -rm -f ./$(DEPDIR)/benchmark.Po -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-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile # 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: libtasn1-4.16.0/src/asn1Decoding.c0000644000000000000000000002217013517123367013452 00000000000000/* asn1Decoding.c --- program to generate an ASN1 type from a DER coding. * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include #include #include #include #include #include #include "benchmark.h" #define program_name "asn1Decoding" static int decode (asn1_node definitions, const char *typeName, void *der, int der_len, int benchmark, int strict); /* This feature is available in gcc versions 2.5 and later. */ #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) #define ATTR_NO_RETRUN #else #define ATTR_NO_RETRUN __attribute__ ((__noreturn__)) #endif ATTR_NO_RETRUN static void usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, "Try `%s --help' for more information.\n", program_name); else { printf ("\ Usage: %s [OPTION] DEFINITIONS ENCODED ASN1TYPE\n", program_name); printf ("\ Decodes DER data in ENCODED file, for the ASN1TYPE element\n\ described in ASN.1 DEFINITIONS file, and print decoded structures.\n\ \n"); printf ("\ -b, --benchmark perform a benchmark on decoding\n\ -s, --strict use strict DER decoding\n\ -t, --no-time-strict use strict DER decoding but not in time fields\n\ -h, --help display this help and exit\n\ -v, --version output version information and exit\n"); printf ("Report bugs to "PACKAGE_BUGREPORT); } exit (status); } static char *read_binary_file(const char *file, size_t *l) { FILE *fp; struct stat st; char *out; if (stat(file, &st) == -1) { fprintf(stderr, "Error reading file size!\n"); exit(1); } fp = fopen(file, "rb"); if (fp == NULL) { fprintf(stderr, "Error reading file!\n"); exit(1); } out = malloc(st.st_size+1); if (out == NULL) { fprintf(stderr, "Memory error!\n"); exit(1); } *l = fread(out, 1, st.st_size, fp); if ((off_t)*l != st.st_size) { fprintf(stderr, "Error reading contents (got: %ld, expected %ld)!\n", (long)*l, (long)st.st_size); exit(1); } out[*l] = 0; fclose(fp); return out; } int main (int argc, char *argv[]) { static const struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"strict", no_argument, 0, 's'}, {"no-time-strict", no_argument, 0, 't'}, {"debug", no_argument, 0, 'd'}, {"benchmark", no_argument, 0, 'b'}, {"version", no_argument, 0, 'v'}, {0, 0, 0, 0} }; int option_index = 0; int option_result; char *inputFileAsnName = NULL; char *inputFileDerName = NULL; char *typeName = NULL; asn1_node definitions = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; int asn1_result = ASN1_SUCCESS; unsigned char *der; int der_len = 0, benchmark = 0; int flags = 0, debug = 0; /* FILE *outputFile; */ opterr = 0; /* disable error messages from getopt */ while (1) { option_result = getopt_long (argc, argv, "hbdsvtc", long_options, &option_index); if (option_result == -1) break; switch (option_result) { case 'h': /* HELP */ usage (EXIT_SUCCESS); break; case 'b': benchmark = 1; break; case 'd': debug = 1; break; case 's': case 't': flags |= ASN1_DECODE_FLAG_STRICT_DER; if (option_result == 't') flags |= ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME; break; case 'v': /* VERSION */ printf(program_name" "PACKAGE" " VERSION"\n"); printf("Copyright (C) 2017-2019 Free Software Foundation, Inc.\n\n"); printf("Written by Fabio Fiorina\n"); exit (0); break; case '?': /* UNKNOW OPTION */ fprintf (stderr, "asn1Decoding: option '%s' not recognized or without argument.\n\n", argv[optind - 1]); usage (EXIT_FAILURE); break; default: fprintf (stderr, "asn1Decoding: ?? getopt returned character code Ox%x ??\n", (unsigned)option_result); } } if (optind == argc || optind == argc - 1 || optind == argc - 2) { fprintf (stderr, "asn1Decoding: input files or ASN.1 type " "name missing\n"); usage (EXIT_FAILURE); } inputFileAsnName = strdup(argv[optind]); inputFileDerName = strdup(argv[optind + 1]); typeName = strdup(argv[optind + 2]); if (!(inputFileAsnName && inputFileDerName && typeName)) { fprintf(stderr, "allocation failed\n"); free(inputFileAsnName); free(inputFileDerName); free(typeName); exit(1); } asn1_result = asn1_parser2tree (inputFileAsnName, &definitions, errorDescription); switch (asn1_result) { case ASN1_SUCCESS: fprintf (stderr, "Parse: done.\n"); break; case ASN1_FILE_NOT_FOUND: fprintf (stderr, "asn1Decoding: FILE %s NOT FOUND\n", inputFileAsnName); break; case ASN1_SYNTAX_ERROR: case ASN1_IDENTIFIER_NOT_FOUND: case ASN1_NAME_TOO_LONG: fprintf (stderr, "asn1Decoding: %s\n", errorDescription); break; default: fprintf (stderr, "libtasn1 ERROR: %s\n", asn1_strerror (asn1_result)); } if (asn1_result != ASN1_SUCCESS) { free (inputFileAsnName); free (inputFileDerName); free (typeName); exit (1); } { size_t tmplen; der = (unsigned char *) read_binary_file (inputFileDerName, &tmplen); der_len = tmplen; } /* read_binary_file() returns a buffer with more data than required, * with this reallocation we ensure that memory accesses outside the * boundaries are detected */ if (der != NULL && debug != 0) der = realloc(der, der_len); if (der == NULL) { fprintf (stderr, "asn1Decoding: could not read '%s'\n", inputFileDerName); asn1_delete_structure (&definitions); free (inputFileAsnName); free (inputFileDerName); free (typeName); exit (1); } /*****************************************/ /* ONLY FOR TEST */ /*****************************************/ /* der_len=0; outputFile=fopen("data.p12","w"); while(fscanf(inputFile,"%c",der+der_len) != EOF) { if((der_len>=0x11) && (der_len<=(0xe70))) fprintf(outputFile,"%c",der[der_len]); der_len++; } fclose(outputFile); fclose(inputFile); */ if (decode (definitions, typeName, der, der_len, benchmark, flags) != ASN1_SUCCESS) { asn1_delete_structure (&definitions); free (inputFileAsnName); free (inputFileDerName); free (typeName); free (der); exit (1); } asn1_delete_structure (&definitions); free (der); free (inputFileAsnName); free (inputFileDerName); free (typeName); if (asn1_result != ASN1_SUCCESS) exit (1); exit (0); } static int simple_decode (asn1_node definitions, const char *typeName, void *der, int der_len, int benchmark, int flags) { int asn1_result; asn1_node structure = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; asn1_result = asn1_create_element (definitions, typeName, &structure); /* asn1_print_structure(stdout,structure,"",ASN1_PRINT_ALL); */ if (asn1_result != ASN1_SUCCESS) { fprintf (stderr, "Structure creation: %s\n", asn1_strerror (asn1_result)); asn1_delete_structure (&structure); return asn1_result; } if (flags != 0) asn1_result = asn1_der_decoding2(&structure, der, &der_len, flags, errorDescription); else asn1_result = asn1_der_decoding (&structure, der, der_len, errorDescription); if (!benchmark) fprintf (stderr, "\nDecoding: %s\n", asn1_strerror (asn1_result)); if (asn1_result != ASN1_SUCCESS) { fprintf (stderr, "asn1Decoding: %s\n", errorDescription); asn1_delete_structure (&structure); return asn1_result; } if (!benchmark) { fprintf (stderr, "\nDECODING RESULT:\n"); asn1_print_structure (stdout, structure, "", ASN1_PRINT_NAME_TYPE_VALUE); } asn1_delete_structure (&structure); return ASN1_SUCCESS; } static int decode (asn1_node definitions, const char *typeName, void *der, int der_len, int benchmark, int flags) { struct benchmark_st st; if (benchmark == 0) return simple_decode (definitions, typeName, der, der_len, benchmark, flags); else { start_benchmark (&st); do { simple_decode (definitions, typeName, der, der_len, benchmark, flags); st.size++; } while (benchmark_must_finish == 0); stop_benchmark (&st, "structures"); fprintf (stdout, "\n"); } return ASN1_SUCCESS; } libtasn1-4.16.0/src/asn1Parser.c0000644000000000000000000001241513514401774013171 00000000000000/* asn1Parser.c -- program to parse a file with ASN1 definitions * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include #include #include #include #include #define program_name "asn1Parser" /* This feature is available in gcc versions 2.5 and later. */ #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) #define ATTR_NO_RETRUN #else #define ATTR_NO_RETRUN __attribute__ ((__noreturn__)) #endif ATTR_NO_RETRUN static void usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, "Try `%s --help' for more information.\n", program_name); else { printf ("\ Usage: %s [OPTION] FILE\n", program_name); printf ("\ Read FILE with ASN.1 definitions and generate\n\ a C array that is used with libtasn1 functions.\n\ \n"); printf ("\ Mandatory arguments to long options are mandatory for short options too.\n\ -c, --check checks the syntax only\n\ -o, --output=FILE output file\n\ -n, --name=NAME array name\n\ -h, --help display this help and exit\n\ -v, --version output version information and exit\n"); printf ("Report bugs to "PACKAGE_BUGREPORT); } exit (status); } int main (int argc, char *argv[]) { static const struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, {"check", no_argument, 0, 'c'}, {"output", required_argument, 0, 'o'}, {"name", required_argument, 0, 'n'}, {0, 0, 0, 0} }; int option_index = 0; int option_result; char *outputFileName = NULL; char *inputFileName = NULL; char *vectorName = NULL; int checkSyntaxOnly = 0; asn1_node pointer = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; int parse_result = ASN1_SUCCESS; opterr = 0; /* disable error messages from getopt */ while (1) { option_result = getopt_long (argc, argv, "hvco:n:", long_options, &option_index); if (option_result == -1) break; switch (option_result) { case 0: fprintf (stderr, "option %s", long_options[option_index].name); if (optarg) fprintf (stderr, " with arg %s", optarg); putc ('\n', stderr); break; case 'h': /* HELP */ free (outputFileName); free (vectorName); usage (EXIT_SUCCESS); break; case 'v': /* VERSION */ printf(program_name" "PACKAGE" " VERSION"\n"); printf("Copyright (C) 2017-2019 Free Software Foundation, Inc.\n\n"); printf("Written by Fabio Fiorina\n"); free (outputFileName); free (vectorName); exit (0); break; case 'c': /* CHECK SYNTAX */ checkSyntaxOnly = 1; break; case 'o': /* OUTPUT */ assert(optarg != NULL); outputFileName = strdup(optarg); if (outputFileName == NULL) { fprintf(stderr, "Memory error\n"); exit(1); } break; case 'n': /* VECTOR NAME */ assert(optarg != NULL); vectorName = strdup(optarg); if (vectorName == NULL) { fprintf(stderr, "Memory error\n"); exit(1); } break; case '?': /* UNKNOW OPTION */ fprintf (stderr, "asn1Parser: option '%s' not recognized or without argument.\n\n", argv[optind - 1]); free (outputFileName); free (vectorName); usage (EXIT_FAILURE); break; default: fprintf (stderr, "asn1Parser: ?? getopt returned character code Ox%x ??\n", (unsigned)option_result); } } if (optind == argc) { free (outputFileName); free (vectorName); usage (EXIT_SUCCESS); } else { inputFileName = (char *) malloc (strlen (argv[optind]) + 1); strcpy (inputFileName, argv[optind]); } if (checkSyntaxOnly == 1) { parse_result = asn1_parser2tree (inputFileName, &pointer, errorDescription); asn1_delete_structure (&pointer); } else /* C VECTOR CREATION */ parse_result = asn1_parser2array (inputFileName, outputFileName, vectorName, errorDescription); switch (parse_result) { case ASN1_SUCCESS: fputs ("Done.\n", stderr); break; case ASN1_FILE_NOT_FOUND: fprintf (stderr, "asn1Parser: file %s was not found\n", inputFileName); break; case ASN1_SYNTAX_ERROR: case ASN1_IDENTIFIER_NOT_FOUND: case ASN1_NAME_TOO_LONG: fprintf (stderr, "asn1Parser: %s\n", errorDescription); break; default: fprintf (stderr, "libtasn1 ERROR: %s\n", asn1_strerror (parse_result)); } free (inputFileName); free (outputFileName); free (vectorName); if (parse_result != ASN1_SUCCESS) exit (1); exit (0); } libtasn1-4.16.0/src/benchmark.h0000644000000000000000000000307513517303137013110 00000000000000/* * Copyright (C) 2011-2014 Free Software Foundation, Inc. * * This file is part of GnuTLS. * * GnuTLS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GnuTLS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef BENCHMARK_H # define BENCHMARK_H #include #include #include #include #if defined _WIN32 #include #endif #include typedef void (*sighandler_t) (int); struct benchmark_st { #ifdef HAVE_CLOCK_GETTIME struct timespec start; #else struct timeval start; #endif unsigned long size; sighandler_t old_handler; #if defined _WIN32 HANDLE wtimer; HANDLE wthread; LARGE_INTEGER alarm_timeout; #endif }; extern int benchmark_must_finish; void start_benchmark (struct benchmark_st *st); double stop_benchmark (struct benchmark_st *st, const char *metric); inline static unsigned int timespec_sub_ms (struct timespec *a, struct timespec *b) { return (a->tv_sec * 1000 + a->tv_nsec / (1000 * 1000) - (b->tv_sec * 1000 + b->tv_nsec / (1000 * 1000))); } #endif /* BENCHMARK_H */ libtasn1-4.16.0/src/asn1Coding.c0000644000000000000000000002251513514401774013142 00000000000000/* asn1Coding.c --- program to generate a DER coding of an ASN1 definition. * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include #include #include #include #include #include #include #include #define program_name "asn1Coding" /* This feature is available in gcc versions 2.5 and later. */ #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) #define ATTR_NO_RETRUN #else #define ATTR_NO_RETRUN __attribute__ ((__noreturn__)) #endif ATTR_NO_RETRUN static void usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, "Try `%s --help' for more information.\n", program_name); else { printf ("\ Usage: %s [OPTION] DEFINITIONS ASSIGNMENTS\n", program_name); printf ("\ Generates a DER encoding of ASN.1 DEFINITIONS file\n\ and ASSIGNMENTS file with value assignments.\n\ \n"); printf ("\ Mandatory arguments to long options are mandatory for short options too.\n\ -c, --check checks the syntax only\n\ -o, --output=FILE output file\n\ -h, --help display this help and exit\n\ -v, --version output version information and exit\n"); printf ("Report bugs to "PACKAGE_BUGREPORT); } exit (status); } #define ASSIGNMENT_SUCCESS 1 #define ASSIGNMENT_ERROR 2 #define ASSIGNMENT_EOF 3 static int readAssignment (FILE * file, char *varName, char *value) { int ret; ret = fscanf (file, "%s", varName); if (ret == EOF) return ASSIGNMENT_EOF; if (!strcmp (varName, "''")) varName[0] = 0; ret = fscanf (file, "%s", value); if (ret == EOF) return ASSIGNMENT_ERROR; return ASSIGNMENT_SUCCESS; } static void createFileName (char *inputFileName, char **outputFileName) { char *char_p, *slash_p, *dot_p; /* searching the last '/' and '.' in inputFileAssignmentName */ char_p = inputFileName; slash_p = inputFileName; while ((char_p = strchr (char_p, '/'))) { char_p++; slash_p = char_p; } char_p = slash_p; dot_p = inputFileName + strlen (inputFileName); while ((char_p = strchr (char_p, '.'))) { dot_p = char_p; char_p++; } /* outputFileName= inputFileName + .out */ *outputFileName = (char *) malloc (dot_p - inputFileName + 1 + strlen (".out")); if (*outputFileName == NULL) { fprintf(stderr, "Memory error\n"); exit(1); } memcpy (*outputFileName, inputFileName, dot_p - inputFileName); (*outputFileName)[dot_p - inputFileName] = 0; strcat (*outputFileName, ".out"); return; } int main (int argc, char *argv[]) { static const struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, {"check", no_argument, 0, 'c'}, {"output", required_argument, 0, 'o'}, {0, 0, 0, 0} }; int option_index = 0; int option_result; char *outputFileName = NULL; char *inputFileAsnName = NULL; char *inputFileAssignmentName = NULL; int checkSyntaxOnly = 0; asn1_node definitions = NULL; asn1_node structure = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; int asn1_result = ASN1_SUCCESS; FILE *outputFile; FILE *inputFile; char varName[1024]; char value[1024]; unsigned char *der = NULL; int der_len; int k; int last_ra; opterr = 0; /* disable error messages from getopt */ while (1) { option_result = getopt_long (argc, argv, "hvco:", long_options, &option_index); if (option_result == -1) break; switch (option_result) { case 'h': /* HELP */ free (outputFileName); usage (EXIT_SUCCESS); break; case 'v': /* VERSION */ printf(program_name" "PACKAGE" " VERSION"\n"); printf("Copyright (C) 2017-2019 Free Software Foundation, Inc.\n\n"); printf("Written by Fabio Fiorina\n"); free (outputFileName); exit (0); break; case 'c': /* CHECK SYNTAX */ checkSyntaxOnly = 1; break; case 'o': /* OUTPUT */ assert(optarg != NULL); outputFileName = strdup(optarg); if (outputFileName == NULL) { fprintf(stderr, "Memory error\n"); exit(1); } break; case '?': /* UNKNOW OPTION */ free (outputFileName); fprintf (stderr, "asn1Coding: option '%s' not recognized or without argument.\n\n", argv[optind - 1]); usage (EXIT_FAILURE); break; default: fprintf (stderr, "asn1Coding: ?? getopt returned character code Ox%x ??\n", (unsigned)option_result); } } if (optind == argc || optind == argc - 1) { free (outputFileName); fputs ("asn1Coding: input files missing\n", stderr); usage (EXIT_FAILURE); } inputFileAsnName = strdup(argv[optind]); if (inputFileAsnName == NULL) { fprintf(stderr, "Memory error\n"); exit(1); } inputFileAssignmentName = strdup(argv[optind+1]); if (inputFileAssignmentName == NULL) { fprintf(stderr, "Memory error\n"); exit(1); } asn1_result = asn1_parser2tree (inputFileAsnName, &definitions, errorDescription); switch (asn1_result) { case ASN1_SUCCESS: fputs ("Parse: done.\n", stderr); break; case ASN1_FILE_NOT_FOUND: fprintf (stderr, "asn1Coding: FILE %s NOT FOUND\n", inputFileAsnName); break; case ASN1_SYNTAX_ERROR: case ASN1_IDENTIFIER_NOT_FOUND: case ASN1_NAME_TOO_LONG: fprintf (stderr, "asn1Coding: %s\n", errorDescription); break; default: fprintf (stderr, "libtasn1 ERROR: %s\n", asn1_strerror (asn1_result)); } if (asn1_result != ASN1_SUCCESS) { free (inputFileAsnName); free (inputFileAssignmentName); exit (1); } inputFile = fopen (inputFileAssignmentName, "r"); if (inputFile == NULL) { fprintf (stderr, "asn1Coding: file '%s' not found\n", inputFileAssignmentName); free (inputFileAsnName); free (inputFileAssignmentName); exit (1); } putc ('\n', stderr); while ((last_ra = readAssignment (inputFile, varName, value)) == ASSIGNMENT_SUCCESS) { fprintf (stderr, "var=%s, value=%s\n", varName, value); if (structure == NULL) { asn1_result = asn1_create_element (definitions, value, &structure); } else { if (strcmp(value, "(NULL)") == 0) asn1_result = asn1_write_value (structure, varName, NULL, 0); else asn1_result = asn1_write_value (structure, varName, value, 0); } if (asn1_result != ASN1_SUCCESS) { fprintf (stderr, "libtasn1 ERROR: %s\n", asn1_strerror (asn1_result)); asn1_delete_structure (&definitions); asn1_delete_structure (&structure); free (inputFileAsnName); free (inputFileAssignmentName); fclose (inputFile); exit (1); } } if (last_ra != ASSIGNMENT_EOF) { fprintf (stderr, "asn1Coding: error reading assignment file\n"); exit (1); } fclose (inputFile); putc ('\n', stderr); asn1_print_structure (stderr, structure, "", ASN1_PRINT_NAME_TYPE_VALUE); der_len = 0; asn1_result = asn1_der_coding (structure, "", NULL, &der_len, errorDescription); if (asn1_result == ASN1_MEM_ERROR) { der = malloc (der_len); if (der == NULL) { fprintf(stderr, "Memory error\n"); exit(1); } asn1_result = asn1_der_coding (structure, "", der, &der_len, errorDescription); } fprintf (stderr, "\nCoding: %s\n\n", asn1_strerror (asn1_result)); if (asn1_result != ASN1_SUCCESS) { fprintf (stderr, "asn1Coding: %s\n", errorDescription); free (der); asn1_delete_structure (&definitions); asn1_delete_structure (&structure); free (inputFileAsnName); free (inputFileAssignmentName); exit (1); } /* Print the 'Certificate1' DER encoding */ fprintf (stderr, "-----------------\nNumber of bytes=%i\n", der_len); for (k = 0; k < der_len; k++) fprintf (stderr, "%02x ", der[k]); fputs ("\n-----------------\n", stderr); asn1_delete_structure (&definitions); asn1_delete_structure (&structure); if (!checkSyntaxOnly) { if (outputFileName == NULL) createFileName (inputFileAssignmentName, &outputFileName); fprintf (stderr, "\nOutputFile=%s\n", outputFileName); outputFile = fopen (outputFileName, "w"); if (outputFile == NULL) { fprintf (stderr, "asn1Coding: output file '%s' not available\n", outputFileName); free (der); free (inputFileAsnName); free (inputFileAssignmentName); free (outputFileName); exit (1); } for (k = 0; k < der_len; k++) fprintf (outputFile, "%c", der[k]); fclose (outputFile); fputs ("\nWriting: done.\n", stderr); } free (der); free (inputFileAsnName); free (inputFileAssignmentName); free (outputFileName); exit (0); } libtasn1-4.16.0/src/benchmark.c0000644000000000000000000001033413514140427013075 00000000000000/* * Copyright (C) 2011-2014 Free Software Foundation, Inc. * * This file is part of GnuTLS. * * GnuTLS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GnuTLS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include "benchmark.h" int benchmark_must_finish = 0; #if defined _WIN32 #include static DWORD WINAPI alarm_handler (LPVOID lpParameter) { HANDLE wtimer = *((HANDLE *) lpParameter); WaitForSingleObject (wtimer, INFINITE); benchmark_must_finish = 1; return 0; } #else static void alarm_handler (int signo) { benchmark_must_finish = 1; } #endif static void value2human (unsigned long bytes, double secs, double *data, double *speed, char *metric) { if (bytes > 1000 && bytes < 1000 * 1000) { *data = ((double) bytes) / 1000; *speed = *data / secs; strcpy (metric, "KB"); return; } else if (bytes >= 1000 * 1000 && bytes < 1000 * 1000 * 1000) { *data = ((double) bytes) / (1000 * 1000); *speed = *data / secs; strcpy (metric, "MB"); return; } else if (bytes >= 1000 * 1000 * 1000) { *data = ((double) bytes) / (1000 * 1000 * 1000); *speed = *data / secs; strcpy (metric, "GB"); return; } else { *data = (double) bytes; *speed = *data / secs; strcpy (metric, "bytes"); return; } } void start_benchmark (struct benchmark_st *st) { memset (st, 0, sizeof (*st)); #ifndef _WIN32 st->old_handler = signal (SIGALRM, alarm_handler); #endif #ifdef HAVE_CLOCK_GETTIME clock_gettime (CLOCK_MONOTONIC, &st->start); #else gettimeofday(&st->start, NULL); #endif benchmark_must_finish = 0; #if defined _WIN32 st->wtimer = CreateWaitableTimer (NULL, TRUE, NULL); if (st->wtimer == NULL) { fprintf (stderr, "error: CreateWaitableTimer %u\n", GetLastError ()); exit (1); } st->wthread = CreateThread (NULL, 0, alarm_handler, &st->wtimer, 0, NULL); if (st->wthread == NULL) { fprintf (stderr, "error: CreateThread %u\n", GetLastError ()); exit (1); } st->alarm_timeout.QuadPart = (5) * 10000000; if (SetWaitableTimer (st->wtimer, &st->alarm_timeout, 0, NULL, NULL, FALSE) == 0) { fprintf (stderr, "error: SetWaitableTimer %u\n", GetLastError ()); exit (1); } #else alarm (5); #endif } /* returns the elapsed time */ double stop_benchmark (struct benchmark_st *st, const char *metric) { double secs; unsigned long lsecs; #ifdef HAVE_CLOCK_GETTIME struct timespec stop; #else struct timeval stop; #endif double dspeed, ddata; char imetric[16]; #if defined _WIN32 if (st->wtimer != NULL) CloseHandle (st->wtimer); if (st->wthread != NULL) CloseHandle (st->wthread); #else signal (SIGALRM, st->old_handler); #endif #ifdef HAVE_CLOCK_GETTIME clock_gettime (CLOCK_MONOTONIC, &stop); lsecs = (stop.tv_sec * 1000 + stop.tv_nsec / (1000 * 1000) - (st->start.tv_sec * 1000 + st->start.tv_nsec / (1000 * 1000))); #else gettimeofday(&stop, NULL); lsecs = (stop.tv_sec * 1000 + stop.tv_usec / (1000) - (st->start.tv_sec * 1000 + st->start.tv_usec / (1000))); #endif secs = lsecs; secs /= 1000; if (metric == NULL) { /* assume bytes/sec */ value2human (st->size, secs, &ddata, &dspeed, imetric); printf (" Processed %.2f %s in %.2f secs: ", ddata, imetric, secs); printf ("%.2f %s/sec\n", dspeed, imetric); } else { ddata = (double) st->size; dspeed = ddata / secs; printf (" Processed %.2f %s in %.2f secs: ", ddata, metric, secs); printf ("%.2f %s/sec\n", dspeed, metric); } return secs; } libtasn1-4.16.0/m4/0000755000000000000000000000000013615400132010601 500000000000000libtasn1-4.16.0/m4/ltversion.m40000644000000000000000000000127313247314711013023 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) libtasn1-4.16.0/m4/ax_add_am_macro_static.m40000644000000000000000000000152513514140427015421 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_add_am_macro_static.html # =========================================================================== # # SYNOPSIS # # AX_ADD_AM_MACRO_STATIC([RULE]) # # DESCRIPTION # # Adds the specified rule to $AMINCLUDE. # # LICENSE # # Copyright (c) 2009 Tom Howard # Copyright (c) 2009 Allan Caffee # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 8 AC_DEFUN([AX_ADD_AM_MACRO_STATIC],[ AC_REQUIRE([AX_AM_MACROS_STATIC]) AX_AC_APPEND_TO_FILE(AMINCLUDE_STATIC,[$1]) ]) libtasn1-4.16.0/m4/ax_ac_append_to_file.m40000644000000000000000000000162213514140427015075 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_ac_append_to_file.html # =========================================================================== # # SYNOPSIS # # AX_AC_APPEND_TO_FILE([FILE],[DATA]) # # DESCRIPTION # # Appends the specified data to the specified Autoconf is run. If you want # to append to a file when configure is run use AX_APPEND_TO_FILE instead. # # LICENSE # # Copyright (c) 2009 Allan Caffee # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 10 AC_DEFUN([AX_AC_APPEND_TO_FILE],[ AC_REQUIRE([AX_FILE_ESCAPES]) m4_esyscmd( AX_FILE_ESCAPES [ printf "%s" "$2" >> "$1" ]) ]) libtasn1-4.16.0/m4/ax_code_coverage.m40000644000000000000000000002761413514140427014260 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_code_coverage.html # =========================================================================== # # SYNOPSIS # # AX_CODE_COVERAGE() # # DESCRIPTION # # Defines CODE_COVERAGE_CPPFLAGS, CODE_COVERAGE_CFLAGS, # CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LIBS which should be included # in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LIBADD variables of every # build target (program or library) which should be built with code # coverage support. Also add rules using AX_ADD_AM_MACRO_STATIC; and # $enable_code_coverage which can be used in subsequent configure output. # CODE_COVERAGE_ENABLED is defined and substituted, and corresponds to the # value of the --enable-code-coverage option, which defaults to being # disabled. # # Test also for gcov program and create GCOV variable that could be # substituted. # # Note that all optimization flags in CFLAGS must be disabled when code # coverage is enabled. # # Usage example: # # configure.ac: # # AX_CODE_COVERAGE # # Makefile.am: # # include $(top_srcdir)/aminclude_static.am # # my_program_LIBS = ... $(CODE_COVERAGE_LIBS) ... # my_program_CPPFLAGS = ... $(CODE_COVERAGE_CPPFLAGS) ... # my_program_CFLAGS = ... $(CODE_COVERAGE_CFLAGS) ... # my_program_CXXFLAGS = ... $(CODE_COVERAGE_CXXFLAGS) ... # # clean-local: code-coverage-clean # distclean-local: code-coverage-dist-clean # # This results in a "check-code-coverage" rule being added to any # Makefile.am which do "include $(top_srcdir)/aminclude_static.am" # (assuming the module has been configured with --enable-code-coverage). # Running `make check-code-coverage` in that directory will run the # module's test suite (`make check`) and build a code coverage report # detailing the code which was touched, then print the URI for the report. # # This code was derived from Makefile.decl in GLib, originally licensed # under LGPLv2.1+. # # LICENSE # # Copyright (c) 2012, 2016 Philip Withnall # Copyright (c) 2012 Xan Lopez # Copyright (c) 2012 Christian Persch # Copyright (c) 2012 Paolo Borelli # Copyright (c) 2012 Dan Winship # Copyright (c) 2015,2018 Bastien ROUCARIES # # This library is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or (at # your option) any later version. # # This library is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser # General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . #serial 32 m4_define(_AX_CODE_COVERAGE_RULES,[ AX_ADD_AM_MACRO_STATIC([ # Code coverage # # Optional: # - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. # Multiple directories may be specified, separated by whitespace. # (Default: \$(top_builddir)) # - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated # by lcov for code coverage. (Default: # \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage.info) # - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage # reports to be created. (Default: # \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage) # - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage, # set to 0 to disable it and leave empty to stay with the default. # (Default: empty) # - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov # instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE) # - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov # instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) # - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov # - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the # collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) # - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov # instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) # - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering # lcov instance. (Default: empty) # - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov # instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) # - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the # genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE) # - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml # instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) # - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore # # The generated report will be titled using the \$(PACKAGE_NAME) and # \$(PACKAGE_VERSION). In order to add the current git hash to the title, # use the git-version-gen script, available online. # Optional variables # run only on top dir if CODE_COVERAGE_ENABLED ifeq (\$(abs_builddir), \$(abs_top_builddir)) CODE_COVERAGE_DIRECTORY ?= \$(top_builddir) CODE_COVERAGE_OUTPUT_FILE ?= \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage.info CODE_COVERAGE_OUTPUT_DIRECTORY ?= \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage CODE_COVERAGE_BRANCH_COVERAGE ?= CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= \$(if \$(CODE_COVERAGE_BRANCH_COVERAGE),\ --rc lcov_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE)) CODE_COVERAGE_LCOV_SHOPTS ?= \$(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool \"\$(GCOV)\" CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= \$(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) CODE_COVERAGE_LCOV_OPTIONS ?= \$(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?= CODE_COVERAGE_LCOV_RMOPTS ?= \$(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\ \$(if \$(CODE_COVERAGE_BRANCH_COVERAGE),\ --rc genhtml_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE)) CODE_COVERAGE_GENHTML_OPTIONS ?= \$(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) CODE_COVERAGE_IGNORE_PATTERN ?= GITIGNOREFILES = \$(GITIGNOREFILES) \$(CODE_COVERAGE_OUTPUT_FILE) \$(CODE_COVERAGE_OUTPUT_DIRECTORY) code_coverage_v_lcov_cap = \$(code_coverage_v_lcov_cap_\$(V)) code_coverage_v_lcov_cap_ = \$(code_coverage_v_lcov_cap_\$(AM_DEFAULT_VERBOSITY)) code_coverage_v_lcov_cap_0 = @echo \" LCOV --capture\" \$(CODE_COVERAGE_OUTPUT_FILE); code_coverage_v_lcov_ign = \$(code_coverage_v_lcov_ign_\$(V)) code_coverage_v_lcov_ign_ = \$(code_coverage_v_lcov_ign_\$(AM_DEFAULT_VERBOSITY)) code_coverage_v_lcov_ign_0 = @echo \" LCOV --remove /tmp/*\" \$(CODE_COVERAGE_IGNORE_PATTERN); code_coverage_v_genhtml = \$(code_coverage_v_genhtml_\$(V)) code_coverage_v_genhtml_ = \$(code_coverage_v_genhtml_\$(AM_DEFAULT_VERBOSITY)) code_coverage_v_genhtml_0 = @echo \" GEN \" \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\"; code_coverage_quiet = \$(code_coverage_quiet_\$(V)) code_coverage_quiet_ = \$(code_coverage_quiet_\$(AM_DEFAULT_VERBOSITY)) code_coverage_quiet_0 = --quiet # sanitizes the test-name: replaces with underscores: dashes and dots code_coverage_sanitize = \$(subst -,_,\$(subst .,_,\$(1))) # Use recursive makes in order to ignore errors during check check-code-coverage: -\$(AM_V_at)\$(MAKE) \$(AM_MAKEFLAGS) -k check \$(AM_V_at)\$(MAKE) \$(AM_MAKEFLAGS) code-coverage-capture # Capture code coverage data code-coverage-capture: code-coverage-capture-hook \$(code_coverage_v_lcov_cap)\$(LCOV) \$(code_coverage_quiet) \$(addprefix --directory ,\$(CODE_COVERAGE_DIRECTORY)) --capture --output-file \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" --test-name \"\$(call code_coverage_sanitize,\$(PACKAGE_NAME)-\$(PACKAGE_VERSION))\" --no-checksum --compat-libtool \$(CODE_COVERAGE_LCOV_SHOPTS) \$(CODE_COVERAGE_LCOV_OPTIONS) \$(code_coverage_v_lcov_ign)\$(LCOV) \$(code_coverage_quiet) \$(addprefix --directory ,\$(CODE_COVERAGE_DIRECTORY)) --remove \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \"/tmp/*\" \$(CODE_COVERAGE_IGNORE_PATTERN) --output-file \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$(CODE_COVERAGE_LCOV_SHOPTS) \$(CODE_COVERAGE_LCOV_RMOPTS) -@rm -f \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \$(code_coverage_v_genhtml)LANG=C \$(GENHTML) \$(code_coverage_quiet) \$(addprefix --prefix ,\$(CODE_COVERAGE_DIRECTORY)) --output-directory \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\" --title \"\$(PACKAGE_NAME)-\$(PACKAGE_VERSION) Code Coverage\" --legend --show-details \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$(CODE_COVERAGE_GENHTML_OPTIONS) @echo \"file://\$(abs_builddir)/\$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html\" code-coverage-clean: -\$(LCOV) --directory \$(top_builddir) -z -rm -rf \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\" -find . \\( -name \"*.gcda\" -o -name \"*.gcno\" -o -name \"*.gcov\" \\) -delete code-coverage-dist-clean: A][M_DISTCHECK_CONFIGURE_FLAGS = \$(A][M_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage else # ifneq (\$(abs_builddir), \$(abs_top_builddir)) check-code-coverage: code-coverage-capture: code-coverage-capture-hook code-coverage-clean: code-coverage-dist-clean: endif # ifeq (\$(abs_builddir), \$(abs_top_builddir)) else #! CODE_COVERAGE_ENABLED # Use recursive makes in order to ignore errors during check check-code-coverage: @echo \"Need to reconfigure with --enable-code-coverage\" # Capture code coverage data code-coverage-capture: code-coverage-capture-hook @echo \"Need to reconfigure with --enable-code-coverage\" code-coverage-clean: code-coverage-dist-clean: endif #CODE_COVERAGE_ENABLED # Hook rule executed before code-coverage-capture, overridable by the user code-coverage-capture-hook: .PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook ]) ]) AC_DEFUN([_AX_CODE_COVERAGE_ENABLED],[ AX_CHECK_GNU_MAKE([],[AC_MSG_ERROR([not using GNU make that is needed for coverage])]) AC_REQUIRE([AX_ADD_AM_MACRO_STATIC]) # check for gcov AC_CHECK_TOOL([GCOV], [$_AX_CODE_COVERAGE_GCOV_PROG_WITH], [:]) AS_IF([test "X$GCOV" = "X:"], [AC_MSG_ERROR([gcov is needed to do coverage])]) AC_SUBST([GCOV]) dnl Check if gcc is being used AS_IF([ test "$GCC" = "no" ], [ AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage]) ]) AC_CHECK_PROG([LCOV], [lcov], [lcov]) AC_CHECK_PROG([GENHTML], [genhtml], [genhtml]) AS_IF([ test x"$LCOV" = x ], [ AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed]) ]) AS_IF([ test x"$GENHTML" = x ], [ AC_MSG_ERROR([Could not find genhtml from the lcov package]) ]) dnl Build the code coverage flags dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility CODE_COVERAGE_CPPFLAGS="-DNDEBUG" CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" CODE_COVERAGE_LIBS="-lgcov" AC_SUBST([CODE_COVERAGE_CPPFLAGS]) AC_SUBST([CODE_COVERAGE_CFLAGS]) AC_SUBST([CODE_COVERAGE_CXXFLAGS]) AC_SUBST([CODE_COVERAGE_LIBS]) ]) AC_DEFUN([AX_CODE_COVERAGE],[ dnl Check for --enable-code-coverage # allow to override gcov location AC_ARG_WITH([gcov], [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])], [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov], [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov]) AC_MSG_CHECKING([whether to build with code coverage support]) AC_ARG_ENABLE([code-coverage], AS_HELP_STRING([--enable-code-coverage], [Whether to enable code coverage support]),, enable_code_coverage=no) AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test "x$enable_code_coverage" = xyes]) AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage]) AC_MSG_RESULT($enable_code_coverage) AS_IF([ test "x$enable_code_coverage" = xyes ], [ _AX_CODE_COVERAGE_ENABLED ]) _AX_CODE_COVERAGE_RULES ]) libtasn1-4.16.0/m4/ax_am_macros_static.m40000644000000000000000000000212513514140427014771 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_am_macros_static.html # =========================================================================== # # SYNOPSIS # # AX_AM_MACROS_STATIC # # DESCRIPTION # # Adds support for macros that create Automake rules. You must manually # add the following line # # include $(top_srcdir)/aminclude_static.am # # to your Makefile.am files. # # LICENSE # # Copyright (c) 2009 Tom Howard # Copyright (c) 2009 Allan Caffee # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 11 AC_DEFUN([AMINCLUDE_STATIC],[aminclude_static.am]) AC_DEFUN([AX_AM_MACROS_STATIC], [ AX_AC_PRINT_TO_FILE(AMINCLUDE_STATIC,[ # ]AMINCLUDE_STATIC[ generated automatically by Autoconf # from AX_AM_MACROS_STATIC on ]m4_esyscmd([LC_ALL=C date])[ ]) ]) libtasn1-4.16.0/m4/ltsugar.m40000644000000000000000000001044013247314711012453 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) libtasn1-4.16.0/m4/gtk-doc.m40000644000000000000000000001066013447472162012335 00000000000000# -*- mode: autoconf -*- # # gtk-doc.m4 - configure macro to check for gtk-doc # Copyright (C) 2003 James Henstridge # 2007-2017 Stefan Sauer # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # As a special exception, the above copyright owner gives unlimited # permission to copy, distribute and modify the configure scripts that # are the output of Autoconf when processing the Macro. You need not # follow the terms of the GNU General Public License when using or # distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # serial 2 dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first ifelse([$1],[],[gtk_doc_requires="gtk-doc"],[gtk_doc_requires="gtk-doc >= $1"]) AC_MSG_CHECKING([for gtk-doc]) PKG_CHECK_EXISTS([$gtk_doc_requires],[have_gtk_doc=yes],[have_gtk_doc=no]) AC_MSG_RESULT($have_gtk_doc) if test "$have_gtk_doc" = "no"; then AC_MSG_WARN([ You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found.]) fi dnl check for tools we added during development dnl Use AC_CHECK_PROG to avoid the check target using an absolute path that dnl may not be writable by the user. Currently, automake requires that the dnl test name must end in '.test'. dnl https://bugzilla.gnome.org/show_bug.cgi?id=701638 AC_CHECK_PROG([GTKDOC_CHECK],[gtkdoc-check],[gtkdoc-check.test]) AC_PATH_PROG([GTKDOC_CHECK_PATH],[gtkdoc-check]) AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) dnl for overriding the documentation installation directory AC_ARG_WITH([html-dir], AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, [with_html_dir='${datadir}/gtk-doc/html']) HTML_DIR="$with_html_dir" AC_SUBST([HTML_DIR]) dnl enable/disable documentation building AC_ARG_ENABLE([gtk-doc], AS_HELP_STRING([--enable-gtk-doc], [use gtk-doc to build documentation [[default=no]]]),, [enable_gtk_doc=no]) AC_MSG_CHECKING([whether to build gtk-doc documentation]) AC_MSG_RESULT($enable_gtk_doc) if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then AC_MSG_ERROR([ You must have $gtk_doc_requires installed to build documentation for $PACKAGE_NAME. Please install gtk-doc or disable building the documentation by adding '--disable-gtk-doc' to '[$]0'.]) fi dnl don't check for glib if we build glib if test "x$PACKAGE_NAME" != "xglib"; then dnl don't fail if someone does not have glib PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:]) fi dnl enable/disable output formats AC_ARG_ENABLE([gtk-doc-html], AS_HELP_STRING([--enable-gtk-doc-html], [build documentation in html format [[default=yes]]]),, [enable_gtk_doc_html=yes]) AC_ARG_ENABLE([gtk-doc-pdf], AS_HELP_STRING([--enable-gtk-doc-pdf], [build documentation in pdf format [[default=no]]]),, [enable_gtk_doc_pdf=no]) if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) AM_CONDITIONAL([HAVE_GTK_DOC], [test x$have_gtk_doc = xyes]) AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) libtasn1-4.16.0/m4/ax_check_gnu_make.m40000644000000000000000000000772613514140427014420 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_gnu_make.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_GNU_MAKE([run-if-true],[run-if-false]) # # DESCRIPTION # # This macro searches for a GNU version of make. If a match is found: # # * The makefile variable `ifGNUmake' is set to the empty string, otherwise # it is set to "#". This is useful for including a special features in a # Makefile, which cannot be handled by other versions of make. # * The makefile variable `ifnGNUmake' is set to #, otherwise # it is set to the empty string. This is useful for including a special # features in a Makefile, which can be handled # by other versions of make or to specify else like clause. # * The variable `_cv_gnu_make_command` is set to the command to invoke # GNU make if it exists, the empty string otherwise. # * The variable `ax_cv_gnu_make_command` is set to the command to invoke # GNU make by copying `_cv_gnu_make_command`, otherwise it is unset. # * If GNU Make is found, its version is extracted from the output of # `make --version` as the last field of a record of space-separated # columns and saved into the variable `ax_check_gnu_make_version`. # * Additionally if GNU Make is found, run shell code run-if-true # else run shell code run-if-false. # # Here is an example of its use: # # Makefile.in might contain: # # # A failsafe way of putting a dependency rule into a makefile # $(DEPEND): # $(CC) -MM $(srcdir)/*.c > $(DEPEND) # # @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND))) # @ifGNUmake@ include $(DEPEND) # @ifGNUmake@ else # fallback code # @ifGNUmake@ endif # # Then configure.in would normally contain: # # AX_CHECK_GNU_MAKE() # AC_OUTPUT(Makefile) # # Then perhaps to cause gnu make to override any other make, we could do # something like this (note that GNU make always looks for GNUmakefile # first): # # if ! test x$_cv_gnu_make_command = x ; then # mv Makefile GNUmakefile # echo .DEFAULT: > Makefile ; # echo \ $_cv_gnu_make_command \$@ >> Makefile; # fi # # Then, if any (well almost any) other make is called, and GNU make also # exists, then the other make wraps the GNU make. # # LICENSE # # Copyright (c) 2008 John Darrington # Copyright (c) 2015 Enrico M. Crisostomo # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 11 AC_DEFUN([AX_CHECK_GNU_MAKE],dnl [AC_PROG_AWK AC_CACHE_CHECK([for GNU make],[_cv_gnu_make_command],[dnl _cv_gnu_make_command="" ; dnl Search all the common names for GNU make for a in "$MAKE" make gmake gnumake ; do if test -z "$a" ; then continue ; fi ; if "$a" --version 2> /dev/null | grep GNU 2>&1 > /dev/null ; then _cv_gnu_make_command=$a ; AX_CHECK_GNU_MAKE_HEADLINE=$("$a" --version 2> /dev/null | grep "GNU Make") ax_check_gnu_make_version=$(echo ${AX_CHECK_GNU_MAKE_HEADLINE} | ${AWK} -F " " '{ print $(NF); }') break ; fi done ;]) dnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' otherwise AS_VAR_IF([_cv_gnu_make_command], [""], [AS_VAR_SET([ifGNUmake], ["#"])], [AS_VAR_SET([ifGNUmake], [""])]) AS_VAR_IF([_cv_gnu_make_command], [""], [AS_VAR_SET([ifnGNUmake], [""])], [AS_VAR_SET([ifGNUmake], ["#"])]) AS_VAR_IF([_cv_gnu_make_command], [""], [AS_UNSET(ax_cv_gnu_make_command)], [AS_VAR_SET([ax_cv_gnu_make_command], [${_cv_gnu_make_command}])]) AS_VAR_IF([_cv_gnu_make_command], [""],[$2],[$1]) AC_SUBST([ifGNUmake]) AC_SUBST([ifnGNUmake]) ]) libtasn1-4.16.0/m4/lt~obsolete.m40000644000000000000000000001377413247314711013361 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) libtasn1-4.16.0/m4/pkg.m40000644000000000000000000001214513246341643011562 00000000000000# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.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[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$PKG_CONFIG"; then if test -n "$$1"; then pkg_cv_[]$1="$$1" else PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) fi else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` else $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES libtasn1-4.16.0/m4/libtool.m40000644000000000000000000112617113247314711012450 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || 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 what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; 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* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # 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 no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; 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 # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # 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' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # 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' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # 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 dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-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='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi 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 shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [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 # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; 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 GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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 # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; 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 # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS libtasn1-4.16.0/m4/ltoptions.m40000644000000000000000000003426213247314711013035 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) libtasn1-4.16.0/m4/ax_ac_print_to_file.m40000644000000000000000000000161113514140427014760 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_ac_print_to_file.html # =========================================================================== # # SYNOPSIS # # AX_AC_PRINT_TO_FILE([FILE],[DATA]) # # DESCRIPTION # # Writes the specified data to the specified file when Autoconf is run. If # you want to print to a file when configure is run use AX_PRINT_TO_FILE # instead. # # LICENSE # # Copyright (c) 2009 Allan Caffee # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 10 AC_DEFUN([AX_AC_PRINT_TO_FILE],[ m4_esyscmd( AC_REQUIRE([AX_FILE_ESCAPES]) [ printf "%s" "$2" > "$1" ]) ]) libtasn1-4.16.0/m4/ax_file_escapes.m40000644000000000000000000000137313514140427014107 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_file_escapes.html # =========================================================================== # # SYNOPSIS # # AX_FILE_ESCAPES # # DESCRIPTION # # Writes the specified data to the specified file. # # LICENSE # # Copyright (c) 2008 Tom Howard # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 8 AC_DEFUN([AX_FILE_ESCAPES],[ AX_DOLLAR="\$" AX_SRB="\\135" AX_SLB="\\133" AX_BS="\\\\" AX_DQ="\"" ]) libtasn1-4.16.0/LICENSE0000644000000000000000000000113513514140427011214 00000000000000LICENSING ========= The libtasn1 library is released under the GNU Lesser General Public License (LGPL) version 2.1 or later; see [COPYING.LESSER](doc/COPYING.LESSER) for the license terms. The GNU LGPL applies to the main libtasn1 library, while the included applications library are under the GNU GPL version 3. The libtasn1 library is located in the lib directory, while the applications in src/. The documentation in doc/ is under the GNU FDL license 1.3. For any copyright year range specified as YYYY-ZZZZ in this package note that the range specifies every single year in that closed interval. libtasn1-4.16.0/config.h.in0000644000000000000000000004147613615375037012257 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to the number of bits in type 'ptrdiff_t'. */ #undef BITSIZEOF_PTRDIFF_T /* Define to the number of bits in type 'sig_atomic_t'. */ #undef BITSIZEOF_SIG_ATOMIC_T /* Define to the number of bits in type 'size_t'. */ #undef BITSIZEOF_SIZE_T /* Define to the number of bits in type 'wchar_t'. */ #undef BITSIZEOF_WCHAR_T /* Define to the number of bits in type 'wint_t'. */ #undef BITSIZEOF_WINT_T /* Define to 1 when the gnulib module strverscmp should be tested. */ #undef GNULIB_TEST_STRVERSCMP /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `fmemopen' function. */ #undef HAVE_FMEMOPEN /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if the system has the type 'long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_LIMITS_H /* Define to 1 if defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_SYS_PARAM_H /* Define to 1 if 'sig_atomic_t' is a signed integer type. */ #undef HAVE_SIGNED_SIG_ATOMIC_T /* Define to 1 if 'wchar_t' is a signed integer type. */ #undef HAVE_SIGNED_WCHAR_T /* Define to 1 if 'wint_t' is a signed integer type. */ #undef HAVE_SIGNED_WINT_T /* 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 `strverscmp' function. */ #undef HAVE_STRVERSCMP /* Define to 1 if you have the header file. */ #undef HAVE_SYS_BITYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_INTTYPES_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 the system has the type 'unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT /* Define to 1 or 0, depending whether the compiler supports simple visibility declarations. */ #undef HAVE_VISIBILITY /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if the compiler supports the keyword '__inline'. */ #undef HAVE___INLINE /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'ptrdiff_t'. */ #undef PTRDIFF_T_SUFFIX /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'sig_atomic_t'. */ #undef SIG_ATOMIC_T_SUFFIX /* The size of `unsigned int', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_INT /* The size of `unsigned long int', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG_INT /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'size_t'. */ #undef SIZE_T_SUFFIX /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable NetBSD extensions on NetBSD. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD extensions on NetBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wchar_t'. */ #undef WCHAR_T_SUFFIX /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wint_t'. */ #undef WINT_T_SUFFIX /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 1 to make NetBSD features available. MINIX 3 needs this. */ #undef _NETBSD_SOURCE /* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER))) # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) /* _Noreturn works as-is. */ # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for 'stat' and other things to work. */ #undef _POSIX_SOURCE /* For standard stat data types on VMS. */ #undef _USE_STD_STAT /* Define to 1 if the system predates C++11. */ #undef __STDC_CONSTANT_MACROS /* Define to 1 if the system predates C++11. */ #undef __STDC_LIMIT_MACROS /* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see and . */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif /* Define to `int' if does not define. */ #undef mode_t /* Define to `int' if does not define. */ #undef pid_t /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif /* Define as a signed type of the same size as size_t. */ #undef ssize_t /* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif /* The __malloc__ attribute was added in gcc 3. */ #if 3 <= __GNUC__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) #else # define _GL_ATTRIBUTE_MALLOC /* empty */ #endif libtasn1-4.16.0/examples/0000755000000000000000000000000013615400132012077 500000000000000libtasn1-4.16.0/examples/Makefile.am0000644000000000000000000000245513514412433014066 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes EXTRA_DIST = asn1Coding_test.asn asn1Coding_test.asg LDADD = ../lib/libtasn1.la noinst_PROGRAMS = CertificateExample CrlExample CertificateExample_SOURCES = CertificateExample.c pkix_asn1_tab.c pkix.asn CrlExample_SOURCES = CrlExample.c pkix_asn1_tab.c pkix.asn BUILT_SOURCES = pkix_asn1_tab.c MAINTAINERCLEANFILES = pkix_asn1_tab.c pkix_asn1_tab.c: $(srcdir)/pkix.asn ../src/asn1Parser -o $@ $(srcdir)/pkix.asn libtasn1-4.16.0/examples/asn1Coding_test.asg0000644000000000000000000000006113246341643015550 00000000000000 TEST Test.Sequence1 int1 10 int2 -10 libtasn1-4.16.0/examples/CertificateExample.c0000644000000000000000000005165313246341643015746 00000000000000/* * Copyright (C) 2000-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /*****************************************************/ /* File: CertificateExample.c */ /* Description: An example on how to use the ASN1 */ /* parser with the Certificate.txt file */ /*****************************************************/ #include #include #include #include "libtasn1.h" static char * my_ltostr (long v, char *str) { long d, r; char temp[20]; int count, k, start; if (v < 0) { str[0] = '-'; start = 1; v = -v; } else start = 0; count = 0; do { d = v / 10; r = v - d * 10; temp[start + count] = '0' + (char) r; count++; v = d; } while (v); for (k = 0; k < count; k++) str[k + start] = temp[start + count - k - 1]; str[count + start] = 0; return str; } /******************************************************/ /* Function : get_name_type */ /* Description: analyze a structure of type Name */ /* Parameters: */ /* char *root: the structure identifier */ /* char *answer: the string with elements like: */ /* "C=US O=gov" */ /******************************************************/ static void get_Name_type (ASN1_TYPE cert_def, ASN1_TYPE cert, const char *root, unsigned char *ans) { int k, k2, result, len; char name[128], str[1024], str2[1024], name2[128], counter[5], name3[128]; ASN1_TYPE value = ASN1_TYPE_EMPTY; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; char *answer = (char *) ans; answer[0] = 0; k = 1; do { strcpy (name, root); strcat (name, ".rdnSequence.?"); my_ltostr (k, counter); strcat (name, counter); len = sizeof (str) - 1; result = asn1_read_value (cert, name, str, &len); if (result == ASN1_ELEMENT_NOT_FOUND) break; k2 = 1; do { strcpy (name2, name); strcat (name2, ".?"); my_ltostr (k2, counter); strcat (name2, counter); len = sizeof (str) - 1; result = asn1_read_value (cert, name2, str, &len); if (result == ASN1_ELEMENT_NOT_FOUND) break; strcpy (name3, name2); strcat (name3, ".type"); len = sizeof (str) - 1; result = asn1_read_value (cert, name3, str, &len); strcpy (name3, name2); strcat (name3, ".value"); if (result == ASN1_SUCCESS) { len = sizeof (str2) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str2, &len); if (!strcmp (str, str2)) { asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", &value); len = sizeof (str) - 1; asn1_read_value (cert, name3, str, &len); asn1_der_decoding (&value, str, len, errorDescription); len = sizeof (str) - 1; asn1_read_value (value, "", str, &len); /* CHOICE */ strcpy (name3, str); len = sizeof (str) - 1; asn1_read_value (value, name3, str, &len); str[len] = 0; strcat (answer, " C="); strcat (answer, str); asn1_delete_structure (&value); } else { len = sizeof (str2) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str2, &len); if (!strcmp (str, str2)) { asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", &value); len = sizeof (str) - 1; asn1_read_value (cert, name3, str, &len); asn1_der_decoding (&value, str, len, errorDescription); len = sizeof (str) - 1; asn1_read_value (value, "", str, &len); /* CHOICE */ strcpy (name3, str); len = sizeof (str) - 1; asn1_read_value (value, name3, str, &len); str[len] = 0; strcat (answer, " O="); strcat (answer, str); asn1_delete_structure (&value); } else { len = sizeof (str2) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName", str2, &len); if (!strcmp (str, str2)) { asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationalUnitName", &value); len = sizeof (str) - 1; asn1_read_value (cert, name3, str, &len); asn1_der_decoding (&value, str, len, errorDescription); len = sizeof (str) - 1; asn1_read_value (value, "", str, &len); /* CHOICE */ strcpy (name3, str); len = sizeof (str) - 1; asn1_read_value (value, name3, str, &len); str[len] = 0; strcat (answer, " OU="); strcat (answer, str); asn1_delete_structure (&value); } } } } k2++; } while (1); k++; } while (1); } /******************************************************/ /* Function : create_certificate */ /* Description: creates a certificate named */ /* "certificate1". Values are the same */ /* as in rfc2459 Appendix D.1 */ /* Parameters: */ /* unsigned char *der: contains the der encoding */ /* int *der_len: number of bytes of der string */ /******************************************************/ static void create_certificate (ASN1_TYPE cert_def, unsigned char *der, int *der_len) { int result, k, len; unsigned char str[1024]; const unsigned char *str2; ASN1_TYPE cert1 = ASN1_TYPE_EMPTY; ASN1_TYPE value = ASN1_TYPE_EMPTY; ASN1_TYPE param = ASN1_TYPE_EMPTY; ASN1_TYPE constr = ASN1_TYPE_EMPTY; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; int max_len; max_len = *der_len; result = asn1_create_element (cert_def, "PKIX1Implicit88.Certificate", &cert1); /* Use the next 3 lines to visit the empty certificate */ /* printf("-----------------\n"); asn1_visit_tree(cert1,""); printf("-----------------\n"); */ /* version: v3(2) */ result = asn1_write_value (cert1, "tbsCertificate.version", "v3", 0); /* serialNumber: 17 */ result = asn1_write_value (cert1, "tbsCertificate.serialNumber", "17", 0); /* signature: dsa-with-sha1 */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len); result = asn1_write_value (cert1, "tbsCertificate.signature.algorithm", str, 1); result = asn1_write_value (cert1, "tbsCertificate.signature.parameters", NULL, 0); /* issuer: Country="US" Organization="gov" OrganizationUnit="nist" */ result = asn1_write_value (cert1, "tbsCertificate.issuer", "rdnSequence", 12); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence", "NEW", 1); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST", "NEW", 1); /* C */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str, &len); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.type", str, 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.X520countryName", &value); result = asn1_write_value (value, "", "US", 2); *der_len = max_len; result = asn1_der_coding (value, "", der, der_len, errorDescription); asn1_delete_structure (&value); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.value", der, *der_len); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence", "NEW", 1); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST", "NEW", 1); /* O */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str, &len); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.type", str, 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", &value); result = asn1_write_value (value, "", "printableString", 1); result = asn1_write_value (value, "printableString", "gov", 3); *der_len = max_len; result = asn1_der_coding (value, "", der, der_len, errorDescription); asn1_delete_structure (&value); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.value", der, *der_len); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence", "NEW", 1); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST", "NEW", 1); /* OU */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName", str, &len); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.type", str, 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationalUnitName", &value); result = asn1_write_value (value, "", "printableString", 1); result = asn1_write_value (value, "printableString", "nist", 4); *der_len = max_len; result = asn1_der_coding (value, "", der, der_len, errorDescription); asn1_delete_structure (&value); result = asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.value", der, *der_len); /* validity */ result = asn1_write_value (cert1, "tbsCertificate.validity.notBefore", "utcTime", 1); result = asn1_write_value (cert1, "tbsCertificate.validity.notBefore.utcTime", "970630000000Z", 1); result = asn1_write_value (cert1, "tbsCertificate.validity.notAfter", "utcTime", 1); result = asn1_write_value (cert1, "tbsCertificate.validity.notAfter.utcTime", "971231000000Z", 1); /* subject: Country="US" Organization="gov" OrganizationUnit="nist" */ result = asn1_write_value (cert1, "tbsCertificate.subject", "rdnSequence", 1); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence", "NEW", 1); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); /* C */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str, &len); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST.?LAST.type", str, 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.X520countryName", &value); result = asn1_write_value (value, "", "US", 2); *der_len = max_len; result = asn1_der_coding (value, "", der, der_len, errorDescription); asn1_delete_structure (&value); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST.?LAST.value", der, *der_len); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence", "NEW", 4); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 4); /* O */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str, &len); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST.?LAST.type", str, 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", &value); result = asn1_write_value (value, "", "printableString", 1); result = asn1_write_value (value, "printableString", "gov", 3); *der_len = max_len; result = asn1_der_coding (value, "", der, der_len, errorDescription); asn1_delete_structure (&value); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST.?LAST.value", der, *der_len); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence", "NEW", 4); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 4); /* OU */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName", str, &len); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST.?LAST.type", str, 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationalUnitName", &value); result = asn1_write_value (value, "", "printableString", 1); result = asn1_write_value (value, "printableString", "nist", 4); *der_len = max_len; result = asn1_der_coding (value, "", der, der_len, errorDescription); asn1_delete_structure (&value); result = asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST.?LAST.value", der, *der_len); /* subjectPublicKeyInfo: dsa with parameters=Dss-Parms */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa", str, &len); result = asn1_write_value (cert1, "tbsCertificate.subjectPublicKeyInfo.algorithm.algorithm", str, 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.Dss-Parms", ¶m); str2 = (const unsigned char *) "\xd4\x38"; /* only an example */ result = asn1_write_value (param, "p", str2, 128); str2 = (const unsigned char *) "\xd4\x38"; /* only an example */ result = asn1_write_value (param, "q", str2, 20); str2 = (const unsigned char *) "\xd4\x38"; /* only an example */ result = asn1_write_value (param, "g", str2, 128); *der_len = max_len; result = asn1_der_coding (param, "", der, der_len, errorDescription); asn1_delete_structure (¶m); result = asn1_write_value (cert1, "tbsCertificate.subjectPublicKeyInfo.algorithm.parameters", der, *der_len); /* subjectPublicKey */ str2 = (const unsigned char *) "\x02\x81"; /* only an example */ result = asn1_write_value (cert1, "tbsCertificate.subjectPublicKeyInfo.subjectPublicKey", str2, 1048); result = asn1_write_value (cert1, "tbsCertificate.issuerUniqueID", NULL, 0); /* NO OPTION */ result = asn1_write_value (cert1, "tbsCertificate.subjectUniqueID", NULL, 0); /* NO OPTION */ /* extensions */ result = asn1_write_value (cert1, "tbsCertificate.extensions", "NEW", 1); len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-ce-basicConstraints", str, &len); result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnID", str, 1); /* basicConstraints */ result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.critical", "TRUE", 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.BasicConstraints", &constr); result = asn1_write_value (constr, "cA", "TRUE", 1); result = asn1_write_value (constr, "pathLenConstraint", NULL, 0); *der_len = max_len; result = asn1_der_coding (constr, "", der, der_len, errorDescription); result = asn1_delete_structure (&constr); result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnValue", der, *der_len); result = asn1_write_value (cert1, "tbsCertificate.extensions", "NEW", 1); len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-ce-subjectKeyIdentifier", str, &len); result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnID", str, 1); /* subjectKeyIdentifier */ result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.critical", "FALSE", 1); str2 = (const unsigned char *) "\x04\x14\xe7\x26\xc5"; /* only an example */ result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnValue", str2, 22); /* signatureAlgorithm: dsa-with-sha */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len); result = asn1_write_value (cert1, "signatureAlgorithm.algorithm", str, 1); result = asn1_write_value (cert1, "signatureAlgorithm.parameters", NULL, 0); /* NO OPTION */ /* signature */ *der_len = max_len; result = asn1_der_coding (cert1, "tbsCertificate", der, der_len, errorDescription); if (result != ASN1_SUCCESS) { printf ("\n'tbsCertificate' encoding creation: ERROR\n"); } /* add the lines for the signature on der[0]..der[der_len-1]: result in str2 */ result = asn1_write_value (cert1, "signature", str2, 368); /* dsa-with-sha */ /* Use the next 3 lines to visit the certificate */ /* printf("-----------------\n"); asn1_visit_tree(cert1,""); printf("-----------------\n"); */ *der_len = max_len; result = asn1_der_coding (cert1, "", der, der_len, errorDescription); if (result != ASN1_SUCCESS) { printf ("\n'certificate' encoding creation: ERROR\n"); return; } /* Print the 'Certificate1' DER encoding */ printf ("-----------------\nCertificate Encoding:\nNumber of bytes=%i\n", *der_len); for (k = 0; k < *der_len; k++) printf ("%02x ", der[k]); printf ("\n-----------------\n"); /* Clear the "certificate1" structure */ asn1_delete_structure (&cert1); } /******************************************************/ /* Function : get_certificate */ /* Description: creates a certificate named */ /* "certificate2" from a der encoding */ /* string */ /* Parameters: */ /* unsigned char *der: the encoding string */ /* int der_len: number of bytes of der string */ /******************************************************/ static void get_certificate (ASN1_TYPE cert_def, unsigned char *der, int der_len) { int result, len, start, end; unsigned char str[1024], str2[1024]; ASN1_TYPE cert2 = ASN1_TYPE_EMPTY; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; asn1_create_element (cert_def, "PKIX1Implicit88.Certificate", &cert2); result = asn1_der_decoding (&cert2, der, der_len, errorDescription); if (result != ASN1_SUCCESS) { printf ("Problems with DER encoding\n"); return; } /* issuer */ get_Name_type (cert_def, cert2, "tbsCertificate.issuer", str); printf ("certificate:\nissuer :%s\n", str); /* subject */ get_Name_type (cert_def, cert2, "tbsCertificate.subject", str); printf ("subject:%s\n", str); /* Verify sign */ len = sizeof (str) - 1; result = asn1_read_value (cert2, "signatureAlgorithm.algorithm", str, &len); len = sizeof (str2) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str2, &len); if (!strcmp ((char *) str, (char *) str2)) { /* dsa-with-sha */ result = asn1_der_decoding_startEnd (cert2, der, der_len, "tbsCertificate", &start, &end); /* add the lines to calculate the sha on der[start]..der[end] */ len = sizeof (str) - 1; result = asn1_read_value (cert2, "signature", str, &len); /* compare the previous value to signature ( with issuer public key) */ } /* Use the next 3 lines to visit the certificate */ /* printf("-----------------\n"); asn1_visit_tree(cert2,""); printf("-----------------\n"); */ /* Clear the "certificate2" structure */ asn1_delete_structure (&cert2); } extern const ASN1_ARRAY_TYPE pkix_asn1_tab[]; /********************************************************/ /* Function : main */ /* Description: reads the certificate description. */ /* Creates a certificate and calculate */ /* the der encoding. After that creates */ /* another certificate from der string */ /********************************************************/ int main (int argc, char *argv[]) { int result, der_len; unsigned char der[1024]; ASN1_TYPE PKIX1Implicit88 = ASN1_TYPE_EMPTY; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; if (1) result = asn1_array2tree (pkix_asn1_tab, &PKIX1Implicit88, errorDescription); else result = asn1_parser2tree ("pkix.asn", &PKIX1Implicit88, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("%s", errorDescription); exit (1); } /* Use the following 3 lines to visit the PKIX1Implicit structures */ /* printf("-----------------\n"); asn1_visit_tree(PKIX1Implicit88,"PKIX1Implicit88"); printf("-----------------\n"); */ der_len = 1024; create_certificate (PKIX1Implicit88, der, &der_len); get_certificate (PKIX1Implicit88, der, der_len); /* Clear the "PKIX1Implicit88" structures */ asn1_delete_structure (&PKIX1Implicit88); return 0; } libtasn1-4.16.0/examples/pkix.asn0000644000000000000000000007712213246341643013521 00000000000000-- Copyright (C) 2002-2014 Free Software Foundation, Inc. -- -- This file is part of LIBTASN1. -- -- 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 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . PKIX1Implicit88 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)} DEFINITIONS IMPLICIT TAGS ::= BEGIN -- ISO arc for standard certificate and CRL extensions id-ce OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 29} -- authority key identifier OID and syntax id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } AuthorityKeyIdentifier ::= SEQUENCE { keyIdentifier [0] KeyIdentifier OPTIONAL, authorityCertIssuer [1] GeneralNames OPTIONAL, authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL } -- authorityCertIssuer and authorityCertSerialNumber shall both -- be present or both be absgent KeyIdentifier ::= OCTET STRING -- subject key identifier OID and syntax id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } SubjectKeyIdentifier ::= KeyIdentifier -- key usage extension OID and syntax id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } KeyUsage ::= BIT STRING { digitalSignature (0), nonRepudiation (1), keyEncipherment (2), dataEncipherment (3), keyAgreement (4), keyCertSign (5), cRLSign (6), encipherOnly (7), decipherOnly (8) } -- private key usage period extension OID and syntax id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 } PrivateKeyUsagePeriod ::= SEQUENCE { notBefore [0] GeneralizedTime OPTIONAL, notAfter [1] GeneralizedTime OPTIONAL } -- either notBefore or notAfter shall be present -- certificate policies extension OID and syntax id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation PolicyInformation ::= SEQUENCE { policyIdentifier CertPolicyId, policyQualifiers SEQUENCE SIZE (1..MAX) OF PolicyQualifierInfo OPTIONAL } CertPolicyId ::= OBJECT IDENTIFIER PolicyQualifierInfo ::= SEQUENCE { policyQualifierId PolicyQualifierId, qualifier ANY DEFINED BY policyQualifierId } -- Implementations that recognize additional policy qualifiers shall -- augment the following definition for PolicyQualifierId PolicyQualifierId ::= OBJECT IDENTIFIER -- ( id-qt-cps | id-qt-unotice ) -- CPS pointer qualifier CPSuri ::= IA5String -- user notice qualifier UserNotice ::= SEQUENCE { noticeRef NoticeReference OPTIONAL, explicitText DisplayText OPTIONAL} NoticeReference ::= SEQUENCE { organization DisplayText, noticeNumbers SEQUENCE OF INTEGER } DisplayText ::= CHOICE { visibleString VisibleString (SIZE (1..200)), bmpString BMPString (SIZE (1..200)), utf8String UTF8String (SIZE (1..200)) } -- policy mapping extension OID and syntax id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE { issuerDomainPolicy CertPolicyId, subjectDomainPolicy CertPolicyId } -- subject alternative name extension OID and syntax id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 } SubjectAltName ::= GeneralNames GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName GeneralName ::= CHOICE { otherName [0] AnotherName, rfc822Name [1] IA5String, dNSName [2] IA5String, x400Address [3] ORAddress, directoryName [4] Name, ediPartyName [5] EDIPartyName, uniformResourceIdentifier [6] IA5String, iPAddress [7] OCTET STRING, registeredID [8] OBJECT IDENTIFIER } -- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as -- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax AnotherName ::= SEQUENCE { type-id OBJECT IDENTIFIER, value [0] EXPLICIT ANY DEFINED BY type-id } EDIPartyName ::= SEQUENCE { nameAssigner [0] DirectoryString OPTIONAL, partyName [1] DirectoryString } -- issuer alternative name extension OID and syntax id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } IssuerAltName ::= GeneralNames id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute -- basic constraints extension OID and syntax id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } BasicConstraints ::= SEQUENCE { cA BOOLEAN DEFAULT FALSE, pathLenConstraint INTEGER (0..MAX) OPTIONAL } -- name constraints extension OID and syntax id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL } GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree GeneralSubtree ::= SEQUENCE { base GeneralName, minimum [0] BaseDistance DEFAULT 0, maximum [1] BaseDistance OPTIONAL } BaseDistance ::= INTEGER (0..MAX) -- policy constraints extension OID and syntax id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } PolicyConstraints ::= SEQUENCE { requireExplicitPolicy [0] SkipCerts OPTIONAL, inhibitPolicyMapping [1] SkipCerts OPTIONAL } SkipCerts ::= INTEGER (0..MAX) -- CRL distribution points extension OID and syntax id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= {id-ce 31} CRLDistPointsSyntax ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint DistributionPoint ::= SEQUENCE { distributionPoint [0] DistributionPointName OPTIONAL, reasons [1] ReasonFlags OPTIONAL, cRLIssuer [2] GeneralNames OPTIONAL } DistributionPointName ::= CHOICE { fullName [0] GeneralNames, nameRelativeToCRLIssuer [1] RelativeDistinguishedName } ReasonFlags ::= BIT STRING { unused (0), keyCompromise (1), cACompromise (2), affiliationChanged (3), superseded (4), cessationOfOperation (5), certificateHold (6) } -- extended key usage extension OID and syntax id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37} ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId KeyPurposeId ::= OBJECT IDENTIFIER -- extended key purpose OIDs id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 } id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 } id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 } id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 } id-kp-ipsecEndSystem OBJECT IDENTIFIER ::= { id-kp 5 } id-kp-ipsecTunnel OBJECT IDENTIFIER ::= { id-kp 6 } id-kp-ipsecUser OBJECT IDENTIFIER ::= { id-kp 7 } id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } -- authority info access id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 } AuthorityInfoAccessSyntax ::= SEQUENCE SIZE (1..MAX) OF AccessDescription AccessDescription ::= SEQUENCE { accessMethod OBJECT IDENTIFIER, accessLocation GeneralName } -- CRL number extension OID and syntax id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 } CRLNumber ::= INTEGER (0..MAX) -- issuing distribution point extension OID and syntax id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 } IssuingDistributionPoint ::= SEQUENCE { distributionPoint [0] DistributionPointName OPTIONAL, onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE, onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE, onlySomeReasons [3] ReasonFlags OPTIONAL, indirectCRL [4] BOOLEAN DEFAULT FALSE } id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 } -- deltaCRLIndicator ::= BaseCRLNumber BaseCRLNumber ::= CRLNumber -- CRL reasons extension OID and syntax id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 } CRLReason ::= ENUMERATED { unspecified (0), keyCompromise (1), cACompromise (2), affiliationChanged (3), superseded (4), cessationOfOperation (5), certificateHold (6), removeFromCRL (8) } -- certificate issuer CRL entry extension OID and syntax id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 } CertificateIssuer ::= GeneralNames -- hold instruction extension OID and syntax id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 } HoldInstructionCode ::= OBJECT IDENTIFIER -- ANSI x9 holdinstructions -- ANSI x9 arc holdinstruction arc holdInstruction OBJECT IDENTIFIER ::= {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2} -- ANSI X9 holdinstructions referenced by this standard id-holdinstruction-none OBJECT IDENTIFIER ::= {holdInstruction 1} -- deprecated id-holdinstruction-callissuer OBJECT IDENTIFIER ::= {holdInstruction 2} id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3} -- invalidity date CRL entry extension OID and syntax id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 } InvalidityDate ::= GeneralizedTime -- -------------------------------------- -- EXPLICIT -- -------------------------------------- -- UNIVERSAL Types defined in '93 and '98 ASN.1 -- but required by this specification VisibleString ::= [UNIVERSAL 26] IMPLICIT OCTET STRING NumericString ::= [UNIVERSAL 18] IMPLICIT OCTET STRING IA5String ::= [UNIVERSAL 22] IMPLICIT OCTET STRING TeletexString ::= [UNIVERSAL 20] IMPLICIT OCTET STRING PrintableString ::= [UNIVERSAL 19] IMPLICIT OCTET STRING UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING -- UniversalString is defined in ASN.1:1993 BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING -- BMPString is the subtype of UniversalString and models -- the Basic Multilingual Plane of ISO/IEC/ITU 10646-1 UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING -- The content of this type conforms to RFC 2279. -- PKIX specific OIDs id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) } -- PKIX arcs id-pe OBJECT IDENTIFIER ::= { id-pkix 1 } -- arc for private certificate extensions id-qt OBJECT IDENTIFIER ::= { id-pkix 2 } -- arc for policy qualifier types id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } -- arc for extended key purpose OIDS id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } -- arc for access descriptors -- policyQualifierIds for Internet policy qualifiers id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 } -- OID for CPS qualifier id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 } -- OID for user notice qualifier -- access descriptor definitions id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 } id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 } -- attribute data types -- Attribute ::= SEQUENCE { type AttributeType, values SET OF AttributeValue -- at least one value is required -- } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY AttributeTypeAndValue ::= SEQUENCE { type AttributeType, value AttributeValue } -- suggested naming attributes: Definition of the following -- information object set may be augmented to meet local -- requirements. Note that deleting members of the set may -- prevent interoperability with conforming implementations. -- presented in pairs: the AttributeType followed by the -- type definition for the corresponding AttributeValue -- Arc for standard naming attributes id-at OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 4} -- Attributes of type NameDirectoryString id-at-name AttributeType ::= {id-at 41} id-at-surname AttributeType ::= {id-at 4} id-at-givenName AttributeType ::= {id-at 42} id-at-initials AttributeType ::= {id-at 43} id-at-generationQualifier AttributeType ::= {id-at 44} X520name ::= CHOICE { teletexString TeletexString (SIZE (1..ub-name)), printableString PrintableString (SIZE (1..ub-name)), universalString UniversalString (SIZE (1..ub-name)), utf8String UTF8String (SIZE (1..ub-name)), bmpString BMPString (SIZE(1..ub-name)) } -- id-at-commonName AttributeType ::= {id-at 3} X520CommonName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-common-name)), printableString PrintableString (SIZE (1..ub-common-name)), universalString UniversalString (SIZE (1..ub-common-name)), utf8String UTF8String (SIZE (1..ub-common-name)), bmpString BMPString (SIZE(1..ub-common-name)) } -- id-at-localityName AttributeType ::= {id-at 7} X520LocalityName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-locality-name)), printableString PrintableString (SIZE (1..ub-locality-name)), universalString UniversalString (SIZE (1..ub-locality-name)), utf8String UTF8String (SIZE (1..ub-locality-name)), bmpString BMPString (SIZE(1..ub-locality-name)) } -- id-at-stateOrProvinceName AttributeType ::= {id-at 8} X520StateOrProvinceName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-state-name)), printableString PrintableString (SIZE (1..ub-state-name)), universalString UniversalString (SIZE (1..ub-state-name)), utf8String UTF8String (SIZE (1..ub-state-name)), bmpString BMPString (SIZE(1..ub-state-name)) } -- id-at-organizationName AttributeType ::= {id-at 10} X520OrganizationName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-organization-name)), printableString PrintableString (SIZE (1..ub-organization-name)), universalString UniversalString (SIZE (1..ub-organization-name)), utf8String UTF8String (SIZE (1..ub-organization-name)), bmpString BMPString (SIZE(1..ub-organization-name)) } -- id-at-organizationalUnitName AttributeType ::= {id-at 11} X520OrganizationalUnitName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-organizational-unit-name)), printableString PrintableString (SIZE (1..ub-organizational-unit-name)), universalString UniversalString (SIZE (1..ub-organizational-unit-name)), utf8String UTF8String (SIZE (1..ub-organizational-unit-name)), bmpString BMPString (SIZE(1..ub-organizational-unit-name)) } -- id-at-title AttributeType ::= {id-at 12} X520Title ::= CHOICE { teletexString TeletexString (SIZE (1..ub-title)), printableString PrintableString (SIZE (1..ub-title)), universalString UniversalString (SIZE (1..ub-title)), utf8String UTF8String (SIZE (1..ub-title)), bmpString BMPString (SIZE(1..ub-title)) } -- id-at-dnQualifier AttributeType ::= {id-at 46} X520dnQualifier ::= PrintableString id-at-countryName AttributeType ::= {id-at 6} X520countryName ::= PrintableString (SIZE (2)) -- IS 3166 codes -- Legacy attributes pkcs-9 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 } emailAddress AttributeType ::= { pkcs-9 1 } Pkcs9email ::= IA5String (SIZE (1..ub-emailaddress-length)) -- naming data types -- Name ::= CHOICE { -- only one possibility for now -- rdnSequence RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName DistinguishedName ::= RDNSequence RelativeDistinguishedName ::= SET SIZE (1 .. MAX) OF AttributeTypeAndValue -- Directory string type -- DirectoryString ::= CHOICE { teletexString TeletexString (SIZE (1..MAX)), printableString PrintableString (SIZE (1..MAX)), universalString UniversalString (SIZE (1..MAX)), utf8String UTF8String (SIZE (1..MAX)), bmpString BMPString (SIZE(1..MAX)) } -- -------------------------------------------------------- -- certificate and CRL specific structures begin here -- -------------------------------------------------------- Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } TBSCertificate ::= SEQUENCE { version [0] EXPLICIT Version DEFAULT v1, serialNumber CertificateSerialNumber, signature AlgorithmIdentifier, issuer Name, validity Validity, subject Name, subjectPublicKeyInfo SubjectPublicKeyInfo, issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version shall be v2 or v3 subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version shall be v2 or v3 extensions [3] EXPLICIT Extensions OPTIONAL -- If present, version shall be v3 -- } Version ::= INTEGER { v1(0), v2(1), v3(2) } CertificateSerialNumber ::= INTEGER Validity ::= SEQUENCE { notBefore Time, notAfter Time } Time ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime } UniqueIdentifier ::= BIT STRING SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BIT STRING } Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension Extension ::= SEQUENCE { extnID OBJECT IDENTIFIER, critical BOOLEAN DEFAULT FALSE, extnValue OCTET STRING } -- ------------------------------------------ -- CRL structures -- ------------------------------------------ CertificateList ::= SEQUENCE { tbsCertList TBSCertList, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } TBSCertList ::= SEQUENCE { version Version OPTIONAL, -- if present, shall be v2 signature AlgorithmIdentifier, issuer Name, thisUpdate Time, nextUpdate Time OPTIONAL, revokedCertificates SEQUENCE OF SEQUENCE { userCertificate CertificateSerialNumber, revocationDate Time, crlEntryExtensions Extensions OPTIONAL -- if present, shall be v2 } OPTIONAL, crlExtensions [0] EXPLICIT Extensions OPTIONAL -- if present, shall be v2 -- } -- Version, Time, CertificateSerialNumber, and Extensions were -- defined earlier for use in the certificate structure AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL } -- contains a value of the type -- registered for use with the -- algorithm object identifier value -- Algorithm OIDs and parameter structures pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 } rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 } md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 } sha1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 } id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 } Dss-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER } dhpublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1 } DomainParameters ::= SEQUENCE { p INTEGER, -- odd prime, p=jq +1 g INTEGER, -- generator, g q INTEGER, -- factor of p-1 j INTEGER OPTIONAL, -- subgroup factor, j>= 2 validationParms ValidationParms OPTIONAL } ValidationParms ::= SEQUENCE { seed BIT STRING, pgenCounter INTEGER } id-dsa OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 } Dss-Parms ::= SEQUENCE { p INTEGER, q INTEGER, g INTEGER } -- x400 address syntax starts here -- OR Names ORAddress ::= SEQUENCE { built-in-standard-attributes BuiltInStandardAttributes, built-in-domain-defined-attributes BuiltInDomainDefinedAttributes OPTIONAL, -- see also teletex-domain-defined-attributes extension-attributes ExtensionAttributes OPTIONAL } -- The OR-address is semantically absent from the OR-name if the -- built-in-standard-attribute sequence is empty and the -- built-in-domain-defined-attributes and extension-attributes are -- both omitted. -- Built-in Standard Attributes BuiltInStandardAttributes ::= SEQUENCE { country-name CountryName OPTIONAL, administration-domain-name AdministrationDomainName OPTIONAL, network-address [0] EXPLICIT NetworkAddress OPTIONAL, -- see also extended-network-address terminal-identifier [1] EXPLICIT TerminalIdentifier OPTIONAL, private-domain-name [2] EXPLICIT PrivateDomainName OPTIONAL, organization-name [3] EXPLICIT OrganizationName OPTIONAL, -- see also teletex-organization-name numeric-user-identifier [4] EXPLICIT NumericUserIdentifier OPTIONAL, personal-name [5] EXPLICIT PersonalName OPTIONAL, -- see also teletex-personal-name organizational-unit-names [6] EXPLICIT OrganizationalUnitNames OPTIONAL -- see also teletex-organizational-unit-names -- } CountryName ::= [APPLICATION 1] CHOICE { x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)), iso-3166-alpha2-code PrintableString (SIZE (ub-country-name-alpha-length)) } AdministrationDomainName ::= [APPLICATION 2] EXPLICIT CHOICE { numeric NumericString (SIZE (0..ub-domain-name-length)), printable PrintableString (SIZE (0..ub-domain-name-length)) } NetworkAddress ::= X121Address -- see also extended-network-address X121Address ::= NumericString (SIZE (1..ub-x121-address-length)) TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length)) PrivateDomainName ::= CHOICE { numeric NumericString (SIZE (1..ub-domain-name-length)), printable PrintableString (SIZE (1..ub-domain-name-length)) } OrganizationName ::= PrintableString (SIZE (1..ub-organization-name-length)) -- see also teletex-organization-name NumericUserIdentifier ::= NumericString (SIZE (1..ub-numeric-user-id-length)) PersonalName ::= SET { surname [0] PrintableString (SIZE (1..ub-surname-length)), given-name [1] PrintableString (SIZE (1..ub-given-name-length)) OPTIONAL, initials [2] PrintableString (SIZE (1..ub-initials-length)) OPTIONAL, generation-qualifier [3] PrintableString (SIZE (1..ub-generation-qualifier-length)) OPTIONAL } -- see also teletex-personal-name OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units) OF OrganizationalUnitName -- see also teletex-organizational-unit-names OrganizationalUnitName ::= PrintableString (SIZE (1..ub-organizational-unit-name-length)) -- Built-in Domain-defined Attributes BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE (1..ub-domain-defined-attributes) OF BuiltInDomainDefinedAttribute BuiltInDomainDefinedAttribute ::= SEQUENCE { type PrintableString (SIZE (1..ub-domain-defined-attribute-type-length)), value PrintableString (SIZE (1..ub-domain-defined-attribute-value-length))} -- Extension Attributes ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF ExtensionAttribute ExtensionAttribute ::= SEQUENCE { extension-attribute-type [0] EXPLICIT INTEGER (0..ub-extension-attributes), extension-attribute-value [1] EXPLICIT ANY DEFINED BY extension-attribute-type } -- Extension types and attribute values -- common-name INTEGER ::= 1 CommonName ::= PrintableString (SIZE (1..ub-common-name-length)) teletex-common-name INTEGER ::= 2 TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length)) teletex-organization-name INTEGER ::= 3 TeletexOrganizationName ::= TeletexString (SIZE (1..ub-organization-name-length)) teletex-personal-name INTEGER ::= 4 TeletexPersonalName ::= SET { surname [0] EXPLICIT TeletexString (SIZE (1..ub-surname-length)), given-name [1] EXPLICIT TeletexString (SIZE (1..ub-given-name-length)) OPTIONAL, initials [2] EXPLICIT TeletexString (SIZE (1..ub-initials-length)) OPTIONAL, generation-qualifier [3] EXPLICIT TeletexString (SIZE (1..ub-generation-qualifier-length)) OPTIONAL } teletex-organizational-unit-names INTEGER ::= 5 TeletexOrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units) OF TeletexOrganizationalUnitName TeletexOrganizationalUnitName ::= TeletexString (SIZE (1..ub-organizational-unit-name-length)) pds-name INTEGER ::= 7 PDSName ::= PrintableString (SIZE (1..ub-pds-name-length)) physical-delivery-country-name INTEGER ::= 8 PhysicalDeliveryCountryName ::= CHOICE { x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)), iso-3166-alpha2-code PrintableString (SIZE (ub-country-name-alpha-length)) } postal-code INTEGER ::= 9 PostalCode ::= CHOICE { numeric-code NumericString (SIZE (1..ub-postal-code-length)), printable-code PrintableString (SIZE (1..ub-postal-code-length)) } physical-delivery-office-name INTEGER ::= 10 PhysicalDeliveryOfficeName ::= PDSParameter physical-delivery-office-number INTEGER ::= 11 PhysicalDeliveryOfficeNumber ::= PDSParameter extension-OR-address-components INTEGER ::= 12 ExtensionORAddressComponents ::= PDSParameter physical-delivery-personal-name INTEGER ::= 13 PhysicalDeliveryPersonalName ::= PDSParameter physical-delivery-organization-name INTEGER ::= 14 PhysicalDeliveryOrganizationName ::= PDSParameter extension-physical-delivery-address-components INTEGER ::= 15 ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter unformatted-postal-address INTEGER ::= 16 UnformattedPostalAddress ::= SET { printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL, teletex-string TeletexString (SIZE (1..ub-unformatted-address-length)) OPTIONAL } street-address INTEGER ::= 17 StreetAddress ::= PDSParameter post-office-box-address INTEGER ::= 18 PostOfficeBoxAddress ::= PDSParameter poste-restante-address INTEGER ::= 19 PosteRestanteAddress ::= PDSParameter unique-postal-name INTEGER ::= 20 UniquePostalName ::= PDSParameter local-postal-attributes INTEGER ::= 21 LocalPostalAttributes ::= PDSParameter PDSParameter ::= SET { printable-string PrintableString (SIZE(1..ub-pds-parameter-length)) OPTIONAL, teletex-string TeletexString (SIZE(1..ub-pds-parameter-length)) OPTIONAL } extended-network-address INTEGER ::= 22 ExtendedNetworkAddress ::= CHOICE { e163-4-address SEQUENCE { number [0] EXPLICIT NumericString (SIZE (1..ub-e163-4-number-length)), sub-address [1] EXPLICIT NumericString (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL }, psap-address [0] EXPLICIT PresentationAddress } PresentationAddress ::= SEQUENCE { pSelector [0] EXPLICIT OCTET STRING OPTIONAL, sSelector [1] EXPLICIT OCTET STRING OPTIONAL, tSelector [2] EXPLICIT OCTET STRING OPTIONAL, nAddresses [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING } terminal-type INTEGER ::= 23 TerminalType ::= INTEGER { telex (3), teletex (4), g3-facsimile (5), g4-facsimile (6), ia5-terminal (7), videotex (8) } (0..ub-integer-options) -- Extension Domain-defined Attributes teletex-domain-defined-attributes INTEGER ::= 6 TeletexDomainDefinedAttributes ::= SEQUENCE SIZE (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute TeletexDomainDefinedAttribute ::= SEQUENCE { type TeletexString (SIZE (1..ub-domain-defined-attribute-type-length)), value TeletexString (SIZE (1..ub-domain-defined-attribute-value-length)) } -- specifications of Upper Bounds shall be regarded as mandatory -- from Annex B of ITU-T X.411 Reference Definition of MTS Parameter -- Upper Bounds -- Upper Bounds ub-name INTEGER ::= 32768 ub-common-name INTEGER ::= 64 ub-locality-name INTEGER ::= 128 ub-state-name INTEGER ::= 128 ub-organization-name INTEGER ::= 64 ub-organizational-unit-name INTEGER ::= 64 ub-title INTEGER ::= 64 ub-match INTEGER ::= 128 ub-emailaddress-length INTEGER ::= 128 ub-common-name-length INTEGER ::= 64 ub-country-name-alpha-length INTEGER ::= 2 ub-country-name-numeric-length INTEGER ::= 3 ub-domain-defined-attributes INTEGER ::= 4 ub-domain-defined-attribute-type-length INTEGER ::= 8 ub-domain-defined-attribute-value-length INTEGER ::= 128 ub-domain-name-length INTEGER ::= 16 ub-extension-attributes INTEGER ::= 256 ub-e163-4-number-length INTEGER ::= 15 ub-e163-4-sub-address-length INTEGER ::= 40 ub-generation-qualifier-length INTEGER ::= 3 ub-given-name-length INTEGER ::= 16 ub-initials-length INTEGER ::= 5 ub-integer-options INTEGER ::= 256 ub-numeric-user-id-length INTEGER ::= 32 ub-organization-name-length INTEGER ::= 64 ub-organizational-unit-name-length INTEGER ::= 32 ub-organizational-units INTEGER ::= 4 ub-pds-name-length INTEGER ::= 16 ub-pds-parameter-length INTEGER ::= 30 ub-pds-physical-address-lines INTEGER ::= 6 ub-postal-code-length INTEGER ::= 16 ub-surname-length INTEGER ::= 40 ub-terminal-id-length INTEGER ::= 24 ub-unformatted-address-length INTEGER ::= 180 ub-x121-address-length INTEGER ::= 16 -- Note - upper bounds on string types, such as TeletexString, are -- measured in characters. Excepting PrintableString or IA5String, a -- significantly greater number of octets will be required to hold -- such a value. As a minimum, 16 octets, or twice the specified upper -- bound, whichever is the larger, should be allowed for TeletexString. -- For UTF8String or UniversalString at least four times the upper -- bound should be allowed. END libtasn1-4.16.0/examples/asn1Coding_test.asn0000644000000000000000000000153413246341643015565 00000000000000Test { } DEFINITIONS IMPLICIT TAGS ::= BEGIN Sequence1 ::= SEQUENCE { int1 INTEGER, int2 INTEGER } END -- Copyright (C) 2002-2014 Free Software Foundation, Inc. -- -- This file is part of LIBTASN1. -- -- 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 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . libtasn1-4.16.0/examples/Makefile.in0000644000000000000000000006576213615375040014115 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = CertificateExample$(EXEEXT) CrlExample$(EXEEXT) subdir = examples ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ $(top_srcdir)/m4/ax_am_macros_static.m4 \ $(top_srcdir)/m4/ax_check_gnu_make.m4 \ $(top_srcdir)/m4/ax_code_coverage.m4 \ $(top_srcdir)/m4/ax_file_escapes.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4-gl/00gnulib.m4 \ $(top_srcdir)/m4-gl/__inline.m4 \ $(top_srcdir)/m4-gl/absolute-header.m4 \ $(top_srcdir)/m4-gl/extensions.m4 \ $(top_srcdir)/m4-gl/extern-inline.m4 \ $(top_srcdir)/m4-gl/gnulib-common.m4 \ $(top_srcdir)/m4-gl/gnulib-comp.m4 \ $(top_srcdir)/m4-gl/include_next.m4 \ $(top_srcdir)/m4-gl/ld-version-script.m4 \ $(top_srcdir)/m4-gl/limits-h.m4 \ $(top_srcdir)/m4-gl/longlong.m4 \ $(top_srcdir)/m4-gl/manywarnings.m4 \ $(top_srcdir)/m4-gl/minmax.m4 $(top_srcdir)/m4-gl/multiarch.m4 \ $(top_srcdir)/m4-gl/off_t.m4 $(top_srcdir)/m4-gl/ssize_t.m4 \ $(top_srcdir)/m4-gl/stdbool.m4 $(top_srcdir)/m4-gl/stddef_h.m4 \ $(top_srcdir)/m4-gl/stdint.m4 $(top_srcdir)/m4-gl/string_h.m4 \ $(top_srcdir)/m4-gl/strverscmp.m4 \ $(top_srcdir)/m4-gl/sys_types_h.m4 \ $(top_srcdir)/m4-gl/valgrind-tests.m4 \ $(top_srcdir)/m4-gl/visibility.m4 \ $(top_srcdir)/m4-gl/warn-on-use.m4 \ $(top_srcdir)/m4-gl/warnings.m4 $(top_srcdir)/m4-gl/wchar_t.m4 \ $(top_srcdir)/m4-gl/wint_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_CertificateExample_OBJECTS = CertificateExample.$(OBJEXT) \ pkix_asn1_tab.$(OBJEXT) CertificateExample_OBJECTS = $(am_CertificateExample_OBJECTS) CertificateExample_LDADD = $(LDADD) CertificateExample_DEPENDENCIES = ../lib/libtasn1.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_CrlExample_OBJECTS = CrlExample.$(OBJEXT) pkix_asn1_tab.$(OBJEXT) CrlExample_OBJECTS = $(am_CrlExample_OBJECTS) CrlExample_LDADD = $(LDADD) CrlExample_DEPENDENCIES = ../lib/libtasn1.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/CertificateExample.Po \ ./$(DEPDIR)/CrlExample.Po ./$(DEPDIR)/pkix_asn1_tab.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(CertificateExample_SOURCES) $(CrlExample_SOURCES) DIST_SOURCES = $(CertificateExample_SOURCES) $(CrlExample_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASN1_VERSION_MAJOR = @ASN1_VERSION_MAJOR@ ASN1_VERSION_MINOR = @ASN1_VERSION_MINOR@ ASN1_VERSION_NUMBER = @ASN1_VERSION_NUMBER@ ASN1_VERSION_PATCH = @ASN1_VERSION_PATCH@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FUZZ_LIBS = @FUZZ_LIBS@ GCOV = @GCOV@ GENHTML = @GENHTML@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTOOL = @LIBTOOL@ LIB_FUZZING_ENGINE = @LIB_FUZZING_ENGINE@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ ifGNUmake = @ifGNUmake@ ifnGNUmake = @ifnGNUmake@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes EXTRA_DIST = asn1Coding_test.asn asn1Coding_test.asg LDADD = ../lib/libtasn1.la CertificateExample_SOURCES = CertificateExample.c pkix_asn1_tab.c pkix.asn CrlExample_SOURCES = CrlExample.c pkix_asn1_tab.c pkix.asn BUILT_SOURCES = pkix_asn1_tab.c MAINTAINERCLEANFILES = pkix_asn1_tab.c all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list CertificateExample$(EXEEXT): $(CertificateExample_OBJECTS) $(CertificateExample_DEPENDENCIES) $(EXTRA_CertificateExample_DEPENDENCIES) @rm -f CertificateExample$(EXEEXT) $(AM_V_CCLD)$(LINK) $(CertificateExample_OBJECTS) $(CertificateExample_LDADD) $(LIBS) CrlExample$(EXEEXT): $(CrlExample_OBJECTS) $(CrlExample_DEPENDENCIES) $(EXTRA_CrlExample_DEPENDENCIES) @rm -f CrlExample$(EXEEXT) $(AM_V_CCLD)$(LINK) $(CrlExample_OBJECTS) $(CrlExample_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CertificateExample.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrlExample.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkix_asn1_tab.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/CertificateExample.Po -rm -f ./$(DEPDIR)/CrlExample.Po -rm -f ./$(DEPDIR)/pkix_asn1_tab.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/CertificateExample.Po -rm -f ./$(DEPDIR)/CrlExample.Po -rm -f ./$(DEPDIR)/pkix_asn1_tab.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile pkix_asn1_tab.c: $(srcdir)/pkix.asn ../src/asn1Parser -o $@ $(srcdir)/pkix.asn # 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: libtasn1-4.16.0/examples/pkix_asn1_tab.c0000644000000000000000000010147113247315043014721 00000000000000#if HAVE_CONFIG_H # include "config.h" #endif #include const asn1_static_node pkix_asn1_tab[] = { { "PKIX1Implicit88", 536875024, NULL }, { NULL, 1610612748, NULL }, { "iso", 1073741825, "1"}, { "identified-organization", 1073741825, "3"}, { "dod", 1073741825, "6"}, { "internet", 1073741825, "1"}, { "security", 1073741825, "5"}, { "mechanisms", 1073741825, "5"}, { "pkix", 1073741825, "7"}, { "id-mod", 1073741825, "0"}, { "id-pkix1-implicit-88", 1, "2"}, { "id-ce", 1879048204, NULL }, { "joint-iso-ccitt", 1073741825, "2"}, { "ds", 1073741825, "5"}, { NULL, 1, "29"}, { "id-ce-authorityKeyIdentifier", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "35"}, { "AuthorityKeyIdentifier", 1610612741, NULL }, { "keyIdentifier", 1610637314, "KeyIdentifier"}, { NULL, 4104, "0"}, { "authorityCertIssuer", 1610637314, "GeneralNames"}, { NULL, 4104, "1"}, { "authorityCertSerialNumber", 536895490, "CertificateSerialNumber"}, { NULL, 4104, "2"}, { "KeyIdentifier", 1073741831, NULL }, { "id-ce-subjectKeyIdentifier", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "14"}, { "SubjectKeyIdentifier", 1073741826, "KeyIdentifier"}, { "id-ce-keyUsage", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "15"}, { "KeyUsage", 1610874886, NULL }, { "digitalSignature", 1073741825, "0"}, { "nonRepudiation", 1073741825, "1"}, { "keyEncipherment", 1073741825, "2"}, { "dataEncipherment", 1073741825, "3"}, { "keyAgreement", 1073741825, "4"}, { "keyCertSign", 1073741825, "5"}, { "cRLSign", 1073741825, "6"}, { "encipherOnly", 1073741825, "7"}, { "decipherOnly", 1, "8"}, { "id-ce-privateKeyUsagePeriod", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "16"}, { "PrivateKeyUsagePeriod", 1610612741, NULL }, { "notBefore", 1610637349, NULL }, { NULL, 4104, "0"}, { "notAfter", 536895525, NULL }, { NULL, 4104, "1"}, { "id-ce-certificatePolicies", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "32"}, { "CertificatePolicies", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "PolicyInformation"}, { "PolicyInformation", 1610612741, NULL }, { "policyIdentifier", 1073741826, "CertPolicyId"}, { "policyQualifiers", 538984459, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "PolicyQualifierInfo"}, { "CertPolicyId", 1073741836, NULL }, { "PolicyQualifierInfo", 1610612741, NULL }, { "policyQualifierId", 1073741826, "PolicyQualifierId"}, { "qualifier", 541065229, NULL }, { "policyQualifierId", 1, NULL }, { "PolicyQualifierId", 1073741836, NULL }, { "CPSuri", 1073741853, NULL }, { "UserNotice", 1610612741, NULL }, { "noticeRef", 1073758210, "NoticeReference"}, { "explicitText", 16386, "DisplayText"}, { "NoticeReference", 1610612741, NULL }, { "organization", 1073741826, "DisplayText"}, { "noticeNumbers", 536870923, NULL }, { NULL, 3, NULL }, { "DisplayText", 1610612754, NULL }, { "visibleString", 1612709923, NULL }, { "200", 524298, "1"}, { "bmpString", 1612709921, NULL }, { "200", 524298, "1"}, { "utf8String", 538968098, NULL }, { "200", 524298, "1"}, { "id-ce-policyMappings", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "33"}, { "PolicyMappings", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 536870917, NULL }, { "issuerDomainPolicy", 1073741826, "CertPolicyId"}, { "subjectDomainPolicy", 2, "CertPolicyId"}, { "id-ce-subjectAltName", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "17"}, { "SubjectAltName", 1073741826, "GeneralNames"}, { "GeneralNames", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "GeneralName"}, { "GeneralName", 1610612754, NULL }, { "otherName", 1610620930, "AnotherName"}, { NULL, 4104, "0"}, { "rfc822Name", 1610620957, NULL }, { NULL, 4104, "1"}, { "dNSName", 1610620957, NULL }, { NULL, 4104, "2"}, { "x400Address", 1610620930, "ORAddress"}, { NULL, 4104, "3"}, { "directoryName", 1610620930, "Name"}, { NULL, 4104, "4"}, { "ediPartyName", 1610620930, "EDIPartyName"}, { NULL, 4104, "5"}, { "uniformResourceIdentifier", 1610620957, NULL }, { NULL, 4104, "6"}, { "iPAddress", 1610620935, NULL }, { NULL, 4104, "7"}, { "registeredID", 536879116, NULL }, { NULL, 4104, "8"}, { "AnotherName", 1610612741, NULL }, { "type-id", 1073741836, NULL }, { "value", 541073421, NULL }, { NULL, 1073743880, "0"}, { "type-id", 1, NULL }, { "EDIPartyName", 1610612741, NULL }, { "nameAssigner", 1610637314, "DirectoryString"}, { NULL, 4104, "0"}, { "partyName", 536879106, "DirectoryString"}, { NULL, 4104, "1"}, { "id-ce-issuerAltName", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "18"}, { "IssuerAltName", 1073741826, "GeneralNames"}, { "id-ce-subjectDirectoryAttributes", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "9"}, { "SubjectDirectoryAttributes", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "Attribute"}, { "id-ce-basicConstraints", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "19"}, { "BasicConstraints", 1610612741, NULL }, { "cA", 1610645508, NULL }, { NULL, 131081, NULL }, { "pathLenConstraint", 537411587, NULL }, { "0", 10, "MAX"}, { "id-ce-nameConstraints", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "30"}, { "NameConstraints", 1610612741, NULL }, { "permittedSubtrees", 1610637314, "GeneralSubtrees"}, { NULL, 4104, "0"}, { "excludedSubtrees", 536895490, "GeneralSubtrees"}, { NULL, 4104, "1"}, { "GeneralSubtrees", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "GeneralSubtree"}, { "GeneralSubtree", 1610612741, NULL }, { "base", 1073741826, "GeneralName"}, { "minimum", 1610653698, "BaseDistance"}, { NULL, 1073741833, "0"}, { NULL, 4104, "0"}, { "maximum", 536895490, "BaseDistance"}, { NULL, 4104, "1"}, { "BaseDistance", 1611137027, NULL }, { "0", 10, "MAX"}, { "id-ce-policyConstraints", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "36"}, { "PolicyConstraints", 1610612741, NULL }, { "requireExplicitPolicy", 1610637314, "SkipCerts"}, { NULL, 4104, "0"}, { "inhibitPolicyMapping", 536895490, "SkipCerts"}, { NULL, 4104, "1"}, { "SkipCerts", 1611137027, NULL }, { "0", 10, "MAX"}, { "id-ce-cRLDistributionPoints", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "31"}, { "CRLDistPointsSyntax", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "DistributionPoint"}, { "DistributionPoint", 1610612741, NULL }, { "distributionPoint", 1610637314, "DistributionPointName"}, { NULL, 4104, "0"}, { "reasons", 1610637314, "ReasonFlags"}, { NULL, 4104, "1"}, { "cRLIssuer", 536895490, "GeneralNames"}, { NULL, 4104, "2"}, { "DistributionPointName", 1610612754, NULL }, { "fullName", 1610620930, "GeneralNames"}, { NULL, 4104, "0"}, { "nameRelativeToCRLIssuer", 536879106, "RelativeDistinguishedName"}, { NULL, 4104, "1"}, { "ReasonFlags", 1610874886, NULL }, { "unused", 1073741825, "0"}, { "keyCompromise", 1073741825, "1"}, { "cACompromise", 1073741825, "2"}, { "affiliationChanged", 1073741825, "3"}, { "superseded", 1073741825, "4"}, { "cessationOfOperation", 1073741825, "5"}, { "certificateHold", 1, "6"}, { "id-ce-extKeyUsage", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "37"}, { "ExtKeyUsageSyntax", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "KeyPurposeId"}, { "KeyPurposeId", 1073741836, NULL }, { "id-kp-serverAuth", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "1"}, { "id-kp-clientAuth", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "2"}, { "id-kp-codeSigning", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "3"}, { "id-kp-emailProtection", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "4"}, { "id-kp-ipsecEndSystem", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "5"}, { "id-kp-ipsecTunnel", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "6"}, { "id-kp-ipsecUser", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "7"}, { "id-kp-timeStamping", 1879048204, NULL }, { NULL, 1073741825, "id-kp"}, { NULL, 1, "8"}, { "id-pe-authorityInfoAccess", 1879048204, NULL }, { NULL, 1073741825, "id-pe"}, { NULL, 1, "1"}, { "AuthorityInfoAccessSyntax", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "AccessDescription"}, { "AccessDescription", 1610612741, NULL }, { "accessMethod", 1073741836, NULL }, { "accessLocation", 2, "GeneralName"}, { "id-ce-cRLNumber", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "20"}, { "CRLNumber", 1611137027, NULL }, { "0", 10, "MAX"}, { "id-ce-issuingDistributionPoint", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "28"}, { "IssuingDistributionPoint", 1610612741, NULL }, { "distributionPoint", 1610637314, "DistributionPointName"}, { NULL, 4104, "0"}, { "onlyContainsUserCerts", 1610653700, NULL }, { NULL, 1073872905, NULL }, { NULL, 4104, "1"}, { "onlyContainsCACerts", 1610653700, NULL }, { NULL, 1073872905, NULL }, { NULL, 4104, "2"}, { "onlySomeReasons", 1610637314, "ReasonFlags"}, { NULL, 4104, "3"}, { "indirectCRL", 536911876, NULL }, { NULL, 1073872905, NULL }, { NULL, 4104, "4"}, { "id-ce-deltaCRLIndicator", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "27"}, { "BaseCRLNumber", 1073741826, "CRLNumber"}, { "id-ce-cRLReasons", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "21"}, { "CRLReason", 1610874901, NULL }, { "unspecified", 1073741825, "0"}, { "keyCompromise", 1073741825, "1"}, { "cACompromise", 1073741825, "2"}, { "affiliationChanged", 1073741825, "3"}, { "superseded", 1073741825, "4"}, { "cessationOfOperation", 1073741825, "5"}, { "certificateHold", 1073741825, "6"}, { "removeFromCRL", 1, "8"}, { "id-ce-certificateIssuer", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "29"}, { "CertificateIssuer", 1073741826, "GeneralNames"}, { "id-ce-holdInstructionCode", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "23"}, { "HoldInstructionCode", 1073741836, NULL }, { "holdInstruction", 1879048204, NULL }, { "joint-iso-itu-t", 1073741825, "2"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "x9cm", 1073741825, "10040"}, { NULL, 1, "2"}, { "id-holdinstruction-none", 1879048204, NULL }, { NULL, 1073741825, "holdInstruction"}, { NULL, 1, "1"}, { "id-holdinstruction-callissuer", 1879048204, NULL }, { NULL, 1073741825, "holdInstruction"}, { NULL, 1, "2"}, { "id-holdinstruction-reject", 1879048204, NULL }, { NULL, 1073741825, "holdInstruction"}, { NULL, 1, "3"}, { "id-ce-invalidityDate", 1879048204, NULL }, { NULL, 1073741825, "id-ce"}, { NULL, 1, "24"}, { "InvalidityDate", 1073741861, NULL }, { "VisibleString", 1610620935, NULL }, { NULL, 4360, "26"}, { "NumericString", 1610620935, NULL }, { NULL, 4360, "18"}, { "IA5String", 1610620935, NULL }, { NULL, 4360, "22"}, { "TeletexString", 1610620935, NULL }, { NULL, 4360, "20"}, { "PrintableString", 1610620935, NULL }, { NULL, 4360, "19"}, { "UniversalString", 1610620935, NULL }, { NULL, 4360, "28"}, { "BMPString", 1610620935, NULL }, { NULL, 4360, "30"}, { "UTF8String", 1610620935, NULL }, { NULL, 4360, "12"}, { "id-pkix", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "identified-organization", 1073741825, "3"}, { "dod", 1073741825, "6"}, { "internet", 1073741825, "1"}, { "security", 1073741825, "5"}, { "mechanisms", 1073741825, "5"}, { "pkix", 1, "7"}, { "id-pe", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "1"}, { "id-qt", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "2"}, { "id-kp", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "3"}, { "id-ad", 1879048204, NULL }, { NULL, 1073741825, "id-pkix"}, { NULL, 1, "48"}, { "id-qt-cps", 1879048204, NULL }, { NULL, 1073741825, "id-qt"}, { NULL, 1, "1"}, { "id-qt-unotice", 1879048204, NULL }, { NULL, 1073741825, "id-qt"}, { NULL, 1, "2"}, { "id-ad-ocsp", 1879048204, NULL }, { NULL, 1073741825, "id-ad"}, { NULL, 1, "1"}, { "id-ad-caIssuers", 1879048204, NULL }, { NULL, 1073741825, "id-ad"}, { NULL, 1, "2"}, { "Attribute", 1610612741, NULL }, { "type", 1073741826, "AttributeType"}, { "values", 536870927, NULL }, { NULL, 2, "AttributeValue"}, { "AttributeType", 1073741836, NULL }, { "AttributeValue", 1073741837, NULL }, { "AttributeTypeAndValue", 1610612741, NULL }, { "type", 1073741826, "AttributeType"}, { "value", 2, "AttributeValue"}, { "id-at", 1879048204, NULL }, { "joint-iso-ccitt", 1073741825, "2"}, { "ds", 1073741825, "5"}, { NULL, 1, "4"}, { "id-at-name", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "41"}, { "id-at-surname", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "4"}, { "id-at-givenName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "42"}, { "id-at-initials", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "43"}, { "id-at-generationQualifier", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "44"}, { "X520name", 1610612754, NULL }, { "teletexString", 1612709918, NULL }, { "ub-name", 524298, "1"}, { "printableString", 1612709919, NULL }, { "ub-name", 524298, "1"}, { "universalString", 1612709920, NULL }, { "ub-name", 524298, "1"}, { "utf8String", 1612709922, NULL }, { "ub-name", 524298, "1"}, { "bmpString", 538968097, NULL }, { "ub-name", 524298, "1"}, { "id-at-commonName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "3"}, { "X520CommonName", 1610612754, NULL }, { "teletexString", 1612709918, NULL }, { "ub-common-name", 524298, "1"}, { "printableString", 1612709919, NULL }, { "ub-common-name", 524298, "1"}, { "universalString", 1612709920, NULL }, { "ub-common-name", 524298, "1"}, { "utf8String", 1612709922, NULL }, { "ub-common-name", 524298, "1"}, { "bmpString", 538968097, NULL }, { "ub-common-name", 524298, "1"}, { "id-at-localityName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "7"}, { "X520LocalityName", 1610612754, NULL }, { "teletexString", 1612709918, NULL }, { "ub-locality-name", 524298, "1"}, { "printableString", 1612709919, NULL }, { "ub-locality-name", 524298, "1"}, { "universalString", 1612709920, NULL }, { "ub-locality-name", 524298, "1"}, { "utf8String", 1612709922, NULL }, { "ub-locality-name", 524298, "1"}, { "bmpString", 538968097, NULL }, { "ub-locality-name", 524298, "1"}, { "id-at-stateOrProvinceName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "8"}, { "X520StateOrProvinceName", 1610612754, NULL }, { "teletexString", 1612709918, NULL }, { "ub-state-name", 524298, "1"}, { "printableString", 1612709919, NULL }, { "ub-state-name", 524298, "1"}, { "universalString", 1612709920, NULL }, { "ub-state-name", 524298, "1"}, { "utf8String", 1612709922, NULL }, { "ub-state-name", 524298, "1"}, { "bmpString", 538968097, NULL }, { "ub-state-name", 524298, "1"}, { "id-at-organizationName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "10"}, { "X520OrganizationName", 1610612754, NULL }, { "teletexString", 1612709918, NULL }, { "ub-organization-name", 524298, "1"}, { "printableString", 1612709919, NULL }, { "ub-organization-name", 524298, "1"}, { "universalString", 1612709920, NULL }, { "ub-organization-name", 524298, "1"}, { "utf8String", 1612709922, NULL }, { "ub-organization-name", 524298, "1"}, { "bmpString", 538968097, NULL }, { "ub-organization-name", 524298, "1"}, { "id-at-organizationalUnitName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "11"}, { "X520OrganizationalUnitName", 1610612754, NULL }, { "teletexString", 1612709918, NULL }, { "ub-organizational-unit-name", 524298, "1"}, { "printableString", 1612709919, NULL }, { "ub-organizational-unit-name", 524298, "1"}, { "universalString", 1612709920, NULL }, { "ub-organizational-unit-name", 524298, "1"}, { "utf8String", 1612709922, NULL }, { "ub-organizational-unit-name", 524298, "1"}, { "bmpString", 538968097, NULL }, { "ub-organizational-unit-name", 524298, "1"}, { "id-at-title", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "12"}, { "X520Title", 1610612754, NULL }, { "teletexString", 1612709918, NULL }, { "ub-title", 524298, "1"}, { "printableString", 1612709919, NULL }, { "ub-title", 524298, "1"}, { "universalString", 1612709920, NULL }, { "ub-title", 524298, "1"}, { "utf8String", 1612709922, NULL }, { "ub-title", 524298, "1"}, { "bmpString", 538968097, NULL }, { "ub-title", 524298, "1"}, { "id-at-dnQualifier", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "46"}, { "X520dnQualifier", 1073741855, NULL }, { "id-at-countryName", 1880096780, "AttributeType"}, { NULL, 1073741825, "id-at"}, { NULL, 1, "6"}, { "X520countryName", 1612709919, NULL }, { NULL, 1048586, "2"}, { "pkcs-9", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "rsadsi", 1073741825, "113549"}, { "pkcs", 1073741825, "1"}, { NULL, 1, "9"}, { "emailAddress", 1880096780, "AttributeType"}, { NULL, 1073741825, "pkcs-9"}, { NULL, 1, "1"}, { "Pkcs9email", 1612709917, NULL }, { "ub-emailaddress-length", 524298, "1"}, { "Name", 1610612754, NULL }, { "rdnSequence", 2, "RDNSequence"}, { "RDNSequence", 1610612747, NULL }, { NULL, 2, "RelativeDistinguishedName"}, { "DistinguishedName", 1073741826, "RDNSequence"}, { "RelativeDistinguishedName", 1612709903, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "AttributeTypeAndValue"}, { "DirectoryString", 1610612754, NULL }, { "teletexString", 1612709918, NULL }, { "MAX", 524298, "1"}, { "printableString", 1612709919, NULL }, { "MAX", 524298, "1"}, { "universalString", 1612709920, NULL }, { "MAX", 524298, "1"}, { "utf8String", 1612709922, NULL }, { "MAX", 524298, "1"}, { "bmpString", 538968097, NULL }, { "MAX", 524298, "1"}, { "Certificate", 1610612741, NULL }, { "tbsCertificate", 1073741826, "TBSCertificate"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 6, NULL }, { "TBSCertificate", 1610612741, NULL }, { "version", 1610653698, "Version"}, { NULL, 1073741833, "v1"}, { NULL, 2056, "0"}, { "serialNumber", 1073741826, "CertificateSerialNumber"}, { "signature", 1073741826, "AlgorithmIdentifier"}, { "issuer", 1073741826, "Name"}, { "validity", 1073741826, "Validity"}, { "subject", 1073741826, "Name"}, { "subjectPublicKeyInfo", 1073741826, "SubjectPublicKeyInfo"}, { "issuerUniqueID", 1610637314, "UniqueIdentifier"}, { NULL, 4104, "1"}, { "subjectUniqueID", 1610637314, "UniqueIdentifier"}, { NULL, 4104, "2"}, { "extensions", 536895490, "Extensions"}, { NULL, 2056, "3"}, { "Version", 1610874883, NULL }, { "v1", 1073741825, "0"}, { "v2", 1073741825, "1"}, { "v3", 1, "2"}, { "CertificateSerialNumber", 1073741827, NULL }, { "Validity", 1610612741, NULL }, { "notBefore", 1073741826, "Time"}, { "notAfter", 2, "Time"}, { "Time", 1610612754, NULL }, { "utcTime", 1073741860, NULL }, { "generalTime", 37, NULL }, { "UniqueIdentifier", 1073741830, NULL }, { "SubjectPublicKeyInfo", 1610612741, NULL }, { "algorithm", 1073741826, "AlgorithmIdentifier"}, { "subjectPublicKey", 6, NULL }, { "Extensions", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "Extension"}, { "Extension", 1610612741, NULL }, { "extnID", 1073741836, NULL }, { "critical", 1610645508, NULL }, { NULL, 131081, NULL }, { "extnValue", 7, NULL }, { "CertificateList", 1610612741, NULL }, { "tbsCertList", 1073741826, "TBSCertList"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 6, NULL }, { "TBSCertList", 1610612741, NULL }, { "version", 1073758210, "Version"}, { "signature", 1073741826, "AlgorithmIdentifier"}, { "issuer", 1073741826, "Name"}, { "thisUpdate", 1073741826, "Time"}, { "nextUpdate", 1073758210, "Time"}, { "revokedCertificates", 1610629131, NULL }, { NULL, 536870917, NULL }, { "userCertificate", 1073741826, "CertificateSerialNumber"}, { "revocationDate", 1073741826, "Time"}, { "crlEntryExtensions", 16386, "Extensions"}, { "crlExtensions", 536895490, "Extensions"}, { NULL, 2056, "0"}, { "AlgorithmIdentifier", 1610612741, NULL }, { "algorithm", 1073741836, NULL }, { "parameters", 541081613, NULL }, { "algorithm", 1, NULL }, { "pkcs-1", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "rsadsi", 1073741825, "113549"}, { "pkcs", 1073741825, "1"}, { NULL, 1, "1"}, { "rsaEncryption", 1879048204, NULL }, { NULL, 1073741825, "pkcs-1"}, { NULL, 1, "1"}, { "md2WithRSAEncryption", 1879048204, NULL }, { NULL, 1073741825, "pkcs-1"}, { NULL, 1, "2"}, { "md5WithRSAEncryption", 1879048204, NULL }, { NULL, 1073741825, "pkcs-1"}, { NULL, 1, "4"}, { "sha1WithRSAEncryption", 1879048204, NULL }, { NULL, 1073741825, "pkcs-1"}, { NULL, 1, "5"}, { "id-dsa-with-sha1", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "x9-57", 1073741825, "10040"}, { "x9algorithm", 1073741825, "4"}, { NULL, 1, "3"}, { "Dss-Sig-Value", 1610612741, NULL }, { "r", 1073741827, NULL }, { "s", 3, NULL }, { "dhpublicnumber", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "ansi-x942", 1073741825, "10046"}, { "number-type", 1073741825, "2"}, { NULL, 1, "1"}, { "DomainParameters", 1610612741, NULL }, { "p", 1073741827, NULL }, { "g", 1073741827, NULL }, { "q", 1073741827, NULL }, { "j", 1073758211, NULL }, { "validationParms", 16386, "ValidationParms"}, { "ValidationParms", 1610612741, NULL }, { "seed", 1073741830, NULL }, { "pgenCounter", 3, NULL }, { "id-dsa", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "x9-57", 1073741825, "10040"}, { "x9algorithm", 1073741825, "4"}, { NULL, 1, "1"}, { "Dss-Parms", 1610612741, NULL }, { "p", 1073741827, NULL }, { "q", 1073741827, NULL }, { "g", 3, NULL }, { "ORAddress", 1610612741, NULL }, { "built-in-standard-attributes", 1073741826, "BuiltInStandardAttributes"}, { "built-in-domain-defined-attributes", 1073758210, "BuiltInDomainDefinedAttributes"}, { "extension-attributes", 16386, "ExtensionAttributes"}, { "BuiltInStandardAttributes", 1610612741, NULL }, { "country-name", 1073758210, "CountryName"}, { "administration-domain-name", 1073758210, "AdministrationDomainName"}, { "network-address", 1610637314, "NetworkAddress"}, { NULL, 2056, "0"}, { "terminal-identifier", 1610637314, "TerminalIdentifier"}, { NULL, 2056, "1"}, { "private-domain-name", 1610637314, "PrivateDomainName"}, { NULL, 2056, "2"}, { "organization-name", 1610637314, "OrganizationName"}, { NULL, 2056, "3"}, { "numeric-user-identifier", 1610637314, "NumericUserIdentifier"}, { NULL, 2056, "4"}, { "personal-name", 1610637314, "PersonalName"}, { NULL, 2056, "5"}, { "organizational-unit-names", 536895490, "OrganizationalUnitNames"}, { NULL, 2056, "6"}, { "CountryName", 1610620946, NULL }, { NULL, 1073746952, "1"}, { "x121-dcc-code", 1612709916, NULL }, { NULL, 1048586, "ub-country-name-numeric-length"}, { "iso-3166-alpha2-code", 538968095, NULL }, { NULL, 1048586, "ub-country-name-alpha-length"}, { "AdministrationDomainName", 1610620946, NULL }, { NULL, 1073744904, "2"}, { "numeric", 1612709916, NULL }, { "ub-domain-name-length", 524298, "0"}, { "printable", 538968095, NULL }, { "ub-domain-name-length", 524298, "0"}, { "NetworkAddress", 1073741826, "X121Address"}, { "X121Address", 1612709916, NULL }, { "ub-x121-address-length", 524298, "1"}, { "TerminalIdentifier", 1612709919, NULL }, { "ub-terminal-id-length", 524298, "1"}, { "PrivateDomainName", 1610612754, NULL }, { "numeric", 1612709916, NULL }, { "ub-domain-name-length", 524298, "1"}, { "printable", 538968095, NULL }, { "ub-domain-name-length", 524298, "1"}, { "OrganizationName", 1612709919, NULL }, { "ub-organization-name-length", 524298, "1"}, { "NumericUserIdentifier", 1612709916, NULL }, { "ub-numeric-user-id-length", 524298, "1"}, { "PersonalName", 1610612750, NULL }, { "surname", 1814044703, NULL }, { NULL, 1073745928, "0"}, { "ub-surname-length", 524298, "1"}, { "given-name", 1814061087, NULL }, { NULL, 1073745928, "1"}, { "ub-given-name-length", 524298, "1"}, { "initials", 1814061087, NULL }, { NULL, 1073745928, "2"}, { "ub-initials-length", 524298, "1"}, { "generation-qualifier", 740319263, NULL }, { NULL, 1073745928, "3"}, { "ub-generation-qualifier-length", 524298, "1"}, { "OrganizationalUnitNames", 1612709899, NULL }, { "ub-organizational-units", 1074266122, "1"}, { NULL, 2, "OrganizationalUnitName"}, { "OrganizationalUnitName", 1612709919, NULL }, { "ub-organizational-unit-name-length", 524298, "1"}, { "BuiltInDomainDefinedAttributes", 1612709899, NULL }, { "ub-domain-defined-attributes", 1074266122, "1"}, { NULL, 2, "BuiltInDomainDefinedAttribute"}, { "BuiltInDomainDefinedAttribute", 1610612741, NULL }, { "type", 1612709919, NULL }, { "ub-domain-defined-attribute-type-length", 524298, "1"}, { "value", 538968095, NULL }, { "ub-domain-defined-attribute-value-length", 524298, "1"}, { "ExtensionAttributes", 1612709903, NULL }, { "ub-extension-attributes", 1074266122, "1"}, { NULL, 2, "ExtensionAttribute"}, { "ExtensionAttribute", 1610612741, NULL }, { "extension-attribute-type", 1611145219, NULL }, { NULL, 1073743880, "0"}, { "0", 10, "ub-extension-attributes"}, { "extension-attribute-value", 541073421, NULL }, { NULL, 1073743880, "1"}, { "extension-attribute-type", 1, NULL }, { "common-name", 1342177283, "1"}, { "CommonName", 1612709919, NULL }, { "ub-common-name-length", 524298, "1"}, { "teletex-common-name", 1342177283, "2"}, { "TeletexCommonName", 1612709918, NULL }, { "ub-common-name-length", 524298, "1"}, { "teletex-organization-name", 1342177283, "3"}, { "TeletexOrganizationName", 1612709918, NULL }, { "ub-organization-name-length", 524298, "1"}, { "teletex-personal-name", 1342177283, "4"}, { "TeletexPersonalName", 1610612750, NULL }, { "surname", 1814044702, NULL }, { NULL, 1073743880, "0"}, { "ub-surname-length", 524298, "1"}, { "given-name", 1814061086, NULL }, { NULL, 1073743880, "1"}, { "ub-given-name-length", 524298, "1"}, { "initials", 1814061086, NULL }, { NULL, 1073743880, "2"}, { "ub-initials-length", 524298, "1"}, { "generation-qualifier", 740319262, NULL }, { NULL, 1073743880, "3"}, { "ub-generation-qualifier-length", 524298, "1"}, { "teletex-organizational-unit-names", 1342177283, "5"}, { "TeletexOrganizationalUnitNames", 1612709899, NULL }, { "ub-organizational-units", 1074266122, "1"}, { NULL, 2, "TeletexOrganizationalUnitName"}, { "TeletexOrganizationalUnitName", 1612709918, NULL }, { "ub-organizational-unit-name-length", 524298, "1"}, { "pds-name", 1342177283, "7"}, { "PDSName", 1612709919, NULL }, { "ub-pds-name-length", 524298, "1"}, { "physical-delivery-country-name", 1342177283, "8"}, { "PhysicalDeliveryCountryName", 1610612754, NULL }, { "x121-dcc-code", 1612709916, NULL }, { NULL, 1048586, "ub-country-name-numeric-length"}, { "iso-3166-alpha2-code", 538968095, NULL }, { NULL, 1048586, "ub-country-name-alpha-length"}, { "postal-code", 1342177283, "9"}, { "PostalCode", 1610612754, NULL }, { "numeric-code", 1612709916, NULL }, { "ub-postal-code-length", 524298, "1"}, { "printable-code", 538968095, NULL }, { "ub-postal-code-length", 524298, "1"}, { "physical-delivery-office-name", 1342177283, "10"}, { "PhysicalDeliveryOfficeName", 1073741826, "PDSParameter"}, { "physical-delivery-office-number", 1342177283, "11"}, { "PhysicalDeliveryOfficeNumber", 1073741826, "PDSParameter"}, { "extension-OR-address-components", 1342177283, "12"}, { "ExtensionORAddressComponents", 1073741826, "PDSParameter"}, { "physical-delivery-personal-name", 1342177283, "13"}, { "PhysicalDeliveryPersonalName", 1073741826, "PDSParameter"}, { "physical-delivery-organization-name", 1342177283, "14"}, { "PhysicalDeliveryOrganizationName", 1073741826, "PDSParameter"}, { "extension-physical-delivery-address-components", 1342177283, "15"}, { "ExtensionPhysicalDeliveryAddressComponents", 1073741826, "PDSParameter"}, { "unformatted-postal-address", 1342177283, "16"}, { "UnformattedPostalAddress", 1610612750, NULL }, { "printable-address", 1814052875, NULL }, { "ub-pds-physical-address-lines", 1074266122, "1"}, { NULL, 538968095, NULL }, { "ub-pds-parameter-length", 524298, "1"}, { "teletex-string", 740311070, NULL }, { "ub-unformatted-address-length", 524298, "1"}, { "street-address", 1342177283, "17"}, { "StreetAddress", 1073741826, "PDSParameter"}, { "post-office-box-address", 1342177283, "18"}, { "PostOfficeBoxAddress", 1073741826, "PDSParameter"}, { "poste-restante-address", 1342177283, "19"}, { "PosteRestanteAddress", 1073741826, "PDSParameter"}, { "unique-postal-name", 1342177283, "20"}, { "UniquePostalName", 1073741826, "PDSParameter"}, { "local-postal-attributes", 1342177283, "21"}, { "LocalPostalAttributes", 1073741826, "PDSParameter"}, { "PDSParameter", 1610612750, NULL }, { "printable-string", 1814052895, NULL }, { "ub-pds-parameter-length", 524298, "1"}, { "teletex-string", 740311070, NULL }, { "ub-pds-parameter-length", 524298, "1"}, { "extended-network-address", 1342177283, "22"}, { "ExtendedNetworkAddress", 1610612754, NULL }, { "e163-4-address", 1610612741, NULL }, { "number", 1612718108, NULL }, { NULL, 1073743880, "0"}, { "ub-e163-4-number-length", 524298, "1"}, { "sub-address", 538992668, NULL }, { NULL, 1073743880, "1"}, { "ub-e163-4-sub-address-length", 524298, "1"}, { "psap-address", 536879106, "PresentationAddress"}, { NULL, 2056, "0"}, { "PresentationAddress", 1610612741, NULL }, { "pSelector", 1610637319, NULL }, { NULL, 2056, "0"}, { "sSelector", 1610637319, NULL }, { NULL, 2056, "1"}, { "tSelector", 1610637319, NULL }, { NULL, 2056, "2"}, { "nAddresses", 538976271, NULL }, { NULL, 1073743880, "3"}, { "MAX", 1074266122, "1"}, { NULL, 7, NULL }, { "terminal-type", 1342177283, "23"}, { "TerminalType", 1611137027, NULL }, { "0", 10, "ub-integer-options"}, { "teletex-domain-defined-attributes", 1342177283, "6"}, { "TeletexDomainDefinedAttributes", 1612709899, NULL }, { "ub-domain-defined-attributes", 1074266122, "1"}, { NULL, 2, "TeletexDomainDefinedAttribute"}, { "TeletexDomainDefinedAttribute", 1610612741, NULL }, { "type", 1612709918, NULL }, { "ub-domain-defined-attribute-type-length", 524298, "1"}, { "value", 538968094, NULL }, { "ub-domain-defined-attribute-value-length", 524298, "1"}, { "ub-name", 1342177283, "32768"}, { "ub-common-name", 1342177283, "64"}, { "ub-locality-name", 1342177283, "128"}, { "ub-state-name", 1342177283, "128"}, { "ub-organization-name", 1342177283, "64"}, { "ub-organizational-unit-name", 1342177283, "64"}, { "ub-title", 1342177283, "64"}, { "ub-match", 1342177283, "128"}, { "ub-emailaddress-length", 1342177283, "128"}, { "ub-common-name-length", 1342177283, "64"}, { "ub-country-name-alpha-length", 1342177283, "2"}, { "ub-country-name-numeric-length", 1342177283, "3"}, { "ub-domain-defined-attributes", 1342177283, "4"}, { "ub-domain-defined-attribute-type-length", 1342177283, "8"}, { "ub-domain-defined-attribute-value-length", 1342177283, "128"}, { "ub-domain-name-length", 1342177283, "16"}, { "ub-extension-attributes", 1342177283, "256"}, { "ub-e163-4-number-length", 1342177283, "15"}, { "ub-e163-4-sub-address-length", 1342177283, "40"}, { "ub-generation-qualifier-length", 1342177283, "3"}, { "ub-given-name-length", 1342177283, "16"}, { "ub-initials-length", 1342177283, "5"}, { "ub-integer-options", 1342177283, "256"}, { "ub-numeric-user-id-length", 1342177283, "32"}, { "ub-organization-name-length", 1342177283, "64"}, { "ub-organizational-unit-name-length", 1342177283, "32"}, { "ub-organizational-units", 1342177283, "4"}, { "ub-pds-name-length", 1342177283, "16"}, { "ub-pds-parameter-length", 1342177283, "30"}, { "ub-pds-physical-address-lines", 1342177283, "6"}, { "ub-postal-code-length", 1342177283, "16"}, { "ub-surname-length", 1342177283, "40"}, { "ub-terminal-id-length", 1342177283, "24"}, { "ub-unformatted-address-length", 1342177283, "180"}, { "ub-x121-address-length", 268435459, "16"}, { NULL, 0, NULL } }; libtasn1-4.16.0/examples/CrlExample.c0000644000000000000000000003755013246341643014244 00000000000000/* * Copyright (C) 2000-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /*****************************************************/ /* File: CrlExample.c */ /* Description: An example on how to use the ASN1 */ /* parser with the Certificate.txt file */ /*****************************************************/ #include #include #include #include "libtasn1.h" static char * my_ltostr (long v, char *str) { long d, r; char temp[20]; int count, k, start; if (v < 0) { str[0] = '-'; start = 1; v = -v; } else start = 0; count = 0; do { d = v / 10; r = v - d * 10; temp[start + count] = '0' + (char) r; count++; v = d; } while (v); for (k = 0; k < count; k++) str[k + start] = temp[start + count - k - 1]; str[count + start] = 0; return str; } /******************************************************/ /* Function : get_name_type */ /* Description: analyze a structure of type Name */ /* Parameters: */ /* char *root: the structure identifier */ /* char *answer: the string with elements like: */ /* "C=US O=gov" */ /******************************************************/ static void get_Name_type (ASN1_TYPE cert_def, ASN1_TYPE cert, const char *root, unsigned char *ans) { int k, k2, result, len; char name[128], str[1024], str2[1024], name2[128], counter[5], name3[128]; ASN1_TYPE value = ASN1_TYPE_EMPTY; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; char *answer = (char *) ans; answer[0] = 0; k = 1; do { strcpy (name, root); strcat (name, ".rdnSequence.?"); my_ltostr (k, counter); strcat (name, counter); len = sizeof (str) - 1; result = asn1_read_value (cert, name, str, &len); if (result == ASN1_ELEMENT_NOT_FOUND) break; k2 = 1; do { strcpy (name2, name); strcat (name2, ".?"); my_ltostr (k2, counter); strcat (name2, counter); len = sizeof (str) - 1; result = asn1_read_value (cert, name2, str, &len); if (result == ASN1_ELEMENT_NOT_FOUND) break; strcpy (name3, name2); strcat (name3, ".type"); len = sizeof (str) - 1; result = asn1_read_value (cert, name3, str, &len); strcpy (name3, name2); strcat (name3, ".value"); if (result == ASN1_SUCCESS) { len = sizeof (str2); result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str2, &len); if (!strcmp (str, str2)) { asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", &value); len = sizeof (str) - 1; asn1_read_value (cert, name3, str, &len); result = asn1_der_decoding (&value, str, len, errorDescription); len = sizeof (str) - 1; asn1_read_value (value, "", str, &len); /* CHOICE */ strcpy (name3, str); len = sizeof (str) - 1; asn1_read_value (value, name3, str, &len); str[len] = 0; strcat (answer, " C="); strcat (answer, str); asn1_delete_structure (&value); } else { len = sizeof (str2); result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str2, &len); if (!strcmp (str, str2)) { asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", &value); len = sizeof (str) - 1; asn1_read_value (cert, name3, str, &len); asn1_der_decoding (&value, str, len, errorDescription); len = sizeof (str) - 1; asn1_read_value (value, "", str, &len); /* CHOICE */ strcpy (name3, str); len = sizeof (str) - 1; asn1_read_value (value, name3, str, &len); str[len] = 0; strcat (answer, " O="); strcat (answer, str); asn1_delete_structure (&value); } else { len = sizeof (str2); result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName", str2, &len); if (!strcmp (str, str2)) { asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationalUnitName", &value); len = sizeof (str) - 1; asn1_read_value (cert, name3, str, &len); asn1_der_decoding (&value, str, len, errorDescription); len = sizeof (str) - 1; asn1_read_value (value, "", str, &len); /* CHOICE */ strcpy (name3, str); len = sizeof (str) - 1; asn1_read_value (value, name3, str, &len); str[len] = 0; strcat (answer, " OU="); strcat (answer, str); asn1_delete_structure (&value); } } } } k2++; } while (1); k++; } while (1); } /******************************************************/ /* Function : create_certificate */ /* Description: creates a certificate named */ /* "certificate1". Values are the same */ /* as in rfc2459 Appendix D.1 */ /* Parameters: */ /* unsigned char *der: contains the der encoding */ /* int *der_len: number of bytes of der string */ /******************************************************/ static void create_CRL (ASN1_TYPE cert_def, unsigned char *der, int *der_len) { int result, k, len; unsigned char str[1024]; const unsigned char *str2; ASN1_TYPE crl = ASN1_TYPE_EMPTY; ASN1_TYPE value = ASN1_TYPE_EMPTY; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; int max_len; max_len = *der_len; result = asn1_create_element (cert_def, "PKIX1Implicit88.CertificateList", &crl); /* Use the next 3 lines to visit the empty certificate */ /* printf("-----------------\n"); asn1_visit_tree(crl,""); printf("-----------------\n"); */ /* version: v2(1) */ result = asn1_write_value (crl, "tbsCertList.version", "v2", 0); /* signature: dsa-with-sha */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len); result = asn1_write_value (crl, "tbsCertList.signature.algorithm", str, 1); result = asn1_write_value (crl, "tbsCertList.signature.parameters", NULL, 0); /* issuer: Country="US" Organization="gov" OrganizationUnit="nist" */ result = asn1_write_value (crl, "tbsCertList.issuer", "rdnSequence", 1); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence", "NEW", 1); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST", "NEW", 1); /* C */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str, &len); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.type", str, 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.X520countryName", &value); result = asn1_write_value (value, "", "US", 2); *der_len = max_len; result = asn1_der_coding (value, "", der, der_len, errorDescription); asn1_delete_structure (&value); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.value", der, *der_len); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence", "NEW", 4); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST", "NEW", 4); /* O */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str, &len); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.type", str, 8); result = asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", &value); result = asn1_write_value (value, "", "printableString", 1); result = asn1_write_value (value, "printableString", "gov", 3); *der_len = max_len; result = asn1_der_coding (value, "", der, der_len, errorDescription); asn1_delete_structure (&value); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.value", der, *der_len); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence", "NEW", 1); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST", "NEW", 1); /* OU */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName", str, &len); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.type", str, 1); result = asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationalUnitName", &value); result = asn1_write_value (value, "", "printableString", 1); result = asn1_write_value (value, "printableString", "nist", 4); *der_len = max_len; result = asn1_der_coding (value, "", der, der_len, errorDescription); asn1_delete_structure (&value); result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.value", der, *der_len); /* validity */ result = asn1_write_value (crl, "tbsCertList.thisUpdate", "utcTime", 1); result = asn1_write_value (crl, "tbsCertList.thisUpdate.utcTime", "970801000000Z", 1); result = asn1_write_value (crl, "tbsCertList.nextUpdate", "utcTime", 1); result = asn1_write_value (crl, "tbsCertList.nextUpdate.utcTime", "970808000000Z", 1); /* revokedCertificates */ result = asn1_write_value (crl, "tbsCertList.revokedCertificates", "NEW", 1); str[0] = 18; result = asn1_write_value (crl, "tbsCertList.revokedCertificates.?LAST.userCertificate", str, 1); result = asn1_write_value (crl, "tbsCertList.revokedCertificates.?LAST.revocationDate", "utcTime", 1); result = asn1_write_value (crl, "tbsCertList.revokedCertificates.?LAST.revocationDate.utcTime", "970731000000Z", 1); result = asn1_write_value (crl, "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions", "NEW", 1); len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-ce-cRLReasons", str, &len); result = asn1_write_value (crl, "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions.?LAST.extnID", str, 1); /* reasonCode */ result = asn1_write_value (crl, "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions.?LAST.critical", "FALSE", 1); str2 = (const unsigned char *) "\x0a\x01\x01"; result = asn1_write_value (crl, "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions.?LAST.extnValue", str2, 3); /* crlExtensions */ result = asn1_write_value (crl, "tbsCertList.crlExtensions", NULL, 0); /* signatureAlgorithm: dsa-with-sha */ len = sizeof (str) - 1; result = asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len); result = asn1_write_value (crl, "signatureAlgorithm.algorithm", str, 1); result = asn1_write_value (crl, "signatureAlgorithm.parameters", NULL, 0); /* NO OPTION */ /* signature */ *der_len = max_len; result = asn1_der_coding (crl, "tbsCertList", der, der_len, errorDescription); if (result != ASN1_SUCCESS) { printf ("\n'tbsCertList' encoding creation: ERROR\n"); return; } /* add the lines for the signature on der[0]..der[der_len-1]: result in str2 */ result = asn1_write_value (crl, "signature", str2, 46 * 8); /* Use the next 3 lines to visit the certificate */ /* printf("-----------------\n"); asn1_visit_tree(crl,""); printf("-----------------\n"); */ *der_len = max_len; result = asn1_der_coding (crl, "", der, der_len, errorDescription); if (result != ASN1_SUCCESS) { printf ("\n'crl1' encoding creation: ERROR\n"); return; } /* Print the 'Certificate1' DER encoding */ printf ("-----------------\nCrl1 Encoding:\nNumber of bytes=%i\n", *der_len); for (k = 0; k < *der_len; k++) printf ("%02x ", der[k]); printf ("\n-----------------\n"); /* Clear the "certificate1" structure */ asn1_delete_structure (&crl); } /******************************************************/ /* Function : get_certificate */ /* Description: creates a certificate named */ /* "certificate2" from a der encoding */ /* string */ /* Parameters: */ /* unsigned char *der: the encoding string */ /* int der_len: number of bytes of der string */ /******************************************************/ static void get_CRL (ASN1_TYPE cert_def, unsigned char *der, int der_len) { int result, len, start, end; unsigned char str[1024], str2[1024]; ASN1_TYPE crl2 = ASN1_TYPE_EMPTY; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; asn1_create_element (cert_def, "PKIX1Implicit88.CertificateList", &crl2); result = asn1_der_decoding (&crl2, der, der_len, errorDescription); if (result != ASN1_SUCCESS) { printf ("Problems with DER encoding\n"); return; } /* issuer */ get_Name_type (cert_def, crl2, "tbsCertList.issuer", str); printf ("crl2:\nissuer: %s\n", str); /* Verify sign */ len = sizeof (str) - 1; result = asn1_read_value (crl2, "signatureAlgorithm.algorithm", str, &len); result = asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str2, &len); if (!strcmp ((char *) str, (char *) str2)) { /* dsa-with-sha */ result = asn1_der_decoding_startEnd (crl2, der, der_len, "tbsCertList", &start, &end); /* add the lines to calculate the sha on der[start]..der[end] */ result = asn1_read_value (crl2, "signature", str, &len); /* compare the previous value to signature ( with issuer public key) */ } /* Use the next 3 lines to visit the certificate */ /* printf("-----------------\n"); asn1_visit_tree(crl2,""); printf("-----------------\n"); */ /* Clear the "crl2" structure */ asn1_delete_structure (&crl2); } extern const ASN1_ARRAY_TYPE pkix_asn1_tab[]; /********************************************************/ /* Function : main */ /* Description: reads the certificate description. */ /* Creates a certificate and calculate */ /* the der encoding. After that creates */ /* another certificate from der string */ /********************************************************/ int main (int argc, char *argv[]) { int result, der_len; unsigned char der[1024]; ASN1_TYPE PKIX1Implicit88 = ASN1_TYPE_EMPTY; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; if (1) result = asn1_array2tree (pkix_asn1_tab, &PKIX1Implicit88, errorDescription); else result = asn1_parser2tree ("pkix.asn", &PKIX1Implicit88, errorDescription); if (result != ASN1_SUCCESS) { asn1_perror (result); printf ("%s\n", errorDescription); exit (1); } /* Use the following 3 lines to visit the PKIX1Implicit structures */ /* printf("-----------------\n"); asn1_visit_tree(cert_def,"PKIX1Implicit88"); printf("-----------------\n"); */ der_len = 1024; create_CRL (PKIX1Implicit88, der, &der_len); get_CRL (PKIX1Implicit88, der, der_len); /* Clear the "PKIX1Implicit88" structures */ asn1_delete_structure (&PKIX1Implicit88); return 0; } libtasn1-4.16.0/gtk-doc.make0000644000000000000000000002504013605651556012412 00000000000000# -*- mode: makefile -*- # # gtk-doc.make - make rules for gtk-doc # Copyright (C) 2003 James Henstridge # 2004-2007 Damon Chaplin # 2007-2017 Stefan Sauer # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #################################### # Everything below here is generic # #################################### if GTK_DOC_USE_LIBTOOL GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = $(LIBTOOL) --mode=execute else GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = endif # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(expand_content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt EXTRA_DIST = \ $(HTML_IMAGES) \ $(SETUP_FILES) DOC_STAMPS=setup-build.stamp scan-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt gtkdoc-check.test: Makefile $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \ echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \ chmod +x $@ CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test if GTK_DOC_BUILD_HTML HTML_BUILD_STAMP=html-build.stamp else HTML_BUILD_STAMP= endif if GTK_DOC_BUILD_PDF PDF_BUILD_STAMP=pdf-build.stamp else PDF_BUILD_STAMP= endif all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) .PHONY: all-gtk-doc if ENABLE_GTK_DOC all-local: all-gtk-doc endif docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp #### setup #### GTK_DOC_V_SETUP=$(GTK_DOC_V_SETUP_@AM_V@) GTK_DOC_V_SETUP_=$(GTK_DOC_V_SETUP_@AM_DEFAULT_V@) GTK_DOC_V_SETUP_0=@echo " DOC Preparing build"; setup-build.stamp: -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ destdir=`dirname $(abs_builddir)/$$file`; \ test -d "$$destdir" || mkdir -p "$$destdir"; \ test -f $(abs_srcdir)/$$file && \ cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \ done; \ fi; \ fi $(AM_V_at)touch setup-build.stamp #### scan #### GTK_DOC_V_SCAN=$(GTK_DOC_V_SCAN_@AM_V@) GTK_DOC_V_SCAN_=$(GTK_DOC_V_SCAN_@AM_DEFAULT_V@) GTK_DOC_V_SCAN_0=@echo " DOC Scanning header files"; GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_@AM_V@) GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_@AM_DEFAULT_V@) GTK_DOC_V_INTROSPECT_0=@echo " DOC Introspecting gobjects"; scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(GTK_DOC_V_SCAN)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi $(AM_V_at)touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### xml #### GTK_DOC_V_XML=$(GTK_DOC_V_XML_@AM_V@) GTK_DOC_V_XML_=$(GTK_DOC_V_XML_@AM_DEFAULT_V@) GTK_DOC_V_XML_0=@echo " DOC Building XML"; sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent $(GTK_DOC_V_XML)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) $(AM_V_at)touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true $(DOC_MAIN_SGML_FILE): sgml-build.stamp @true xml/gtkdocentities.ent: Makefile $(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ ) > $@ #### html #### GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_@AM_V@) GTK_DOC_V_HTML_=$(GTK_DOC_V_HTML_@AM_DEFAULT_V@) GTK_DOC_V_HTML_0=@echo " DOC Building HTML"; GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_@AM_V@) GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_@AM_DEFAULT_V@) GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references"; html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$$?" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \ test -f $$file && cp $$file $(abs_builddir)/html; \ done; $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) $(AM_V_at)touch html-build.stamp #### pdf #### GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_@AM_V@) GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_@AM_DEFAULT_V@) GTK_DOC_V_PDF_0=@echo " DOC Building PDF"; pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) $(AM_V_at)touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \ rm -f $(DOC_MODULE).types; \ fi @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \ rm -f $(DOC_MODULE)-sections.txt; \ fi distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(DOC_MODULE).types; \ fi maintainer-clean-local: @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # if HAVE_GTK_DOC dist-check-gtkdoc: docs else dist-check-gtkdoc: @echo "*** gtk-doc is needed to run 'make dist'. ***" @echo "*** gtk-doc was not found when 'configure' ran. ***" @echo "*** please install gtk-doc and rerun 'configure'. ***" @false endif dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local @mkdir $(distdir)/html @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs libtasn1-4.16.0/.clcopying0000644000000000000000000000046113246341643012205 00000000000000 ---------------------------------------------------------------------- Copyright (C) 2002-2014 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. libtasn1-4.16.0/NEWS0000644000000000000000000005622513615377773010742 00000000000000GNU Libtasn1 NEWS -*- outline -*- * Noteworthy changes in release 4.16.0 (released 2020-02-01) [stable] - asn1_decode_simple_ber: added support for constructed definite octet strings. This allows this function decode the whole set of BER encodings for OCTET STRINGs. - asn1_get_object_id_der: enhance the range of decoded OIDs (#25). This also makes OID encoding and decoding more strict on invalid input. This may break gnutls' test suite before 3.6.12 as it was relying on decoding some invalid OIDs. - asn1_object_id_der: New function * Noteworthy changes in release 4.15.0 (released 2019-11-21) [stable] - The generated tree no longer contains ASN.1 built-in types even if they are explicitly defined in the description. Previously a warning was printed when these types were seen, now they are ignored. - Several fixes in ASN.1 definition parser, preventing several crashes and leaks in the tools due to improper ASN.1. - Switched to semantic versioning. * Noteworthy changes in release 4.14 (released 2019-07-21) [stable] - New #defines for version checking: ASN1_VERSION_MAJOR, ASN1_VERSION_MINOR, ASN1_VERSION_PATCH, ASN1_VERSION_NUMBER. The next release will switch to semantic version semantics. - Simplify ordering of SET OF elements by using qsort(). - Marked explicitly const uses of asn1_node with the introduction of the (compatible) asn1_node_const type. - Limit recursion in _asn1_expand_object_id() to detect infinite recursion in incorrect .asn files (#4). - asn1_array2tree(): fixed thread safety issues. - Several fixes in gtk-doc generation. * Noteworthy changes in release 4.13 (released 2018-01-16) [stable] - On indefinite string decoding, set a maximum level of allowed recursions (3) to protect the BER decoder from a stack exhaustion. * Noteworthy changes in release 4.12 (released 2017-05-29) [stable] - Corrected so-name version * Noteworthy changes in release 4.11 (released 2017-05-27) [stable] - Introduced the ASN1_TIME_ENCODING_ERROR error code to indicate an invalid encoding in the DER time fields. - Introduced flag ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME. This flag allows decoding errors in time fields even when in strict DER mode. That is introduced in order to allow toleration of invalid times in X.509 certificates (which are common) even though strict DER adherence is enforced in other fields. - Added safety check in asn1_find_node(). That prevents a crash when a very long variable name is provided by the developer. Note that this to be exploited requires controlling the ASN.1 definitions used by the developer, i.e., the 'name' parameter of asn1_write_value() or asn1_read_value(). The library is not designed to protect against malicious manipulation of the developer assigned variable names. Reported by Jakub Jirasek. * Noteworthy changes in release 4.10 (released 2017-01-16) [stable] - Updated gnulib - Removed -Werror from default compiler flags - Fixed undefined behavior when negating integers in _asn1_ltostr(). Issue found by oss-fuzz project (via gnutls): https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=388 - Pass the correct length to _asn1_get_indefinite_length_string in asn1_get_length_ber. This addresses reading 1-byte past the end of data. Issue found by oss-fuzz project (via gnutls): https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=330 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=331 * Noteworthy changes in release 4.9 (released 2016-07-25) [stable] - Fixes to OID encoding of OIDs which have elements which exceed 2^32 * Noteworthy changes in release 4.8 (released 2016-04-11) [stable] - Fixes to avoid reliance on C undefined behavior. - Fixes to avoid an infinite recursion when decoding without the ASN1_DECODE_FLAG_STRICT_DER flag. Reported by Pascal Cuoq. - Combined all the BER octet string decoding functions to a single one based on asn1_decode_simple_ber(). * Noteworthy changes in release 4.7 (released 2015-09-14) [stable] - Fixed regression introduced in the decoding of multi-byte tags fix. * Noteworthy changes in release 4.6 (released 2015-09-05) [stable] - Allow decoding OCTET STRINGs with multi-byte tags. - API and ABI changes since last version: asn1_get_object_id_der: New function * Noteworthy changes in release 4.5 (released 2015-04-29) [stable] - Corrected an invalid memory access in octet string decoding. Reported by Hanno Böck. * Noteworthy changes in release 4.4 (released 2015-03-29) [stable] - Corrected a two-byte stack overflow in asn1_der_decoding. Reported by Hanno Böck. * Noteworthy changes in release 4.3 (released 2015-03-09) [stable] - Added asn1_decode_simple_ber() * Noteworthy changes in release 4.2 (released 2014-09-15) [stable] - Added sanity checks in the decoding of time when ASN1_DECODE_FLAG_STRICT_DER is used. - Fixes in the decoding of OCTET STRING when close to the end of the structure. * Noteworthy changes in release 4.1 (released 2014-08-23) [stable] - Corrected indefinite tag check in ANY constructions. That allows the decoding of BER-encoded structures that contain indefinite encoding within an ANY element. - Added DER decoding flag ASN1_DECODE_FLAG_STRICT_DER. Over the years BER functionality was added to the decoder and this flag provides the way to disable it. - API and ABI changes since last version: ASN1_DECODE_FLAG_STRICT_DER: New definition * Noteworthy changes in release 4.0 (released 2014-06-26) [stable] - Optimized asn1_der_decoding_startEnd(). It no longer requires the additional decoding step. - asn1_read_value() understands the ?CURRENT keyword, which can be used to indicate the current element of a sequence, when the provided node is a sequence element. - Several optimizations in DER decoding of structures with sequences containing many elements. - asn1_der_decoding2() is introduced and allows flags to be passed on the decoding process. Currently only ASN1_DECODE_FLAG_ALLOW_PADDING is defined and that allows decoding DER structures that contain arbitrary data past their end. Contributed by Karel Slany. - API and ABI changes since last version: ASN1_DECODE_FLAG_ALLOW_PADDING: New definition asn1_dup_node: New function asn1_der_decoding2: New function asn1_der_decoding_element: It is now an alias to asn1_der_decoding * Noteworthy changes in release 3.6 (released 2014-05-25) [stable] - Corrected an off-by-one error in ASN.1 DER tag decoding. - Several improvements and new safety checks on DER decoding; issues found using Codenomicon TLS test suite. - Marked asn1_der_decoding_element() as deprecated. Use asn1_der_decoding() instead. * Noteworthy changes in release 3.5 (released 2014-05-01) [stable] - Correctly handle decoding of recursive CHOICE options. - Allow deleting elements of SET OF. Patch by Jean-Louis Thekekara. - Several small bug fixes found by coverity. - Code improvements contributed by Kurt Roeckx. * Noteworthy changes in release 3.4 (released 2013-11-25) [stable] - Added asn1_delete_structure2() which allows zeroizing the contents of all values in the structure prior to deinitialization. - The parser accepts negative numbers in an INTEGER range (but still does no enforce them). * Noteworthy changes in release 3.3 (released 2013-03-23) [stable] - More precise overflow checks using gnulib's intprops module. - Updates to compile in Android systems. * Noteworthy changes in release 3.2 (released 2012-11-30) [stable] - Corrected buffer overflow in the error reporting of the parser (reported by Andreas Metzler). * Noteworthy changes in release 3.1 (released 2012-11-24) [stable] - Completed rename of types: ASN1_ARRAY_TYPE -> asn1_static_node (was asn1_static_node_t) - Added new types: VisibleString, NumericString, IA5String, TeletexString, PrintableString, UniversalString, BMPString, UTF8String. When re-defined a warning is being print instead of failing. - Parser outputs more detailed syntax error messages. - Added asn1_decode_simple_der() and asn1_encode_simple_der(). - Added asn1_read_value_type() to return value and type. - Introduced ASN1_ETYPE_UTC_TIME and ASN1_ETYPE_GENERALIZED_TIME * Noteworthy changes in release 3.0 (2012-10-28) [stable] - Added tool in tests/ to benchmark X.509 structure decoding. - Added asn1_read_node_value() to obtain a node's value. - Optimizations in internal tree allocation. - Optimizations in tree search. - libtasn1.h no longer exports internal structures. - Types were renamed for consistency: ASN1_DATA_NODE -> asn1_data_node_st ASN1_ARRAY_TYPE -> asn1_static_node ASN1_TYPE -> asn1_node ASN1_TYPE_EMPTY -> NULL static_struct_asn -> asn1_static_node_st node_asn_struct -> asn1_node_st node_asn -> asn1_node_st (the old types are still available as definitions) * Noteworthy changes in release 2.13 (2012-05-31) [stable] - Updated fix for DER decoding issue to not depend on specific compilers. - Updated DER decoding check to apply to short form integers as well. * Noteworthy changes in release 2.12 (2012-03-19) [stable] - Cleanup license headers. - build: Update gnulib files. - Corrected DER decoding issue (reported by Matthew Hall). Added self check to detect the problem, see tests/Test_overflow.c. This problem can lead to at least remotely triggered crashes, see further analysis on the libtasn1 mailing list. * Noteworthy changes in release 2.11 (2011-11-25) [stable] - qa: Now builds without compiler warnings with Solaris CC. - qa: Added clang analysis. Fixed cyclomatic complexity output. - tests: Added self-test of bit string functions. - build: Added windows/libtasn14win.mk rules to produce Windows binaries. - build: Don't hard code path to perl in doc/gdoc. - Various minor fixes. * Noteworthy changes in release 2.10 (2011-10-25) [stable] - lib: Small optimization, possibly working around gcc/valgrind issue. - build: Update gnulib files. - asn1Coding: actually implement the -c parameter. - asn1Decoding: the -c parameter serves no purpose, remove it. - doc: Add examples to asn1Coding and asn1Decoding description. * Noteworthy changes in release 2.9 (2010-12-06) [stable] - tests: Link to gnulib to avoid build error related to 'rpl_ftello' on Solaris. Reported by Dagobert Michelsen. - doc: Fix bug reporting address to point at help-libtasn1@gnu.org. - doc: Fix Returns: documentation in Texinfo. Reported by Jeffrey Walton. - build: Update gnulib files. * Noteworthy changes in release 2.8 (2010-09-25) [stable] - Update gnulib files. - Use Libtool 2.2.10 to ease MinGW64 builds. * Noteworthy changes in release 2.7 (2010-05-20) [stable] - Doc: Build a PDF manual using GTK-DOC. - Doc: Fix of asn1_check_version, documentation was missing from last release. - Build: Avoid warnings about ignored visibility attributes on Windows. * Noteworthy changes in release 2.6 (2010-04-20) [stable] - Fix build failure on platforms without support for GNU LD version scripts. - libtasn1: Simplified implementation of asn1_check_version. - tests: Improved self-checks. - Update gnulib files, fix many syntax-check nits, indent code, fix license templates. * Noteworthy changes in release 2.5 (2010-03-15) [stable] - doc: Improve GTK-DOC comments. - misc: Updated gnulib files. * Noteworthy changes in release 2.4 (2010-01-18) [stable] - Doc fixes. - Updated gnulib files. - Clean up copyright notices. * Noteworthy changes in release 2.3 (2009-07-29) [stable] - Libtasn1 is now an official GNU project. - Solve build problem on Tru64 related to TRUE/FALSE. - More careful decoding of OIDs. - Fixed warning in ASN1.y. - Use "Software libraries" info dircategory. - Drop GPL/LGPL copies from the manual (not needed there). - New configure parameters to set packaging specific information. The parameters are --with-packager, --with-packager-version, and --with-packager-bug-reports. See for more details. * Noteworthy changes in release 2.2 (2009-05-20) [stable] - Change how the ASN1_API decorator is used in libtasn1.h, for GTK-DOC. - Changed license of libtasn1.pc from GPLv3+ to LGPLv2.1+. Reported by Jeff Cai . - Building with many warning flags now requires --enable-gcc-warnings. - Some warnings fixed. * Noteworthy changes in release 2.1 (2009-04-17) [stable] - Fix compilation failure on platforms that can't generate empty archives, e.g., Mac OS X. Reported by David Reiser . * Noteworthy changes in release 2.0 (2009-04-13) [stable] - Optimized tree generation. - ASN1 parser code re-generated using Bison 2.4.1. - Build with more warning flags. Many compiler warnings fixed. - Compiled with -fvisibility=hidden by default if supported. See http://gcc.gnu.org/wiki/Visibility - The libtasn1-config tool has been removed. For application developers, please stop using libtasn1-config for finding libtasn1, use proper autoconf checks or pkg-config instead. For users that need a libtasn1 that provides a libtasn1-config script (for use with older applications), use libtasn1 v1.x instead. Version 1.x is still supported. * Noteworthy changes in release 1.8 (2009-01-16) [stable] - Fix crlf self-test under Mingw+Wine. - Fix build problems on platforms that lack stdint.h. Reported by Dagobert Michelsen in . * Noteworthy changes in release 1.7 (2008-11-17) [stable] - Add libtasn1-config for compatibility. Please stop use it as it will disappear in v2.0! Use standard AC_CHECK_FUNCS autoconf tests or pkg-config instead. - Read PKCS#12 blob as binary file, fixes self-tests under Mingw. - Fix use of __attribute__ ((deprecated)) to work on non-GCC (#106548). * Noteworthy changes in release 1.6 (2008-11-10) [stable] - Fixed namespace violation for MAX_NAME_SIZE and MAX_ERROR_DESCRIPTION_SIZE. The new names are ASN1_MAX_NAME_SIZE and ASN1_MAX_ERROR_DESCRIPTION_SIZE. - Fixed namespace violation for libtasn1_perror and libtasn1_strerror. The new names are asn1_perror and asn1_strerror. - Fix namespace violation for LIBASN1_VERSION. The new name is ASN1_VERSION. - Decoder can now decode BER encoded octet strings. - doc: Change license on the manual to GFDLv1.3+. - doc: Sync gdoc script with GnuTLS, changes license on man-pages to GAP. - doc: Improve gtk-doc manual. - Assumes system has strdup and string.h. - Remove libtasn1-config and libtasn1.m4, use standard AC_CHECK_FUNCS autoconf tests or pkg-config instead. - Change detection of when to use a linker version script, use --enable-ld-version-script or --disable-ld-version-script to override auto-detection logic. - API and ABI changes since last version: asn1_get_length_ber: New function. ASN1_VERSION: New symbol, replaces LIBTASN1_VERSION. asn1_strerror: New function, replaces libtasn1_strerror. asn1_perror: New function, replaces libtasn1_perror. libtasn1_strerror: Marked as deprecated. libtasn1_perror: Marked as deprecated. LIBTASN1_VERSION: Deprecated. * Noteworthy changes in release 1.5 (2008-07-29) [stable] - Update gnulib files. - Fix memory leaks, from Christian Grothoff . * Noteworthy changes in release 1.4 (2008-04-21) [stable] - Update gnulib files. - Replace uses of alloca with malloc. * Noteworthy changes in release 1.3 (2008-02-01) [stable] - Handle 'INTEGER { ... } (a..b)' regression. Revert parts of earlier fix. asn1Parser can now again parse src/pkix.asn1. The ASN1.c file was generated using Bison 2.3. - Move examples from src/ to new directory examples/. - Duplicate copy of divergated pkix.asn removed. - Merge unnecessary lib/defines.h into lib/int.h. - Configure no longer tries to use gcc -pipe. - Update gnulib files. - Fix mem leak in self-test. * Noteworthy changes in release 1.2 (2007-12-10) [stable] - Update gnulib files. * Noteworthy changes in release 1.1 (2007-08-31) [stable] - Fix bug that made asn1_check_version believe that 1.0 is older than 0.3.10. * Noteworthy changes in release 1.0 (2007-08-31) [stable] - The self-tests, command line tools and build infrastructure have been re-licensed from GPLv2 to GPLv3. - Doc fixes. - Update gnulib files. * Noteworthy changes in release 0.3.10 (2007-05-25) - Update gnulib files. * Noteworthy changes in release 0.3.9 (2007-03-02) - In generated code, config.h is pulled in if HAVE_CONFIG_H. - Development changes: changed from CVS to GIT as an experiment. I push my changes to . - Autoconf 2.61 and automake 1.10 is required. * Noteworthy changes in release 0.3.8 (2006-11-16) - Fix reading of binary files in asn1Decoding, for Windows. * Noteworthy changes in release 0.3.7 (2006-10-19) - When asn1_der_coding encoded a TYPE_NULL and the output buffer is NULL, it would not increment the counter properly, so the size of the required buffer would be off by one. Fixed. Reported by Stephen Wrobleski . - Fix configure to respect user-definable flags. Reported by "Diego 'Flameeyes' Pettenò" . - The --help and --version outputs from the tools have been improved. * Noteworthy changes in release 0.3.6 (2006-08-13) - Fix man pages to use \- instead of - for negative signs (as in "-1"). - Add -I's when building in src/, so that unistd.h etc is found on systems that doesn't have them. - Valgrind isn't used for cross-compilation by default, and there is also --disable-valgrind-tests to unconditionally disable it. - Valgrind is invoked without parameters, put things you like into ~/.valgrindrc instead. * Noteworthy changes in release 0.3.5 (2006-06-27) - Fix asn1_octet_der to handle writes of zero-length buffers, before it did not write the ASN.1 length for a zero-length buffer. This caused ASN.1 encodings to be incorrect on 64-bit platforms. - Add self test that attempt to trigger the above bug. - Fix test of -Wno-pointer-sign. - Improve cross-compilation to MinGW by using AC_LIBTOOL_WIN32_DLL. * Noteworthy changes in release 0.3.4 (2006-05-10) - Really fix encodings. - Add new self test, tests/Test_encoding.c. - Self tests are ran under valgrind, if it is available. - We test for the -Wno-pointer-sign parameter before using it. * Noteworthy changes in release 0.3.3 (2006-05-07) - Add some 'const' to prototypes. - Remove some 'unsigned' keywords. - Corrected asn1_der_coding() bug introduced when it became reentrant. Now it produces correct encodings. * Noteworthy changes in release 0.3.2 - Corrected bug in asn1_der_coding() which overwrited some data in the original structure. - The asn1Parser, asn1Coding and asn1Decoding programs are now installed. * Noteworthy changes in release 0.3.1 - Support constant size bit strings, as in 'BIT STRING (SIZE(42))'. Reported by Cyril Holweck . - Add two more APIs required by GnuTLS. - New public APIs: asn1_find_node function asn1_copy_node * Noteworthy changes in release 0.3.0 - Export DER utility functions, mostly so that GnuTLS can avoid using libtasn1 internals. - The _asn1* symbols are not exported in the shared library file (when using GNU ld). - The library can now be built using Visual Studio, and the project files are included in windows/. - New public APIs: asn1_get_tag_der asn1_octet_der asn1_get_octet_der asn1_bit_der asn1_get_bit_der asn1_get_length_der asn1_length_der * Noteworthy changes in release 0.2.18 - Fix out-of-bounds access in DER decoding, reported by Evgeny Legerov. - Add 'const' keyword to some prototypes, thanks to Frediano ZIGLIO. - Fixed typo in src/Makefile.am to make it build with objdir != srcdir, thanks to Bernard Leak. - Update of gnulib files. - Typo fixes in comments, e.g. finish libasn1 to libtasn1 renaming, use LGPL boiler plate on some files in lib/. * Noteworthy changes in release 0.2.17 - Fixed typo to make it build. * Noteworthy changes in release 0.2.16 - * Noteworthy changes in release script added again. * Noteworthy changes in release 0.2.15 - Gnulib is used to implement memmove if your system does not have it. - Simplified assert/error handling slightly. * Noteworthy changes in release 0.2.14 - Some build fixes. - Pkg-config script 'libtasn1.pc' added. - Postal address to FSF in license updated. * Noteworthy changes in release 0.2.13 - * Noteworthy changes in release number in libtasn1.h updated properly. * Noteworthy changes in release 0.2.12 - Manual converted to Texinfo format. - Manual in GTK-DOC and DevHelp formats added. - Man pages for all functions added. - Various internal cleanups. * Noteworthy changes in release 0.2.11 - Added the self test with "make check" target - Added management of ANY type with null length - Corrected some writes to invalid data. * Noteworthy changes in release 0.2.10 - Added scripts to assist in libtasn1 version detection from configure scripts. - Corrected a DER decoding bug which was reported by Max Vozeler . * Noteworthy changes in release 0.2.9 - Accept negative numbers as range in INTEGER declarations * Noteworthy changes in release 0.2.8 - Add asn1_delete_element function * Noteworthy changes in release 0.2.7 - Added versioned symbols. * Noteworthy changes in release 0.2.6 - ASN.1 parser accepts these kinds of integer definitions: "INTEGER (5 | 10)" and "INTEGER (5)" - Comments start at "--" and finish at the "end of line" or with another "--". * Noteworthy changes in release 0.2.5 - Bug fix in ordering procedure for SET OF and SEQUENCE OF types coding. - Manage structured format (BER encoding) in asn1_der_decoding, asn1_decoding_element and asn1_der_decoding_startEnd for OCTET STRING type. - Manage SEQUENCE and SET empty structure. - Manage "indefinite length method" in asn1_der_decoding, asn1_decoding_element and asn1_der_decoding_startEnd for the following types: SEQUENCE, SEQUENCE OF, SET, and SET OF. - Bug fix in asn1_read_value with NULL parameter in case of BIT STRING * Noteworthy changes in release 0.2.4 - Bug fix in asn1_der_coding with NULL parameter - Manage DEFAULT option with OBJECT IDENTIFIER * Noteworthy changes in release 0.2.3 - Chenge asn1_find_structure_from_oid prototype - Chenge asn1_find_structure_from_oid prototype - Add ASN1_MEM_ALLOC_ERROR return value * Noteworthy changes in release 0.2.2 - Add vector length check in asn1_der_coding function - Add vector length check in asn1_der_coding function - Add vector length check in asn1_read_value function - Add asn1_check_version function * Noteworthy changes in release 0.2.1 - Add asn1_find_structure_from_oid function - Add asn1_read_tag function * Noteworthy changes in release 0.2.0 - Support for other platforms - Change asn1_create_element function interface (dest_name not needed any more) - Change OBJECT IDENTIFIER syntax: numbers must be separated by dot in asn1_write_element and asn1_read_element functions (e.g. "1.2.3.4") * Noteworthy changes in release 0.1.2 - Added GeneralString type - Fixed a DER encoding bug when nested tags are used * Noteworthy changes in release 0.1.1 - Renamed to libtasn1 - Functions which return a string for error description now accept a NULL argument. - License is now GNU Lesser GPL * Noteworthy changes in release 0.1.0 - Initial release ---------------------------------------------------------------------- Copyright (C) 2002-2014 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. libtasn1-4.16.0/INSTALL0000644000000000000000000003661413514402107011246 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. libtasn1-4.16.0/build-aux/0000755000000000000000000000000013615400132012153 500000000000000libtasn1-4.16.0/build-aux/depcomp0000755000000000000000000005602013514402107013455 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2018 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: libtasn1-4.16.0/build-aux/install-sh0000755000000000000000000003601013514402107014101 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2018-03-11.20; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # Note that $RANDOM variable is not portable (e.g. dash); Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p' feature. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: libtasn1-4.16.0/build-aux/ar-lib0000755000000000000000000001330313615375040013200 00000000000000#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2018 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: libtasn1-4.16.0/build-aux/ltmain.sh0000644000000000000000000117147413247314711013742 00000000000000#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-2" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 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. # 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 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # 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 "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 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. # 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 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.6-2 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; 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 no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # 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 else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # 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 yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; 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 prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && 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 built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; 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 lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; 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 yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; 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 prog = "$linkmode"; 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 unsupported != "$hardcode_direct"; 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 yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; 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 cannot 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 yes = "$module"; 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 no = "$build_old_libs"; 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 lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; 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 no = "$build_old_libs"; 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 no = "$allow_undefined"; 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 no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && 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 : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: libtasn1-4.16.0/build-aux/ylwrap0000755000000000000000000001531413615375040013354 00000000000000#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . get_dirname () { case $1 in */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; # Otherwise, we want the empty string (not "."). esac } # guard FILE # ---------- # The CPP macro used to guard inclusion of FILE. guard () { printf '%s\n' "$1" \ | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ -e 's/__*/_/g' } # quote_for_sed [STRING] # ---------------------- # Return STRING (or stdin) quoted to be used as a sed pattern. quote_for_sed () { case $# in 0) cat;; 1) printf '%s\n' "$1";; esac \ | sed -e 's|[][\\.*]|\\&|g' } case "$1" in '') echo "$0: No files given. Try '$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to . EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input=$1 shift # We'll later need for a correct munging of "#line" directives. input_sub_rx=`get_dirname "$input" | quote_for_sed` case $input in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input=`pwd`/$input ;; esac input_rx=`get_dirname "$input" | quote_for_sed` # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot=false if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot=true fi # The parser itself, the first file, is the destination of the .y.c # rule in the Makefile. parser=$1 # A sed program to s/FROM/TO/g for all the FROM/TO so that, for # instance, we rename #include "y.tab.h" into #include "parse.h" # during the conversion from y.tab.c to parse.c. sed_fix_filenames= # Also rename header guards, as Bison 2.7 for instance uses its header # guard in its implementation file. sed_fix_header_guards= while test $# -ne 0; do if test x"$1" = x"--"; then shift break fi from=$1 # Handle y_tab.c and y_tab.h output by DOS if $y_tab_nodot; then case $from in "y.tab.c") from=y_tab.c;; "y.tab.h") from=y_tab.h;; esac fi shift to=$1 shift sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" done # The program to run. prog=$1 shift # Make any relative path in $prog absolute. case $prog in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog=`pwd`/$prog ;; esac dirname=ylwrap$$ do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then for from in * do to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend '../'. case $to in [\\/]* | ?:[\\/]*) target=$to;; *) target=../$to;; esac # Do not overwrite unchanged header files to avoid useless # recompilations. Always update the parser itself: it is the # destination of the .y.c rule in the Makefile. Divert the # output of all other files to a temporary file so we can # compare them to existing versions. if test $from != $parser; then realtarget=$target target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` fi # Munge "#line" or "#" directives. Don't let the resulting # debug information point at an absolute srcdir. Use the real # output file name, not yy.lex.c for instance. Adjust the # include guards too. sed -e "/^#/!b" \ -e "s|$input_rx|$input_sub_rx|" \ -e "$sed_fix_filenames" \ -e "$sed_fix_header_guards" \ "$from" >"$target" || ret=$? # Check whether files must be updated. if test "$from" != "$parser"; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$to is unchanged" rm -f "$target" else echo "updating $to" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the parser. This is a # blatant hack to let us support using "yacc -d". If -d is not # specified, don't fail when the header file is "missing". if test "$from" = "$parser"; then ret=1 fi fi done fi # Remove the directory. cd .. rm -rf $dirname exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: libtasn1-4.16.0/build-aux/config.guess0000755000000000000000000013625013514402107014424 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2019 Free Software Foundation, Inc. timestamp='2019-06-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2019 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 # 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. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { : "${TMPDIR=/tmp}" # shellcheck disable=SC2039 { 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" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$driver" 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 } # 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 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac # Note: order is significant - the case branches are not exclusive. case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ "/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 ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine="${arch}${endian}"-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) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; 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/[-_].*//' | cut -d. -f1,2` ;; 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}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; *:OS108:*:*) echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; 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 ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-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) 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 set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` 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:4.4BSD:*) 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 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 set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) 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 ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi else echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf fi exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case "$UNAME_MACHINE" in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-pc-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-$LIBC`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 "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; *:Minix:*:*) echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-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.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*: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 i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-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; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-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.[02]*:*) 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 ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-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` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-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. # shellcheck disable=SC2154 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 ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; *:Unleashed:*:*) echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" exit ;; esac # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #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 (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 #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #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; } echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&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 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libtasn1-4.16.0/build-aux/texinfo.tex0000644000000000000000000133755413514402107014315 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2019-06-01.23} % % Copyright 1985, 1986, 1988, 1990-2019 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % https://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is https://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} % LaTeX's \typeout. This ensures that the messages it is used for % are identical in format to the corresponding ones from latex/pdflatex. \def\typeout{\immediate\write17}% \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexsp=\sp \let\ptexstar=\* \let\ptexsup=\sup \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Give the space character the catcode for a space. \def\spaceisspace{\catcode`\ =10\relax} % Likewise for ^^M, the end of line character. \def\endlineisspace{\catcode13=10\relax} \chardef\dashChar = `\- \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Output routine % % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. % \domark is called twice inside \chapmacro, to add one % mark before the section break, and one after. % In the second call \prevchapterdefs is the same as \currentchapterdefs, % and \prevsectiondefs is the same as \currentsectiondefs. % Then if the page is not broken at the mark, some of the previous % section appears on the page, and we can get the name of this section % from \firstmark for @everyheadingmarks top. % @everyheadingmarks bottom uses \botmark. % % See page 260 of The TeXbook. \def\domark{% \toks0=\expandafter{\currentchapterdefs}% \toks2=\expandafter{\currentsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\currentcolordefs}% \mark{% \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom \noexpand\else \the\toks8 % 2: color marks }% } % \gettopheadingmarks, \getbottomheadingmarks, % \getcolormarks - extract needed part of mark. % % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\the\savedtopmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\the\savedtopmark\fi} % Avoid "undefined control sequence" errors. \def\currentchapterdefs{} \def\currentsectiondefs{} \def\currentsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\currentcolordefs{} % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\txipagewidth \newdimen\txipageheight % Main output routine. % \chardef\PAGE = 255 \newtoks\defaultoutput \defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}} \output=\expandafter{\the\defaultoutput} \newbox\headlinebox \newbox\footlinebox % When outputting the double column layout for indices, an output routine % is run several times, which hides the original value of \topmark. This % can lead to a page heading being output and duplicating the chapter heading % of the index. Hence, save the contents of \topmark at the beginning of % the output routine. The saved contents are valid until we actually % \shipout a page. % % (We used to run a short output routine to actually set \topmark and % \firstmark to the right values, but if this was called with an empty page % containing whatsits for writing index entries, the whatsits would be thrown % away and the index auxiliary file would remain empty.) % \newtoks\savedtopmark \newif\iftopmarksaved \topmarksavedtrue \def\savetopmark{% \iftopmarksaved\else \global\savedtopmark=\expandafter{\topmark}% \global\topmarksavedtrue \fi } % \onepageout takes a vbox as an argument. % \shipout a vbox for a single page, adding an optional header, footer % and footnote. This also causes index entries for this page to be written % to the auxiliary files. % \def\onepageout#1{% \hoffset=\normaloffset % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Retrieve the information for the headings from the marks in the page, % and call Plain TeX's \makeheadline and \makefootline, which use the % values in \headline and \footline. % % This is used to check if we are on the first page of a chapter. \ifcase1\the\savedtopmark\fi \let\prevchaptername\thischaptername \ifcase0\firstmark\fi \let\curchaptername\thischaptername % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi % \ifx\curchaptername\prevchaptername \let\thischapterheading\thischapter \else % \thischapterheading is the same as \thischapter except it is blank % for the first page of a chapter. This is to prevent the chapter name % being shown twice. \def\thischapterheading{}% \fi % % Common context changes for both heading and footing. % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \def\commmonheadfootline{\let\hsize=\txipagewidth \texinfochars} % \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% % \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}% % {% % Set context for writing to auxiliary files like index files. % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \atdummies % don't expand commands in the output. \turnoffactive \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % }% }% \global\topmarksavedfalse \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen % Main part of page, including any footnotes \def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Argument parsing % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % For example, \def\foo{\parsearg\fooxxx}. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. Pass the result on to % \argcheckspaces. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef - define a command taking an argument on the line % % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. \addgroupbox \prevdepth = \dimen1 \checkinserts } \def\addgroupbox{ % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \txipageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\txipageheight \page \fi \fi \box\groupbox } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\c{\begingroup \catcode`\^^M=\active% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \cxxx} {\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}} % \let\comment\c % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent {\restorefirstparagraphindent \indent}% \gdef\noindent{\restorefirstparagraphindent \noindent}% \global\everypar = {\kern -\parindent \restorefirstparagraphindent}% } % \gdef\restorefirstparagraphindent{% \global\let\indent = \ptexindent \global\let\noindent = \ptexnoindent \global\everypar = {}% } % @refill is a no-op. \let\refill=\relax % @setfilename INFO-FILENAME - ignored \let\setfilename=\comment % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newbox\boxB \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % % For LuaTeX % \newif\iftxiuseunicodedestname \txiuseunicodedestnamefalse % For pdfTeX etc. \ifx\luatexversion\thisisundefined \else % Use Unicode destination names \txiuseunicodedestnametrue % Escape PDF strings with converting UTF-16 from UTF-8 \begingroup \catcode`\%=12 \directlua{ function UTF16oct(str) tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377') for c in string.utfvalues(str) do if c < 0x10000 then tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', (c / 256), (c % 256))) else c = c - 0x10000 local c_hi = c / 1024 + 0xd800 local c_lo = c % 1024 + 0xdc00 tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', (c_hi / 256), (c_hi % 256), (c_lo / 256), (c_lo % 256))) end end end } \endgroup \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}} % Escape PDF strings without converting \begingroup \directlua{ function PDFescstr(str) for c in string.bytes(str) do if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o', c)) else tex.sprint(string.char(c)) end end end } \endgroup \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} \ifnum\luatexversion>84 % For LuaTeX >= 0.85 \def\pdfdest{\pdfextension dest} \let\pdfoutput\outputmode \def\pdfliteral{\pdfextension literal} \def\pdfcatalog{\pdfextension catalog} \def\pdftexversion{\numexpr\pdffeedback version\relax} \let\pdfximage\saveimageresource \let\pdfrefximage\useimageresource \let\pdflastximage\lastsavedimageresourceindex \def\pdfendlink{\pdfextension endlink\relax} \def\pdfoutline{\pdfextension outline} \def\pdfstartlink{\pdfextension startlink} \def\pdffontattr{\pdfextension fontattr} \def\pdfobj{\pdfextension obj} \def\pdflastobj{\numexpr\pdffeedback lastobj\relax} \let\pdfpagewidth\pagewidth \let\pdfpageheight\pageheight \edef\pdfhorigin{\pdfvariable horigin} \edef\pdfvorigin{\pdfvariable vorigin} \fi \fi % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi \newif\ifpdforxetex \pdforxetexfalse \ifpdf \pdforxetextrue \fi \ifx\XeTeXrevision\thisisundefined\else \pdforxetextrue \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \xdef#1{#1}% \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \def\txiescapepdfutfsixteen#1{% \ifx\pdfescapestrutfsixteen\thisisundefined % No UTF-16 converting macro available. \txiescapepdf{#1}% \else \xdef#1{\pdfescapestrutfsixteen{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros using ideas from pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. The dark red here is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. We use % black by default, though. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % rg sets the color for filling (usual text, etc.); % RG sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname \ifx \declaredencoding \latone % Pass through Latin-1 characters. % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode. \else \ifx \declaredencoding \utfeight % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \fi \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \indexnofonts \makevalueexpandable \turnoffactive \ifx \declaredencoding \latone % The PDF format can use an extended form of Latin-1 in bookmark % strings. See Appendix D of the PDF Reference, Sixth Edition, for % the "PDFDocEncoding". \passthroughcharstrue % Pass through Latin-1 characters. % LuaTeX: Convert to Unicode % pdfTeX: Use Latin-1 as PDFDocEncoding \def\pdfoutlinetext{#1}% \else \ifx \declaredencoding \utfeight \ifx\luatexversion\thisisundefined % For pdfTeX with UTF-8. % TODO: the PDF format can use UTF-16 in bookmark strings, % but the code for this isn't done yet. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \else % For LuaTeX with UTF-8. % Pass through Unicode characters for title texts. \passthroughcharstrue \def\pdfoutlinetext{#1}% \fi \else % For non-Latin-1 or non-UTF-8 encodings. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \fi \fi % LuaTeX: Convert to UTF-16 % pdfTeX: Use Latin-1 as PDFDocEncoding \txiescapepdfutfsixteen\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} % \pdfgettoks - Surround page numbers in #1 with @pdflink. #1 may % be a simple number, or a list of numbers in the case of an index % entry. \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput % % For XeTeX % \ifx\XeTeXrevision\thisisundefined \else % % XeTeX version check % \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1 % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307. % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941). % For avoiding PDF destination name replacement, we use this special % instead of xdvipdfmx's command line option `-C 0x0010'. \special{dvipdfmx:config C 0x0010} % XeTeX 0.99995+ comes with xdvipdfmx 20160307+. % It can handle Unicode destination names for PDF. \txiuseunicodedestnametrue \else % XeTeX < 0.99996 (TeX Live < 2016) cannot use the % `dvipdfmx:config' special. % So for avoiding PDF destination name replacement, % xdvipdfmx's command line option `-C 0x0010' is necessary. % % XeTeX < 0.99995 can not handle Unicode destination names for PDF % because xdvipdfmx 20150315 has a UTF-16 conversion issue. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). \txiuseunicodedestnamefalse \fi % % Color support % \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % \def\pdfsetcolor#1{\special{pdf:scolor [#1]}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % PDF outline support % % Emulate pdfTeX primitive \def\pdfdest name#1 xyz{% \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}% } % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \turnoffactive % Always use Unicode characters in title texts. \def\pdfoutlinetext{#1}% % For XeTeX, xdvipdfmx converts to UTF-16. % So we do not convert. \txiescapepdf\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % \def\dopdfoutline#1#2#3#4{% \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A << /S /GoTo /D (\pdfdestname) >> >> }% } % \def\pdfmakeoutlines{% \begingroup % % For XeTeX, counts of subentries are not necessary. % Therefore, we read toc only once. % % We use node names as destinations. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{1}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{2}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{3}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% \dopdfoutline{##1}{4}{##3}{##4}}% % \let\appentry\numchapentry% \let\appsecentry\numsecentry% \let\appsubsecentry\numsubsecentry% \let\appsubsubsecentry\numsubsubsecentry% \let\unnchapentry\numchapentry% \let\unnsecentry\numsecentry% \let\unnsubsecentry\numsubsecentry% \let\unnsubsubsecentry\numsubsubsecentry% % % For XeTeX, xdvipdfmx converts strings to UTF-16. % Therefore, the encoding and the language may not be considered. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] \special{pdf:docview << /PageMode /UseOutlines >> } % ``\special{pdf:tounicode ...}'' is not necessary % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it. % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315, % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \special{pdf:bann << /Border [0 0 0] /Subtype /Link /A << /S /URI /URI (#1) >> >>}% \endgroup} \def\endlink{\setcolor{\maincolor}\special{pdf:eann}} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}% \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} % % % @image support % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\doxeteximage#1#2#3{% \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\xeteximgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errmessage{Could not find image file #1 for XeTeX}% \else \gdef\xeteximgext{JPG}% \fi \else \gdef\xeteximgext{jpeg}% \fi \else \gdef\xeteximgext{jpg}% \fi \else \gdef\xeteximgext{png}% \fi \else \gdef\xeteximgext{PDF}% \fi \else \gdef\xeteximgext{pdf}% \fi \closein 1 \endgroup % \def\xetexpdfext{pdf}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \def\xetexpdfext{PDF}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \XeTeXpicfile "#1".\xeteximgext "" \fi \fi \ifdim \wd0 >0pt width \xeteximagewidth \fi \ifdim \wd2 >0pt height \xeteximageheight \fi \relax } \fi % \message{fonts,} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defsl\slshape{10}{\magstep1}{OT1} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\ttslfont=\defttsl \let\slfont=\defsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acronym in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defsl\slshape{10}{\magstephalf}{OT1} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\slfont=\defsl \let\ttslfont=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acronym in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname #1font\endcsname % change the current font } \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. % We don't bother to reset \scriptscriptfont; awaiting user need. % \def\resetmathfonts{% \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont \textfont\ttfam=\ttfont \textfont\sffam=\sffont % % Fonts for superscript. Note that the 7pt fonts are used regardless % of the current font size. \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt \scriptfont\sffam=\sevensf } % % The font-changing commands (all called \...fonts) redefine the meanings % of \STYLEfont, instead of just \STYLE. We do this because \STYLE needs % to also set the current \fam for math mode. Our \STYLE (e.g., \rm) % commands hardwire \STYLEfont to set the current font. % % The fonts used for \ifont are for "math italics" (\itfont is for italics % in regular text). \syfont is also used in math mode only. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used % in, e.g., the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\assignfonts#1{% \expandafter\let\expandafter\rmfont\csname #1rm\endcsname \expandafter\let\expandafter\itfont\csname #1it\endcsname \expandafter\let\expandafter\slfont\csname #1sl\endcsname \expandafter\let\expandafter\bffont\csname #1bf\endcsname \expandafter\let\expandafter\ttfont\csname #1tt\endcsname \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname \expandafter\let\expandafter\sffont \csname #1sf\endcsname \expandafter\let\expandafter\ifont \csname #1i\endcsname \expandafter\let\expandafter\syfont \csname #1sy\endcsname \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname } \newif\ifrmisbold % Select smaller font size with the current style. Used to change font size % in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for % normal roman text, also use bold fonts for roman text in the smaller size. \def\switchtolllsize{% \expandafter\assignfonts\expandafter{\lllsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\switchtolsize{% \expandafter\assignfonts\expandafter{\lsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\definefontsetatsize#1#2#3#4#5{% \expandafter\def\csname #1fonts\endcsname{% \def\curfontsize{#1}% \def\lsize{#2}\def\lllsize{#3}% \csname rmisbold#5\endcsname \assignfonts{#1}% \resetmathfonts \setleading{#4}% }} \definefontsetatsize{text} {reduced}{smaller}{\textleading}{false} \definefontsetatsize{title} {chap} {subsec} {27pt} {true} \definefontsetatsize{chap} {sec} {text} {19pt} {true} \definefontsetatsize{sec} {subsec} {reduced}{17pt} {true} \definefontsetatsize{ssec} {text} {small} {15pt} {true} \definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false} \definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false} \definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false} \def\titlefont#1{{\titlefonts\rm #1}} \let\subsecfonts = \ssecfonts \let\subsubsecfonts = \ssecfonts % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style. \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \ifmonospace \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi \else '% \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \ifmonospace \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi \else \relax`% \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ifx\next\.% \else\ifx\next\comma% \else\ptexslash \fi\fi\fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % (But see \codedashfinish below.) % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi % Given -foo (with a single dash), we do not want to allow a break % after the hyphen. \global\let\codedashprev=\codedash % \codex } % \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -. % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else \ifx\codedashprev\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. \global\let\codedashprev= \next } } \def\normaldash{-} % \def\codex #1{\tclose{#1}\endgroup} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') aka @url takes an optional % (comma-separated) second argument specifying the text to display and % an optional third arg as text to display instead of (rather than in % addition to) the url itself. First (mandatory) arg is the url. % TeX-only option to allow changing PDF output to show only the second % arg (if given), and not the url (which is then just the link target). \newif\ifurefurlonlylink % The main macro is \urefbreak, which allows breaking at expected % places within the url. (There used to be another version, which % didn't support automatic breaking.) \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak % \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% look for second arg \ifdim\wd0 > 0pt \ifpdf % For pdfTeX and LuaTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \else \ifx\XeTeXrevision\thisisundefined \unhbox0\ (\urefcode{#1})% DVI, always show arg and url \else % For XeTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \fi \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode`\&=\active \catcode`\.=\active \catcode`\#=\active \catcode`\?=\active \catcode`\/=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } \def\urefcodeamp{\urefprebreak \&\urefpostbreak} \def\urefcodedot{\urefprebreak .\urefpostbreak} \def\urefcodehash{\urefprebreak \#\urefpostbreak} \def\urefcodequest{\urefprebreak ?\urefpostbreak} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprebreak \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpostbreak \fi } } % By default we'll break after the special characters, but some people like to % break before the special chars, so allow that. Also allow no breaking at % all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} % Allow a ragged right output to aid breaking long URL's. Putting stretch in % between characters of the URL doesn't look good. \def\urefallowbreak{% \hskip 0pt plus 4 em\relax \allowbreak \hskip 0pt plus -4 em\relax } \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdforxetex \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\switchtolsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \ifmmode\else % only go into math if not in math mode already \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot % have to provide another name for sup operator \let\mathopsup=\sup $\expandafter\finishmath\fi } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % for @sub and @sup, if in math mode, just do a normal sub/superscript. % If in text, use math to place as sub/superscript, but switch % into text mode, with smaller fonts. This is a different font than the % one used for real math sub/superscripts (8pt vs. 7pt), but let's not % fix it (significant additions to font machinery) until someone notices. % \def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi} \def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}% % \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} \def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}% % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} \long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi } % % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } % @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. % \long\def\inlineifset#1{\doinlineifset #1,\finish} \long\def\doinlineifset#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \else\ignorespaces#2\fi } % @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. % \long\def\inlineifclear#1{\doinlineifclear #1,\finish} \long\def\doinlineifclear#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. \def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}} \def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}} \let\{=\lbracechar \let\}=\rbracechar % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \switchtolllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. Define \ensuremath to switch into math mode % unless we are already there. Expansion tricks may not be needed here, % but safer, and can't hurt. \def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi} \def\ensuredmath#1{$\relax#1$} % \def\bullet{\ensuremath\ptexbullet} \def\geq{\ensuremath\ge} \def\leq{\ensuremath\le} \def\minus{\ensuremath-} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\ttfont \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the European Computer Modern fonts (cm-super in outline format) % for non-CM glyphs. That is ec* for regular text and tc* for the text % companion symbols (LaTeX TS1 encoding). Both are part of the ec % package and follow the same conventions. % \def\ecfont{\etcfont{e}} \def\tcfont{\etcfont{t}} % \def\etcfont#1{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = #1ctt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % @setcontentsaftertitlepage used to do an implicit @contents or % @shortcontents after @end titlepage, but it is now obsolete. \def\setcontentsaftertitlepage{% \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo command; move your @contents command if you want the contents after the title page.}}% \def\setshortcontentsaftertitlepage{% \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo command; move your @shortcontents and @contents commands if you want the contents after the title page.}}% \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. \par should % be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rm \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\rmfont \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rm \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make \makeheadline and \makefootline in Plain TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\txipageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks % These define \getoddheadingmarks, \getevenheadingmarks, % \getoddfootingmarks, and \getevenfootingmarks, each to one of % \gettopheadingmarks, \getbottomheadingmarks. % \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \parseargdef\headings{\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapterheading\hfil\folio}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapterheading\hfil\folio}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark so that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \ifinner\else \vadjust{\penalty 1200}% not good to break after first line of item. \fi % We can be in inner vertical mode in a footnote, although an % @itemize looks awful there. }% \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. Assignments % have to be global since we are inside the implicit group of an % alignment entry. \everycr below resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % default for tables with no headings. \let\headitemcrhook=\relax % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% Reset from possible headitem. \global\colcount=0 % Reset the column counter. % % Check for saved footnotes, etc.: \checkinserts % % Perhaps a \nobreak, then reset: \headitemcrhook \global\let\headitemcrhook=\relax }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % Like \expandablevalue, but completely expandable (the \message in the % definition above operates at the execution level of TeX). Used when % writing to auxiliary files, due to the expansion that \write does. % If flag is undefined, pass through an unexpanded @value command: maybe it % will be set by the time it is read back in. % % NB flag names containing - or _ may not work here. \def\dummyvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax \noexpand\value{#1}% \else \csname SET#1\endcsname \fi } % Used for @value's in index entries to form the sort key: expand the @value % if possible, otherwise sort late. \def\indexnofontsvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax ZZZZZZZ% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get the special treatment we need for `@end ifset,' we call % \makecond and then redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named IX. % It automatically defines \IXindex such that % \IXindex ...rest of line... puts an entry in the index IX. % It also defines \IXindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is IX. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % The default indices: \newindex{cp}% concepts, \newcodeindex{fn}% functions, \newcodeindex{vr}% variables, \newcodeindex{tp}% types, \newcodeindex{ky}% keys \newcodeindex{pg}% and programs. % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% \requireopenindexfile{#3}% % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all index macros. % Argument #1 is generated by the calling \fooindex macro, % and it is the two-letter name of the index. \def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx} \def\doindexxxx #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx} \def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}} % Used for the aux, toc and index files to prevent expansion of Texinfo % commands. % \def\atdummies{% \definedummyletter\@% \definedummyletter\ % \definedummyletter\{% \definedummyletter\}% % % Do the redefinitions. \definedummies \otherbackslash } % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % % For control letters, we have \definedummyletter, which omits the % space. % \def\definedummyword #1{\def#1{\string#1\space}}% \def\definedummyletter#1{\def#1{\string#1}}% \let\definedummyaccent\definedummyletter % Called from \atdummies to prevent the expansion of commands. % \def\definedummies{% % \let\commondummyword\definedummyword \let\commondummyletter\definedummyletter \let\commondummyaccent\definedummyaccent \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\atchar \definedummyword\arrow \definedummyword\backslashchar \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\mathopsup \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\sub \definedummyword\sup \definedummyword\textdegree % \definedummyword\subentry % % We want to disable all macros so that they are not expanded by \write. \macrolist \let\value\dummyvalue % \normalturnoffactive } % \commondummiesnofonts: common to \definedummies and \indexnofonts. % Define \commondummyletter, \commondummyaccent and \commondummyword before % using. Used for accents, font commands, and various control letters. % \def\commondummiesnofonts{% % Control letters and accents. \commondummyletter\!% \commondummyaccent\"% \commondummyaccent\'% \commondummyletter\*% \commondummyaccent\,% \commondummyletter\.% \commondummyletter\/% \commondummyletter\:% \commondummyaccent\=% \commondummyletter\?% \commondummyaccent\^% \commondummyaccent\`% \commondummyaccent\~% \commondummyword\u \commondummyword\v \commondummyword\H \commondummyword\dotaccent \commondummyword\ogonek \commondummyword\ringaccent \commondummyword\tieaccent \commondummyword\ubaraccent \commondummyword\udotaccent \commondummyword\dotless % % Texinfo font commands. \commondummyword\b \commondummyword\i \commondummyword\r \commondummyword\sansserif \commondummyword\sc \commondummyword\slanted \commondummyword\t % % Commands that take arguments. \commondummyword\abbr \commondummyword\acronym \commondummyword\anchor \commondummyword\cite \commondummyword\code \commondummyword\command \commondummyword\dfn \commondummyword\dmn \commondummyword\email \commondummyword\emph \commondummyword\env \commondummyword\file \commondummyword\image \commondummyword\indicateurl \commondummyword\inforef \commondummyword\kbd \commondummyword\key \commondummyword\math \commondummyword\option \commondummyword\pxref \commondummyword\ref \commondummyword\samp \commondummyword\strong \commondummyword\tie \commondummyword\U \commondummyword\uref \commondummyword\url \commondummyword\var \commondummyword\verb \commondummyword\w \commondummyword\xref } \let\indexlbrace\relax \let\indexrbrace\relax \let\indexatchar\relax \let\indexbackslash\relax {\catcode`\@=0 \catcode`\\=13 @gdef@backslashdisappear{@def\{}} } { \catcode`\<=13 \catcode`\-=13 \catcode`\`=13 \gdef\indexnonalnumdisappear{% \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else % @set txiindexlquoteignore makes us ignore left quotes in the sort term. % (Introduced for FSFS 2nd ed.) \let`=\empty \fi % \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else \backslashdisappear \fi % \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else \def-{}% \fi \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else \def<{}% \fi \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else \def\@{}% \fi } \gdef\indexnonalnumreappear{% \let-\normaldash \let<\normalless } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\commondummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\commondummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\commondummyword\commondummyaccent \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % \uccode`\1=`\{ \uppercase{\def\{{1}}% \uccode`\1=`\} \uppercase{\def\}{1}}% \let\lbracechar\{% \let\rbracechar\}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{TH}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{th}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. \defglyph gives the control sequence a % definition that removes the {} that follows its use. \defglyph\atchar{@}% \defglyph\arrow{->}% \defglyph\bullet{bullet}% \defglyph\comma{,}% \defglyph\copyright{copyright}% \defglyph\dots{...}% \defglyph\enddots{...}% \defglyph\equiv{==}% \defglyph\error{error}% \defglyph\euro{euro}% \defglyph\expansion{==>}% \defglyph\geq{>=}% \defglyph\guillemetleft{<<}% \defglyph\guillemetright{>>}% \defglyph\guilsinglleft{<}% \defglyph\guilsinglright{>}% \defglyph\leq{<=}% \defglyph\lbracechar{\{}% \defglyph\minus{-}% \defglyph\point{.}% \defglyph\pounds{pounds}% \defglyph\print{-|}% \defglyph\quotedblbase{"}% \defglyph\quotedblleft{"}% \defglyph\quotedblright{"}% \defglyph\quoteleft{`}% \defglyph\quoteright{'}% \defglyph\quotesinglbase{,}% \defglyph\rbracechar{\}}% \defglyph\registeredsymbol{R}% \defglyph\result{=>}% \defglyph\textdegree{o}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist \let\value\indexnofontsvalue } \def\defglyph#1#2{\def#1##1{#2}} % see above % #1 is the index name, #2 is the entry text. \def\doind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\doindwrite }% \fi } % Check if an index file has been opened, and if not, open it. \def\requireopenindexfile#1{% \ifnum\csname #1indfile\endcsname=0 \expandafter\newwrite \csname#1indfile\endcsname \edef\suffix{#1}% % A .fls suffix would conflict with the file extension for the output % of -recorder, so use .f1s instead. \ifx\suffix\indexisfl\def\suffix{f1}\fi % Open the file \immediate\openout\csname#1indfile\endcsname \jobname.\suffix % Using \immediate above here prevents an object entering into the current % box, which could confound checks such as those in \safewhatsit for % preceding skips. \typeout{Writing index file \jobname.\suffix}% \fi} \def\indexisfl{fl} % Definition for writing index entry sort key. { \catcode`\-=13 \gdef\indexwritesortas{% \begingroup \indexnonalnumreappear \indexwritesortasxxx} \gdef\indexwritesortasxxx#1{% \xdef\indexsortkey{#1}\endgroup} } \def\indexwriteseealso#1{ \gdef\pagenumbertext{\string\seealso{#1}}% } \def\indexwriteseeentry#1{ \gdef\pagenumbertext{\string\seeentry{#1}}% } % The default definitions \def\sortas#1{}% \def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only \def\putwordSeeAlso{See also} \def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only % Given index entry text like "aaa @subentry bbb @sortas{ZZZ}": % * Set \bracedtext to "{aaa}{bbb}" % * Set \fullindexsortkey to "aaa @subentry ZZZ" % * If @seealso occurs, set \pagenumbertext % \def\splitindexentry#1{% \gdef\fullindexsortkey{}% \xdef\bracedtext{}% \def\sep{}% \def\seealso##1{}% \def\seeentry##1{}% \expandafter\doindexsegment#1\subentry\finish\subentry } % append the results from the next segment \def\doindexsegment#1\subentry{% \def\segment{#1}% \ifx\segment\isfinish \else % % Fully expand the segment, throwing away any @sortas directives, and % trim spaces. \edef\trimmed{\segment}% \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% % \xdef\bracedtext{\bracedtext{\trimmed}}% % % Get the string to sort by. Process the segment with all % font commands turned off. \bgroup \let\sortas\indexwritesortas \let\seealso\indexwriteseealso \let\seeentry\indexwriteseeentry \indexnofonts % The braces around the commands are recognized by texindex. \def\lbracechar{{\string\indexlbrace}}% \def\rbracechar{{\string\indexrbrace}}% \let\{=\lbracechar \let\}=\rbracechar \def\@{{\string\indexatchar}}% \def\atchar##1{\@}% \def\backslashchar{{\string\indexbackslash}}% \uccode`\~=`\\ \uppercase{\let~\backslashchar}% % \let\indexsortkey\empty \global\let\pagenumbertext\empty % Execute the segment and throw away the typeset output. This executes % any @sortas or @seealso commands in this segment. \setbox\dummybox = \hbox{\segment}% \ifx\indexsortkey\empty{% \indexnonalnumdisappear \xdef\trimmed{\segment}% \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \xdef\indexsortkey{\trimmed}% \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi }\fi % % Append to \fullindexsortkey. \edef\tmp{\gdef\noexpand\fullindexsortkey{% \fullindexsortkey\sep\indexsortkey}}% \tmp \egroup \def\sep{\subentry}% % \expandafter\doindexsegment \fi } \def\isfinish{\finish}% \newbox\dummybox % used above \let\subentry\relax % Use \ instead of @ in index files. To support old texi2dvi and texindex. % This works without changing the escape character used in the toc or aux % files because the index entries are fully expanded here, and \string uses % the current value of \escapechar. \def\escapeisbackslash{\escapechar=`\\} % Use \ in index files by default. texi2dvi didn't support @ as the escape % character (as it checked for "\entry" in the files, and not "@entry"). When % the new version of texi2dvi has had a chance to become more prevalent, then % the escape character can change back to @ again. This should be an easy % change to make now because both @ and \ are only used as escape characters in % index files, never standing for themselves. % \set txiindexescapeisbackslash % Write the entry in \indextext to the index file. % \def\doindwrite{% \maybemarginindex % \atdummies % \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else \escapeisbackslash \fi % % For texindex which always views { and } as separators. \def\{{\lbracechar{}}% \def\}{\rbracechar{}}% \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}% % % Split the entry into primary entry and any subentries, and get the index % sort key. \splitindexentry\indextext % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. % \edef\temp{% \write\writeto{% \string\entry{\fullindexsortkey}% {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}% \bracedtext}% }% \temp } % Put the index entry in the margin if desired (undocumented). \def\maybemarginindex{% \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}% \fi } \let\SETmarginindex=\relax % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % \entry {topic}{} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % \secondary {subtopic}{} % for a subtopic with sub-subtopics % \tertiary {subtopic}{subsubtopic}{pagelist} % for each sub-subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi % % See if the index file exists and is nonempty. \openin 1 \jobname.\indexname s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \typeout{No file \jobname.\indexname s.}% \else % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \thisline \ifeof 1 \putwordIndexIsEmpty \else \expandafter\printindexzz\thisline\relax\relax\finish% \fi \fi \closein 1 \endgroup} % If the index file starts with a backslash, forgo reading the index % file altogether. If somebody upgrades texinfo.tex they may still have % old index files using \ as the escape character. Reading this would % at best lead to typesetting garbage, at worst a TeX syntax error. \def\printindexzz#1#2\finish{% \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1 \expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax \errmessage{% ERROR: A sorted index file in an obsolete format was skipped. To fix this problem, please upgrade your version of 'texi2dvi' or 'texi2pdf' to that at . If you are using an old version of 'texindex' (part of the Texinfo distribution), you may also need to upgrade to a newer version (at least 6.0). You may be able to typeset the index if you run 'texindex \jobname.\indexname' yourself. You could also try setting the 'txiindexescapeisbackslash' flag by running a command like 'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do this, Texinfo will try to use index files in the old format. If you continue to have problems, deleting the index files and starting again might help (with 'rm \jobname.?? \jobname.??s')% }% \else (Skipped sorted index file in obsolete format) \fi \else \begindoublecolumns \input \jobname.\indexname s \enddoublecolumns \fi \else \begindoublecolumns \catcode`\\=0\relax \catcode`\@=12\relax \input \jobname.\indexname s \enddoublecolumns \fi } % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. {\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 \catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 \catcode`\$=3 \gdef\initialglyphs{% % special control sequences used in the index sort key \let\indexlbrace\{% \let\indexrbrace\}% \let\indexatchar\@% \def\indexbackslash{\math{\backslash}}% % % Some changes for non-alphabetic characters. Using the glyphs from the % math fonts looks more consistent than the typewriter font used elsewhere % for these characters. \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}} % % In case @\ is used for backslash \uppercase{\let\\=~} % Can't get bold backslash so don't use bold forward slash \catcode`\/=13 \def/{{\secrmnotbold \normalslash}}% \def-{{\normaldash\normaldash}}% en dash `--' \def^{{\chapbf \normalcaret}}% \def~{{\chapbf \normaltilde}}% \def\_{% \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }% \def|{$\vert$}% \def<{$\less$}% \def>{$\gtr$}% \def+{$\normalplus$}% }} \def\initial{% \bgroup \initialglyphs \initialx } \def\initialx#1{% % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. % The glue before the bonus allows a little bit of space at the % bottom of a column to reduce an increase in inter-line spacing. \nobreak \vskip 0pt plus 5\baselineskip \penalty -300 \vskip 0pt plus -5\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus 1\baselineskip \leftline{\secfonts \kern-0.05em \secbf #1}% % \secfonts is inside the argument of \leftline so that the change of % \baselineskip will not affect any glue inserted before the vbox that % \leftline creates. % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip \egroup % \initialglyphs } \newdimen\entryrightmargin \entryrightmargin=0pt % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % No extra space above this paragraph. \parskip = 0in % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% An undocumented command % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% % Save the text of the entry \global\setbox\boxA=\hbox\bgroup \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. % Not absorbing as a macro argument reduces the chance of problems % with catcodes occurring. } {\catcode`\@=11 \gdef\finishentry#1{% \egroup % end box A \dimen@ = \wd\boxA % Length of text of entry \global\setbox\boxA=\hbox\bgroup \unhbox\boxA % #1 is the page number. % % Get the width of the page numbers, and only use % leaders if they are present. \global\setbox\boxB = \hbox{#1}% \ifdim\wd\boxB = 0pt \null\nobreak\hfill\ % \else % \null\nobreak\indexdotfill % Have leaders before the page number. % \ifpdforxetex \pdfgettoks#1.% \hskip\skip\thinshrinkable\the\toksA \else \hskip\skip\thinshrinkable #1% \fi \fi \egroup % end \boxA \ifdim\wd\boxB = 0pt \noindent\unhbox\boxA\par \nobreak \else\bgroup % We want the text of the entries to be aligned to the left, and the % page numbers to be aligned to the right. % \parindent = 0pt \advance\leftskip by 0pt plus 1fil \advance\leftskip by 0pt plus -1fill \rightskip = 0pt plus -1fil \advance\rightskip by 0pt plus 1fill % Cause last line, which could consist of page numbers on their own % if the list of page numbers is long, to be aligned to the right. \parfillskip=0pt plus -1fill % \advance\rightskip by \entryrightmargin % Determine how far we can stretch into the margin. % This allows, e.g., "Appendix H GNU Free Documentation License" to % fit on one line in @letterpaper format. \ifdim\entryrightmargin>2.1em \dimen@i=2.1em \else \dimen@i=0em \fi \advance \parfillskip by 0pt minus 1\dimen@i % \dimen@ii = \hsize \advance\dimen@ii by -1\leftskip \advance\dimen@ii by -1\entryrightmargin \advance\dimen@ii by 1\dimen@i \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line \ifdim\dimen@ > 0.8\dimen@ii % due to long index text % Try to split the text roughly evenly. \dimen@ will be the length of % the first line. \dimen@ = 0.7\dimen@ \dimen@ii = \hsize \ifnum\dimen@>\dimen@ii % If the entry is too long (for example, if it needs more than % two lines), use all the space in the first line. \dimen@ = \dimen@ii \fi \advance\leftskip by 0pt plus 1fill % ragged right \advance \dimen@ by 1\rightskip \parshape = 2 0pt \dimen@ 0em \dimen@ii % Ideally we'd add a finite glue at the end of the first line only, % instead of using \parshape with explicit line lengths, but TeX % doesn't seem to provide a way to do such a thing. % % Indent all lines but the first one. \advance\leftskip by 1em \advance\parindent by -1em \fi\fi \indent % start paragraph \unhbox\boxA % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % Word spacing - no stretch \spaceskip=\fontdimen2\font minus \fontdimen4\font % \linepenalty=1000 % Discourage line breaks. \hyphenpenalty=5000 % Discourage hyphenation. % \par % format the paragraph \egroup % The \vbox \fi \endgroup }} \newskip\thinshrinkable \skip\thinshrinkable=.15em minus .15em % Like plain.tex's \dotfill, except uses up at least 1 em. % The filll stretch here overpowers both the fil and fill stretch to push % the page number to the right. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll} \def\primary #1{\line{#1\hfil}} \def\secondary{\indententry{0.5cm}} \def\tertiary{\indententry{1cm}} \def\indententry#1#2#3{% \bgroup \leftskip=#1 \entry{#2}{#3}% \egroup } % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 % private names \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % If not much space left on page, start a new page. \ifdim\pagetotal>0.8\vsize\vfill\eject\fi % % Grab any single-column material above us. \output = {% \savetopmark % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \advance\vsize by -\ht\partialpage \vsize = 2\vsize % % For the benefit of balancing columns \advance\baselineskip by 0pt plus 0.5pt } % The double-column output routine for all double-column pages except % the last, which is done by \balancecolumns. % \def\doublecolumnout{% % \savetopmark \splittopskip=\topskip \splitmaxdepth=\maxdepth \dimen@ = \vsize \divide\dimen@ by 2 % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@ \global\advance\vsize by 2\ht\partialpage \onepageout\pagesofar % empty except for the first time we are called \unvbox\PAGE \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\txipagewidth{\box0\hfil\box2}% } % Finished with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \txipageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. \savetopmark \balancecolumns }% \eject % call the \output just set \ifdim\pagetotal=0pt % Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. \global\output=\expandafter{\the\defaultoutput} % \endgroup % started in \begindoublecolumns % Leave the double-column material on the current page, no automatic % page break. \box\balancedcolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize. \global\vsize = \txipageheight % \pagegoal = \txipageheight % \else % We had some left-over material. This might happen when \doublecolumnout % is called in \balancecolumns. Try again. \expandafter\enddoublecolumns \fi } \newbox\balancedcolumns \setbox\balancedcolumns=\vbox{shouldnt see this}% % % Only called for the last of the double column material. \doublecolumnout % does the others. \def\balancecolumns{% \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \ifdim\dimen@<7\baselineskip % Don't split a short final column in two. \setbox2=\vbox{}% \global\setbox\balancedcolumns=\vbox{\pagesofar}% \else % double the leading vertical space \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to \dimen@ii = \dimen@ \splittopskip = \topskip % Loop until left column is at least as high as the right column. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht1<\ht3 \global\advance\dimen@ by 1pt \repeat }% % Now the left column is in box 1, and the right column in box 3. % % Check whether the left column has come out higher than the page itself. % (Note that we have doubled \vsize for the double columns, so % the actual height of the page is 0.5\vsize). \ifdim2\ht1>\vsize % It appears that we have been called upon to balance too much material. % Output some of it with \doublecolumnout, leaving the rest on the page. \setbox\PAGE=\box0 \doublecolumnout \else % Compare the heights of the two columns. \ifdim4\ht1>5\ht3 % Column heights are too different, so don't make their bottoms % flush with each other. \setbox2=\vbox to \ht1 {\unvbox3\vfill}% \setbox0=\vbox to \ht1 {\unvbox1\vfill}% \else % Make column bottoms flush with each other. \setbox2=\vbox to\ht1{\unvbox3\unskip}% \setbox0=\vbox to\ht1{\unvbox1\unskip}% \fi \global\setbox\balancedcolumns=\vbox{\pagesofar}% \fi \fi % } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rm #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page % This outputs a mark at the end of the page that clears \thischapter % and \thissection, as is done in \startcontents. \let\pchapsepmacro\relax \chapmacro{}{Yomitfromtoc}{}% \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} % Start a new page \def\chappager{\par\vfill\supereject} % \chapoddpage - start on an odd page for a new chapter % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % \chapmacro - Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % Not used for @heading series. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yappendixkeyword{Yappendix} \def\Yomitfromtockeyword{Yomitfromtoc} % \def\chapmacro#1#2#3{% \expandafter\ifx\thisenv\titlepage\else \checkenv{}% chapters, etc., should not start inside an environment. \fi % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \domark % {% \chapfonts \rm \let\footnote=\errfootnoteheading % give better error message % % Have to define \currentsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\currentsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text of the title, % #2 is the section level (sec/subsec/subsubsec), % #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc), % #4 is the section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \def\sectionlevel{#2}% \def\temptype{#3}% % % It is ok for the @heading series commands to appear inside an % environment (it's been historically allowed, though the logic is % dubious), but not the others. \ifx\temptype\Yomitfromtockeyword\else \checkenv{}% non-@*heading should not be in an environment. \fi \let\footnote=\errfootnoteheading % % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\currentsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \global\let\prevsectiondefs=\currentsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\currentsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \currentsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\currentsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\currentsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdforxetex \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \entryrightmargin=\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{% % Add stretch and a bonus for breaking the page before the part heading. % This reduces the chance of the page being broken immediately after the % part heading, before a following chapter heading. \vskip 0pt plus 5\baselineskip \penalty-300 \vskip 0pt plus -5\baselineskip \dochapentry{\numeralbox\labelspace#1}{}% } % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup % Move the page numbers slightly to the right \advance\entryrightmargin by -0.05em \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode `\`=\other \catcode `\'=\other % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % % Inverse of the list at the beginning of the file. \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\sp=\ptexsp \let\*=\ptexstar %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % we've made it outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip \ifnum\lastpenalty<10000 % Penalize breaking before the environment, because preceding text % often leads into it. \penalty100 \fi \vskip\envskipamount \fi \fi }} \def\afterenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip % only require the font if @cartouche is actually used \def\cartouchefontdefs{% \font\circle=lcircle10\relax \circthick=\fontdimen8\circle } \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \envdef\cartouche{% \cartouchefontdefs \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \setbox\groupbox=\vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \addgroupbox \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabbox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim {% \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \edef\tmp{\noexpand\input #1 } \expandafter }\tmp \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) } % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % \dosubind {index}{topic}{subtopic} % % If SUBTOPIC is present, precede it with a space, and call \doind. % (At some time during the 20th century, this made a two-level entry in an % index such as the operation index. Nobody seemed to notice the change in % behaviour though.) \def\dosubind#1#2#3{% \def\thirdarg{#3}% \ifx\thirdarg\empty \doind{#1}{#2}% \else \doind{#1}{#2\space#3}% \fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \rmfont % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \let\ampchar\& \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M \def\xeatspaces{\eatspaces}% % % Process the macro body under the current catcode regime. \scantokens{#1@comment}% % % The \comment is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. Note \c isn't used because this means cedilla % in math mode. } % Used for copying and captions \def\scanexp#1{% \expandafter\scanmacro\expandafter{#1}% } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \commondummyword\macro1\commondummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\commondummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \passthroughcharstrue } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\@=\other \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\ =\other \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } % Used when scanning braced macro arguments. Note, however, that catcode % changes here are ineffectual if the macro invocation was nested inside % an argument to another Texinfo command. \def\macroargctxt{% \scanctxt \catcode`\ =\active \catcode`\@=\other \catcode`\^^M=\other \catcode`\\=\active } \def\macrolineargctxt{% used for whole-line arguments without braces \scanctxt \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\commondummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\commondummyword \noexpand#1% \fi } % \getargs -- Parse the arguments to a @macro line. Set \macname to % the name of the macro, and \argl to the braced argument list. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % This made use of the feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. % Parse the optional {params} list to @macro or @rmacro. % Set \paramno to the number of arguments, % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a % three-param macro.) Define \macarg.BLAH for each BLAH in the params % list to some hook where the argument is to be expanded. If there are % less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % If there are 10 or more arguments, a different technique is used: see % \parsemmanyargdef. % \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax % \hash is redefined to `#' later to get it into definitions \let\xeatspaces\relax \parsemargdefxxx#1,;,% \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % \parsemacbody, \parsermacbody % % Read recursive and nonrecursive macro bodies. (They're different since % rec and nonrec macros end differently.) % % We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro % body to be transformed. % Set \macrobody to the body of the macro, and call \defmacro. % {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% % Make @ a letter, so that we can make private-to-Texinfo macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime under which the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, no macro can have more than 256 arguments (else error). % % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments' values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa. % \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } % Define the named-macro outside of this group and then close this group. % \def\macargexpandinbody@{% \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Trailing missing arguments are set to empty. % \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } %%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%% % This defines a Texinfo @macro or @rmacro, called by \parsemacbody. % \macrobody has the body of the macro in it, with placeholders for % its parameters, looking like "\xeatspaces{\hash 1}". % \paramno is the number of parameters % \paramlist is a TeX parameter text, e.g. "#1,#2,#3," % There are four cases: macros of zero, one, up to nine, and many arguments. % \xdef is used so that macro definitions will survive the file % they're defined in: @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifnum\paramno=1 \def\xeatspaces##1{##1}% % This removes the pair of braces around the argument. We don't % use \eatspaces, because this can cause ends of lines to be lost % when the argument to \eatspaces is read, leading to line-based % commands like "@itemize" not being read correctly. \else \let\xeatspaces\relax % suppress expansion \fi \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\spaceisspace \noexpand\endlineisspace \noexpand\expandafter % skip any whitespace after the macro name. \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname{% \egroup \noexpand\scanmacro{\macrobody}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \egroup \noexpand\scanmacro{\macrobody}% }% \else % at most 9 \ifnum\paramno<10\relax % @MACNAME sets the context for reading the macro argument % @MACNAME@@ gets the argument, processes backslashes and appends a % comma. % @MACNAME@@@ removes braces surrounding the argument list. % @MACNAME@@@@ scans the macro body with arguments substituted. \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\expandafter % This \expandafter skip any spaces after the \noexpand\macroargctxt % macro before we change the catcode of space. \noexpand\expandafter \expandafter\noexpand\csname\the\macname @@\endcsname}% \expandafter\xdef\csname\the\macname @@\endcsname##1{% \noexpand\passargtomacro \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname @@@@\endcsname\paramlist{% \egroup\noexpand\scanmacro{\macrobody}}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi} \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % {\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape @catcode`@_=11 % private names @catcode`@!=11 % used as argument separator % \passargtomacro#1#2 - % Call #1 with a list of tokens #2, with any doubled backslashes in #2 % compressed to one. % % This implementation works by expansion, and not execution (so we cannot use % \def or similar). This reduces the risk of this failing in contexts where % complete expansion is done with no execution (for example, in writing out to % an auxiliary file for an index entry). % % State is kept in the input stream: the argument passed to % @look_ahead, @gobble_and_check_finish and @add_segment is % % THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input) % % where: % THE_MACRO - name of the macro we want to call % ARG_RESULT - argument list we build to pass to that macro % PENDING_BS - either a backslash or nothing % NEXT_TOKEN - used to look ahead in the input stream to see what's coming next @gdef@passargtomacro#1#2{% @add_segment #1!{}@relax#2\@_finish\% } @gdef@_finish{@_finishx} @global@let@_finishx@relax % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 used to look ahead % % If the next token is not a backslash, process the rest of the argument; % otherwise, remove the next token. @gdef@look_ahead#1!#2#3#4{% @ifx#4\% @expandafter@gobble_and_check_finish @else @expandafter@add_segment @fi#1!{#2}#4#4% } % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 should be a backslash, which is gobbled. % #5 looks ahead % % Double backslash found. Add a single backslash, and look ahead. @gdef@gobble_and_check_finish#1!#2#3#4#5{% @add_segment#1\!{}#5#5% } @gdef@is_fi{@fi} % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 is input stream until next backslash % % Input stream is either at the start of the argument, or just after a % backslash sequence, either a lone backslash, or a doubled backslash. % NEXT_TOKEN contains the first token in the input stream: if it is \finish, % finish; otherwise, append to ARG_RESULT the segment of the argument up until % the next backslash. PENDING_BACKSLASH contains a backslash to represent % a backslash just before the start of the input stream that has not been % added to ARG_RESULT. @gdef@add_segment#1!#2#3#4\{% @ifx#3@_finish @call_the_macro#1!% @else % append the pending backslash to the result, followed by the next segment @expandafter@is_fi@look_ahead#1#2#4!{\}@fi % this @fi is discarded by @look_ahead. % we can't get rid of it with \expandafter because we don't know how % long #4 is. } % #1 - THE_MACRO % #2 - ARG_RESULT % #3 discards the res of the conditional in @add_segment, and @is_fi ends the % conditional. @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \braceorline MAC is used for a one-argument macro MAC. It checks % whether the next non-whitespace character is a {. It sets the context % for reading the argument (slightly different in the two cases). Then, % to read the argument, in the whole-line case, it then calls the regular % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC. % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup \macroargctxt \expandafter\passargtomacro \else \macrolineargctxt\expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode} % Used so that the @top node doesn't have to be wrapped in an @ifnottex % conditional. % \doignore goes to more effort to skip nested conditionals but we don't need % that here. \def\omittopnode{% \ifx\lastnode\wordTop \expandafter\ignorenode\fi } \def\wordTop{Top} % Until the next @node or @bye command, divert output to a box that is not % output. \def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}% \ignorenodebye } {\let\bye\relax \gdef\ignorenodebye{\let\bye\ignorenodebyedef} \gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}} % The redefinition of \bye here is because it is declared \outer \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \currentsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \requireauxfile \atdummies % preserve commands, but don't expand them % match definition in \xrdef, \refx, \xrefX. \def\value##1{##1}% \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\currentsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref{\putwordsee{} \xrefXX} \def\xref{\putwordSee{} \xrefXX} \def\ref{\xrefXX} \def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX} \def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf % For pdfTeX and LuaTeX {\indexnofonts \makevalueexpandable \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfdestname}% \else goto name{\pdfmkpgn{\pdfdestname}}% \fi }% \setcolor{\linkcolor}% \else \ifx\XeTeXrevision\thisisundefined \else % For XeTeX {\indexnofonts \makevalueexpandable \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \ifnum\filenamelength>0 % With default settings, % XeTeX (xdvipdfmx) replaces link destination names with integers. % In this case, the replaced destination names of % remote PDFs are no longer known. In order to avoid a replacement, % you can use xdvipdfmx's command line option `-C 0x0010'. % If you use XeTeX 0.99996+ (TeX Live 2016+), % this command line option is no longer necessary % because we can use the `dvipdfmx:config' special. \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}% \else \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (\pdfdestname) >> >>}% \fi }% \setcolor{\linkcolor}% \fi \fi {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". \iffloat distinguishes them by % \Xthisreftitle being set to a magic string. \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% % Add a , if xref followed by a space \if\space\noexpand\tokenafterxref ,% \else\ifx\ \tokenafterxref ,% @TAB \else\ifx\*\tokenafterxref ,% @* \else\ifx\ \tokenafterxref ,% @SPACE \else\ifx\ \tokenafterxref ,% @NL \else\ifx\tie\tokenafterxref ,% @tie \fi\fi\fi\fi\fi\fi \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME. SUFFIX % is output afterwards if non-empty. \def\refx#1#2{% \requireauxfile {% \indexnofonts \otherbackslash \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Define a control % sequence for a cross-reference target (we prepend XR to the control sequence % name to avoid collisions). The value is the page number. If this is a float % type, we have more work to do. % \def\xrdef#1#2{% {% Expand the node or anchor name to remove control sequences. % \turnoffactive stops 8-bit characters being changed to commands % like @'e. \refx does the same to retrieve the value in the definition. \indexnofonts \turnoffactive \def\value##1{##1}% \xdef\safexrefname{#1}% }% % \bgroup \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% \egroup % We put the \gdef inside a group to avoid the definitions building up on % TeX's save stack, which can cause it to run out of space for aux files with % thousands of lines. \gdef doesn't use the save stack, but \csname does % when it defines an unknown control sequence as \relax. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate at the beginning of the file. % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % Used when writing to the aux file, or when using data from it. \def\requireauxfile{% \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi \global\let\requireauxfile=\relax % Only do this once. } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % \catcode`\\=\active % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % % Nested footnotes are not supported in TeX, that would take a lot % more work. (\startsavinginserts does not suffice.) \let\footnote=\errfootnotenest % % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\txipagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 \def\errfootnotenest{% \errhelp=\EMsimple \errmessage{Nested footnotes not supported in texinfo.tex, even though they work in makeinfo; sorry} } \def\errfootnoteheading{% \errhelp=\EMsimple \errmessage{Footnotes in chapters, sections, etc., are not supported} } % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf % For pdfTeX and LuaTeX <= 0.80 \dopdfimage{#1}{#2}{#3}% \else \ifx\XeTeXrevision\thisisundefined % For epsf.tex % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \else % For XeTeX \doxeteximage{#1}{#2}{#3}% \fi \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \currentsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\currentsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \requireauxfile \atdummies % \ifx\thisshortcaption\empty \def\gtemp{\thiscaption}% \else \def\gtemp{\thisshortcaption}% \fi \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \currentsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \let_ = \normalunderscore % normal _ character for filename test \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore #1_\finish \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX } % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % XeTeX and LuaTeX can handle Unicode natively. % Their default I/O uses UTF-8 sequences instead of a byte-wise operation. % Other TeX engines' I/O (pdfTeX, etc.) is byte-wise. % \newif\iftxinativeunicodecapable \newif\iftxiusebytewiseio \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \txinativeunicodecapablefalse \txiusebytewiseiotrue \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi % Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex % for non-UTF-8 (byte-wise) encodings. % \def\setbytewiseio{% \ifx\XeTeXrevision\thisisundefined \else \XeTeXdefaultencoding "bytes" % For subsequent files to be read \XeTeXinputencoding "bytes" % For document root file % Unfortunately, there seems to be no corresponding XeTeX command for % output encoding. This is a problem for auxiliary index and TOC files. % The only solution would be perhaps to write out @U{...} sequences in % place of non-ASCII characters. \fi \ifx\luatexversion\thisisundefined \else \directlua{ local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub local function convert_char (char) return utf8_char(byte(char)) end local function convert_line (line) return gsub(line, ".", convert_char) end callback.register("process_input_buffer", convert_line) local function convert_line_out (line) local line_out = "" for c in string.utfvalues(line) do line_out = line_out .. string.char(c) end return line_out end callback.register("process_output_buffer", convert_line_out) } \fi \txiusebytewiseiotrue } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} \def\documentencodingzzz#1{% % % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \iftxinativeunicodecapable % For native Unicode handling (XeTeX and LuaTeX) \nativeunicodechardefs \else % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX) \setnonasciicharscatcode\active % since we already invoked \utfeightchardefs at the top level % (below), do not re-invoke it, otherwise our check for duplicated % definitions gets triggered. Making non-ascii chars active is % sufficient. \fi % \else \message{Ignoring unknown document encoding: #1.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii % \ifx\XeTeXrevision\thisisundefined \else \ifx \declaredencoding \utfeight \else \ifx \declaredencoding \ascii \else \message{Warning: XeTeX with non-UTF-8 encodings cannot handle % non-ASCII characters in auxiliary files.}% \fi \fi \fi } % emacs-page % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing, sorry: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % \def\gdefchar#1#2{% \gdef#1{% \ifpassthroughchars \string#1% \else #2% \fi }} % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\exclamdown} \gdefchar^^a2{{\tcfont \char162}} % cent \gdefchar^^a3{\pounds{}} \gdefchar^^a4{{\tcfont \char164}} % currency \gdefchar^^a5{{\tcfont \char165}} % yen \gdefchar^^a6{{\tcfont \char166}} % broken bar \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\copyright{}} \gdefchar^^aa{\ordf} \gdefchar^^ab{\guillemetleft{}} \gdefchar^^ac{\ensuremath\lnot} \gdefchar^^ad{\-} \gdefchar^^ae{\registeredsymbol{}} \gdefchar^^af{\={}} % \gdefchar^^b0{\textdegree} \gdefchar^^b1{$\pm$} \gdefchar^^b2{$^2$} \gdefchar^^b3{$^3$} \gdefchar^^b4{\'{}} \gdefchar^^b5{$\mu$} \gdefchar^^b6{\P} \gdefchar^^b7{\ensuremath\cdot} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{$^1$} \gdefchar^^ba{\ordm} \gdefchar^^bb{\guillemetright{}} \gdefchar^^bc{$1\over4$} \gdefchar^^bd{$1\over2$} \gdefchar^^be{$3\over4$} \gdefchar^^bf{\questiondown} % \gdefchar^^c0{\`A} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\~A} \gdefchar^^c4{\"A} \gdefchar^^c5{\ringaccent A} \gdefchar^^c6{\AE} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\`E} \gdefchar^^c9{\'E} \gdefchar^^ca{\^E} \gdefchar^^cb{\"E} \gdefchar^^cc{\`I} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\"I} % \gdefchar^^d0{\DH} \gdefchar^^d1{\~N} \gdefchar^^d2{\`O} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\~O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\O} \gdefchar^^d9{\`U} \gdefchar^^da{\'U} \gdefchar^^db{\^U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\TH} \gdefchar^^df{\ss} % \gdefchar^^e0{\`a} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\~a} \gdefchar^^e4{\"a} \gdefchar^^e5{\ringaccent a} \gdefchar^^e6{\ae} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\`e} \gdefchar^^e9{\'e} \gdefchar^^ea{\^e} \gdefchar^^eb{\"e} \gdefchar^^ec{\`{\dotless i}} \gdefchar^^ed{\'{\dotless i}} \gdefchar^^ee{\^{\dotless i}} \gdefchar^^ef{\"{\dotless i}} % \gdefchar^^f0{\dh} \gdefchar^^f1{\~n} \gdefchar^^f2{\`o} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\~o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\o} \gdefchar^^f9{\`u} \gdefchar^^fa{\'u} \gdefchar^^fb{\^u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\th} \gdefchar^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdefchar^^a4{\euro{}} \gdefchar^^a6{\v S} \gdefchar^^a8{\v s} \gdefchar^^b4{\v Z} \gdefchar^^b8{\v z} \gdefchar^^bc{\OE} \gdefchar^^bd{\oe} \gdefchar^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\ogonek{A}} \gdefchar^^a2{\u{}} \gdefchar^^a3{\L} \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}} \gdefchar^^a5{\v L} \gdefchar^^a6{\'S} \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\v S} \gdefchar^^aa{\cedilla S} \gdefchar^^ab{\v T} \gdefchar^^ac{\'Z} \gdefchar^^ad{\-} \gdefchar^^ae{\v Z} \gdefchar^^af{\dotaccent Z} % \gdefchar^^b0{\textdegree{}} \gdefchar^^b1{\ogonek{a}} \gdefchar^^b2{\ogonek{ }} \gdefchar^^b3{\l} \gdefchar^^b4{\'{}} \gdefchar^^b5{\v l} \gdefchar^^b6{\'s} \gdefchar^^b7{\v{}} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{\v s} \gdefchar^^ba{\cedilla s} \gdefchar^^bb{\v t} \gdefchar^^bc{\'z} \gdefchar^^bd{\H{}} \gdefchar^^be{\v z} \gdefchar^^bf{\dotaccent z} % \gdefchar^^c0{\'R} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\u A} \gdefchar^^c4{\"A} \gdefchar^^c5{\'L} \gdefchar^^c6{\'C} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\v C} \gdefchar^^c9{\'E} \gdefchar^^ca{\ogonek{E}} \gdefchar^^cb{\"E} \gdefchar^^cc{\v E} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\v D} % \gdefchar^^d0{\DH} \gdefchar^^d1{\'N} \gdefchar^^d2{\v N} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\H O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\v R} \gdefchar^^d9{\ringaccent U} \gdefchar^^da{\'U} \gdefchar^^db{\H U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\cedilla T} \gdefchar^^df{\ss} % \gdefchar^^e0{\'r} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\u a} \gdefchar^^e4{\"a} \gdefchar^^e5{\'l} \gdefchar^^e6{\'c} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\v c} \gdefchar^^e9{\'e} \gdefchar^^ea{\ogonek{e}} \gdefchar^^eb{\"e} \gdefchar^^ec{\v e} \gdefchar^^ed{\'{\dotless{i}}} \gdefchar^^ee{\^{\dotless{i}}} \gdefchar^^ef{\v d} % \gdefchar^^f0{\dh} \gdefchar^^f1{\'n} \gdefchar^^f2{\v n} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\H o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\v r} \gdefchar^^f9{\ringaccent u} \gdefchar^^fa{\'u} \gdefchar^^fb{\H u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\cedilla t} \gdefchar^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } % Give non-ASCII bytes the active definitions for processing UTF-8 sequences \begingroup \catcode`\~13 \catcode`\$12 \catcode`\"12 % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp % substituting ~ and $ with a character token of that value. \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uccode`\$\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} % For bytes other than the first in a UTF-8 sequence. Not expected to % be expanded except when writing to auxiliary files. \countUTFx = "80 \countUTFy = "C2 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $\fi}}% \UTFviiiLoop \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiFourOctets\expandafter$\fi }}% \UTFviiiLoop \endgroup \def\globallet{\global\let} % save some \expandafter's below % @U{xxxx} to produce U+xxxx, if we support it. \def\U#1{% \expandafter\ifx\csname uni:#1\endcsname \relax \iftxinativeunicodecapable % All Unicode characters can be used if native Unicode handling is % active. However, if the font does not have the glyph, % letters are missing. \begingroup \uccode`\.="#1\relax \uppercase{.} \endgroup \else \errhelp = \EMsimple \errmessage{Unicode character U+#1 not supported, sorry}% \fi \else \csname uni:#1\endcsname \fi } % These macros are used here to construct the name of a control % sequence to be defined. \def\UTFviiiTwoOctetsName#1#2{% \csname u8:#1\string #2\endcsname}% \def\UTFviiiThreeOctetsName#1#2#3{% \csname u8:#1\string #2\string #3\endcsname}% \def\UTFviiiFourOctetsName#1#2#3#4{% \csname u8:#1\string #2\string #3\string #4\endcsname}% % For UTF-8 byte sequences (TeX, e-TeX and pdfTeX), % provide a definition macro to replace a Unicode character; % this gets used by the @U command % \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacterUTFviii#1#2{% \countUTFz = "#1\relax \begingroup \parseXMLCharref % Give \u8:... its definition. The sequence of seven \expandafter's % expands after the \gdef three times, e.g. % % 1. \UTFviiTwoOctetsName B1 B2 % 2. \csname u8:B1 \string B2 \endcsname % 3. \u8: B1 B2 (a single control sequence token) % \expandafter\expandafter \expandafter\expandafter \expandafter\expandafter \expandafter\gdef \UTFviiiTmp{#2}% % \expandafter\ifx\csname uni:#1\endcsname \relax \else \message{Internal error, already defined: #1}% \fi % % define an additional control sequence for this code point. \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp \endgroup} % % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp % to the corresponding UTF-8 sequence. \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctetsName.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}% \fi\fi\fi } % Extract a byte from the end of the UTF-8 representation of \countUTFx. % It must be a non-initial byte in the sequence. % Change \uccode of #1 for it to be used in \parseUTFviiiB as one % of the bytes. \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz % Save to be the future value of \countUTFz. \multiply\countUTFz by 64 % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract % in order to get the last five bits. \advance\countUTFx by -\countUTFz % Convert this to the byte in the UTF-8 sequence. \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} % Used to put a UTF-8 byte sequence into \UTFviiiTmp % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8 % sequence. % #2 is one of the \UTFviii*OctetsName macros. % #3 is always a full stop (.) % #4 is a template for the other bytes in the sequence. The values for these % bytes is substituted in here with \uppercase using the \uccode's. \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro that sets a catcode to `other' non-globally % \def\DeclareUnicodeCharacterNativeOther#1#2{% \catcode"#1=\other } % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M % U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B % % Many of our renditions are less than wonderful, and all the missing % characters are available somewhere. Loading the necessary fonts % awaits user request. We can't truly support Unicode without % reimplementing everything that's been done in LaTeX for many years, % plus probably using luatex or xetex, and who knows what else. % We won't be doing that here in this simple file. But we can try to at % least make most of the characters not bomb out. % \def\unicodechardefs{% \DeclareUnicodeCharacter{00A0}{\tie}% \DeclareUnicodeCharacter{00A1}{\exclamdown}% \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent \DeclareUnicodeCharacter{00A3}{\pounds{}}% \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar \DeclareUnicodeCharacter{00A7}{\S}% \DeclareUnicodeCharacter{00A8}{\"{ }}% \DeclareUnicodeCharacter{00A9}{\copyright{}}% \DeclareUnicodeCharacter{00AA}{\ordf}% \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}% \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}% \DeclareUnicodeCharacter{00AD}{\-}% \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}% \DeclareUnicodeCharacter{00AF}{\={ }}% % \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}% \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}% \DeclareUnicodeCharacter{00B2}{$^2$}% \DeclareUnicodeCharacter{00B3}{$^3$}% \DeclareUnicodeCharacter{00B4}{\'{ }}% \DeclareUnicodeCharacter{00B5}{$\mu$}% \DeclareUnicodeCharacter{00B6}{\P}% \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}% \DeclareUnicodeCharacter{00B8}{\cedilla{ }}% \DeclareUnicodeCharacter{00B9}{$^1$}% \DeclareUnicodeCharacter{00BA}{\ordm}% \DeclareUnicodeCharacter{00BB}{\guillemetright{}}% \DeclareUnicodeCharacter{00BC}{$1\over4$}% \DeclareUnicodeCharacter{00BD}{$1\over2$}% \DeclareUnicodeCharacter{00BE}{$3\over4$}% \DeclareUnicodeCharacter{00BF}{\questiondown}% % \DeclareUnicodeCharacter{00C0}{\`A}% \DeclareUnicodeCharacter{00C1}{\'A}% \DeclareUnicodeCharacter{00C2}{\^A}% \DeclareUnicodeCharacter{00C3}{\~A}% \DeclareUnicodeCharacter{00C4}{\"A}% \DeclareUnicodeCharacter{00C5}{\AA}% \DeclareUnicodeCharacter{00C6}{\AE}% \DeclareUnicodeCharacter{00C7}{\cedilla{C}}% \DeclareUnicodeCharacter{00C8}{\`E}% \DeclareUnicodeCharacter{00C9}{\'E}% \DeclareUnicodeCharacter{00CA}{\^E}% \DeclareUnicodeCharacter{00CB}{\"E}% \DeclareUnicodeCharacter{00CC}{\`I}% \DeclareUnicodeCharacter{00CD}{\'I}% \DeclareUnicodeCharacter{00CE}{\^I}% \DeclareUnicodeCharacter{00CF}{\"I}% % \DeclareUnicodeCharacter{00D0}{\DH}% \DeclareUnicodeCharacter{00D1}{\~N}% \DeclareUnicodeCharacter{00D2}{\`O}% \DeclareUnicodeCharacter{00D3}{\'O}% \DeclareUnicodeCharacter{00D4}{\^O}% \DeclareUnicodeCharacter{00D5}{\~O}% \DeclareUnicodeCharacter{00D6}{\"O}% \DeclareUnicodeCharacter{00D7}{\ensuremath\times}% \DeclareUnicodeCharacter{00D8}{\O}% \DeclareUnicodeCharacter{00D9}{\`U}% \DeclareUnicodeCharacter{00DA}{\'U}% \DeclareUnicodeCharacter{00DB}{\^U}% \DeclareUnicodeCharacter{00DC}{\"U}% \DeclareUnicodeCharacter{00DD}{\'Y}% \DeclareUnicodeCharacter{00DE}{\TH}% \DeclareUnicodeCharacter{00DF}{\ss}% % \DeclareUnicodeCharacter{00E0}{\`a}% \DeclareUnicodeCharacter{00E1}{\'a}% \DeclareUnicodeCharacter{00E2}{\^a}% \DeclareUnicodeCharacter{00E3}{\~a}% \DeclareUnicodeCharacter{00E4}{\"a}% \DeclareUnicodeCharacter{00E5}{\aa}% \DeclareUnicodeCharacter{00E6}{\ae}% \DeclareUnicodeCharacter{00E7}{\cedilla{c}}% \DeclareUnicodeCharacter{00E8}{\`e}% \DeclareUnicodeCharacter{00E9}{\'e}% \DeclareUnicodeCharacter{00EA}{\^e}% \DeclareUnicodeCharacter{00EB}{\"e}% \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}% \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}% \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}% \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}% % \DeclareUnicodeCharacter{00F0}{\dh}% \DeclareUnicodeCharacter{00F1}{\~n}% \DeclareUnicodeCharacter{00F2}{\`o}% \DeclareUnicodeCharacter{00F3}{\'o}% \DeclareUnicodeCharacter{00F4}{\^o}% \DeclareUnicodeCharacter{00F5}{\~o}% \DeclareUnicodeCharacter{00F6}{\"o}% \DeclareUnicodeCharacter{00F7}{\ensuremath\div}% \DeclareUnicodeCharacter{00F8}{\o}% \DeclareUnicodeCharacter{00F9}{\`u}% \DeclareUnicodeCharacter{00FA}{\'u}% \DeclareUnicodeCharacter{00FB}{\^u}% \DeclareUnicodeCharacter{00FC}{\"u}% \DeclareUnicodeCharacter{00FD}{\'y}% \DeclareUnicodeCharacter{00FE}{\th}% \DeclareUnicodeCharacter{00FF}{\"y}% % \DeclareUnicodeCharacter{0100}{\=A}% \DeclareUnicodeCharacter{0101}{\=a}% \DeclareUnicodeCharacter{0102}{\u{A}}% \DeclareUnicodeCharacter{0103}{\u{a}}% \DeclareUnicodeCharacter{0104}{\ogonek{A}}% \DeclareUnicodeCharacter{0105}{\ogonek{a}}% \DeclareUnicodeCharacter{0106}{\'C}% \DeclareUnicodeCharacter{0107}{\'c}% \DeclareUnicodeCharacter{0108}{\^C}% \DeclareUnicodeCharacter{0109}{\^c}% \DeclareUnicodeCharacter{010A}{\dotaccent{C}}% \DeclareUnicodeCharacter{010B}{\dotaccent{c}}% \DeclareUnicodeCharacter{010C}{\v{C}}% \DeclareUnicodeCharacter{010D}{\v{c}}% \DeclareUnicodeCharacter{010E}{\v{D}}% \DeclareUnicodeCharacter{010F}{d'}% % \DeclareUnicodeCharacter{0110}{\DH}% \DeclareUnicodeCharacter{0111}{\dh}% \DeclareUnicodeCharacter{0112}{\=E}% \DeclareUnicodeCharacter{0113}{\=e}% \DeclareUnicodeCharacter{0114}{\u{E}}% \DeclareUnicodeCharacter{0115}{\u{e}}% \DeclareUnicodeCharacter{0116}{\dotaccent{E}}% \DeclareUnicodeCharacter{0117}{\dotaccent{e}}% \DeclareUnicodeCharacter{0118}{\ogonek{E}}% \DeclareUnicodeCharacter{0119}{\ogonek{e}}% \DeclareUnicodeCharacter{011A}{\v{E}}% \DeclareUnicodeCharacter{011B}{\v{e}}% \DeclareUnicodeCharacter{011C}{\^G}% \DeclareUnicodeCharacter{011D}{\^g}% \DeclareUnicodeCharacter{011E}{\u{G}}% \DeclareUnicodeCharacter{011F}{\u{g}}% % \DeclareUnicodeCharacter{0120}{\dotaccent{G}}% \DeclareUnicodeCharacter{0121}{\dotaccent{g}}% \DeclareUnicodeCharacter{0122}{\cedilla{G}}% \DeclareUnicodeCharacter{0123}{\cedilla{g}}% \DeclareUnicodeCharacter{0124}{\^H}% \DeclareUnicodeCharacter{0125}{\^h}% \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0128}{\~I}% \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}% \DeclareUnicodeCharacter{012A}{\=I}% \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}% \DeclareUnicodeCharacter{012C}{\u{I}}% \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}% \DeclareUnicodeCharacter{012E}{\ogonek{I}}% \DeclareUnicodeCharacter{012F}{\ogonek{i}}% % \DeclareUnicodeCharacter{0130}{\dotaccent{I}}% \DeclareUnicodeCharacter{0131}{\dotless{i}}% \DeclareUnicodeCharacter{0132}{IJ}% \DeclareUnicodeCharacter{0133}{ij}% \DeclareUnicodeCharacter{0134}{\^J}% \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}% \DeclareUnicodeCharacter{0136}{\cedilla{K}}% \DeclareUnicodeCharacter{0137}{\cedilla{k}}% \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}% \DeclareUnicodeCharacter{0139}{\'L}% \DeclareUnicodeCharacter{013A}{\'l}% \DeclareUnicodeCharacter{013B}{\cedilla{L}}% \DeclareUnicodeCharacter{013C}{\cedilla{l}}% \DeclareUnicodeCharacter{013D}{L'}% should kern \DeclareUnicodeCharacter{013E}{l'}% should kern \DeclareUnicodeCharacter{013F}{L\U{00B7}}% % \DeclareUnicodeCharacter{0140}{l\U{00B7}}% \DeclareUnicodeCharacter{0141}{\L}% \DeclareUnicodeCharacter{0142}{\l}% \DeclareUnicodeCharacter{0143}{\'N}% \DeclareUnicodeCharacter{0144}{\'n}% \DeclareUnicodeCharacter{0145}{\cedilla{N}}% \DeclareUnicodeCharacter{0146}{\cedilla{n}}% \DeclareUnicodeCharacter{0147}{\v{N}}% \DeclareUnicodeCharacter{0148}{\v{n}}% \DeclareUnicodeCharacter{0149}{'n}% \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}% \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}% \DeclareUnicodeCharacter{014C}{\=O}% \DeclareUnicodeCharacter{014D}{\=o}% \DeclareUnicodeCharacter{014E}{\u{O}}% \DeclareUnicodeCharacter{014F}{\u{o}}% % \DeclareUnicodeCharacter{0150}{\H{O}}% \DeclareUnicodeCharacter{0151}{\H{o}}% \DeclareUnicodeCharacter{0152}{\OE}% \DeclareUnicodeCharacter{0153}{\oe}% \DeclareUnicodeCharacter{0154}{\'R}% \DeclareUnicodeCharacter{0155}{\'r}% \DeclareUnicodeCharacter{0156}{\cedilla{R}}% \DeclareUnicodeCharacter{0157}{\cedilla{r}}% \DeclareUnicodeCharacter{0158}{\v{R}}% \DeclareUnicodeCharacter{0159}{\v{r}}% \DeclareUnicodeCharacter{015A}{\'S}% \DeclareUnicodeCharacter{015B}{\'s}% \DeclareUnicodeCharacter{015C}{\^S}% \DeclareUnicodeCharacter{015D}{\^s}% \DeclareUnicodeCharacter{015E}{\cedilla{S}}% \DeclareUnicodeCharacter{015F}{\cedilla{s}}% % \DeclareUnicodeCharacter{0160}{\v{S}}% \DeclareUnicodeCharacter{0161}{\v{s}}% \DeclareUnicodeCharacter{0162}{\cedilla{T}}% \DeclareUnicodeCharacter{0163}{\cedilla{t}}% \DeclareUnicodeCharacter{0164}{\v{T}}% \DeclareUnicodeCharacter{0165}{\v{t}}% \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0168}{\~U}% \DeclareUnicodeCharacter{0169}{\~u}% \DeclareUnicodeCharacter{016A}{\=U}% \DeclareUnicodeCharacter{016B}{\=u}% \DeclareUnicodeCharacter{016C}{\u{U}}% \DeclareUnicodeCharacter{016D}{\u{u}}% \DeclareUnicodeCharacter{016E}{\ringaccent{U}}% \DeclareUnicodeCharacter{016F}{\ringaccent{u}}% % \DeclareUnicodeCharacter{0170}{\H{U}}% \DeclareUnicodeCharacter{0171}{\H{u}}% \DeclareUnicodeCharacter{0172}{\ogonek{U}}% \DeclareUnicodeCharacter{0173}{\ogonek{u}}% \DeclareUnicodeCharacter{0174}{\^W}% \DeclareUnicodeCharacter{0175}{\^w}% \DeclareUnicodeCharacter{0176}{\^Y}% \DeclareUnicodeCharacter{0177}{\^y}% \DeclareUnicodeCharacter{0178}{\"Y}% \DeclareUnicodeCharacter{0179}{\'Z}% \DeclareUnicodeCharacter{017A}{\'z}% \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}% \DeclareUnicodeCharacter{017C}{\dotaccent{z}}% \DeclareUnicodeCharacter{017D}{\v{Z}}% \DeclareUnicodeCharacter{017E}{\v{z}}% \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}% % \DeclareUnicodeCharacter{01C4}{D\v{Z}}% \DeclareUnicodeCharacter{01C5}{D\v{z}}% \DeclareUnicodeCharacter{01C6}{d\v{z}}% \DeclareUnicodeCharacter{01C7}{LJ}% \DeclareUnicodeCharacter{01C8}{Lj}% \DeclareUnicodeCharacter{01C9}{lj}% \DeclareUnicodeCharacter{01CA}{NJ}% \DeclareUnicodeCharacter{01CB}{Nj}% \DeclareUnicodeCharacter{01CC}{nj}% \DeclareUnicodeCharacter{01CD}{\v{A}}% \DeclareUnicodeCharacter{01CE}{\v{a}}% \DeclareUnicodeCharacter{01CF}{\v{I}}% % \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}% \DeclareUnicodeCharacter{01D1}{\v{O}}% \DeclareUnicodeCharacter{01D2}{\v{o}}% \DeclareUnicodeCharacter{01D3}{\v{U}}% \DeclareUnicodeCharacter{01D4}{\v{u}}% % \DeclareUnicodeCharacter{01E2}{\={\AE}}% \DeclareUnicodeCharacter{01E3}{\={\ae}}% \DeclareUnicodeCharacter{01E6}{\v{G}}% \DeclareUnicodeCharacter{01E7}{\v{g}}% \DeclareUnicodeCharacter{01E8}{\v{K}}% \DeclareUnicodeCharacter{01E9}{\v{k}}% % \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}% \DeclareUnicodeCharacter{01F1}{DZ}% \DeclareUnicodeCharacter{01F2}{Dz}% \DeclareUnicodeCharacter{01F3}{dz}% \DeclareUnicodeCharacter{01F4}{\'G}% \DeclareUnicodeCharacter{01F5}{\'g}% \DeclareUnicodeCharacter{01F8}{\`N}% \DeclareUnicodeCharacter{01F9}{\`n}% \DeclareUnicodeCharacter{01FC}{\'{\AE}}% \DeclareUnicodeCharacter{01FD}{\'{\ae}}% \DeclareUnicodeCharacter{01FE}{\'{\O}}% \DeclareUnicodeCharacter{01FF}{\'{\o}}% % \DeclareUnicodeCharacter{021E}{\v{H}}% \DeclareUnicodeCharacter{021F}{\v{h}}% % \DeclareUnicodeCharacter{0226}{\dotaccent{A}}% \DeclareUnicodeCharacter{0227}{\dotaccent{a}}% \DeclareUnicodeCharacter{0228}{\cedilla{E}}% \DeclareUnicodeCharacter{0229}{\cedilla{e}}% \DeclareUnicodeCharacter{022E}{\dotaccent{O}}% \DeclareUnicodeCharacter{022F}{\dotaccent{o}}% % \DeclareUnicodeCharacter{0232}{\=Y}% \DeclareUnicodeCharacter{0233}{\=y}% \DeclareUnicodeCharacter{0237}{\dotless{j}}% % \DeclareUnicodeCharacter{02DB}{\ogonek{ }}% % % Greek letters upper case \DeclareUnicodeCharacter{0391}{{\it A}}% \DeclareUnicodeCharacter{0392}{{\it B}}% \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}% \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}% \DeclareUnicodeCharacter{0395}{{\it E}}% \DeclareUnicodeCharacter{0396}{{\it Z}}% \DeclareUnicodeCharacter{0397}{{\it H}}% \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}% \DeclareUnicodeCharacter{0399}{{\it I}}% \DeclareUnicodeCharacter{039A}{{\it K}}% \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}% \DeclareUnicodeCharacter{039C}{{\it M}}% \DeclareUnicodeCharacter{039D}{{\it N}}% \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}% \DeclareUnicodeCharacter{039F}{{\it O}}% \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}% \DeclareUnicodeCharacter{03A1}{{\it P}}% %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}% \DeclareUnicodeCharacter{03A4}{{\it T}}% \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}% \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}% \DeclareUnicodeCharacter{03A7}{{\it X}}% \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}% \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}% % % Vowels with accents \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}% \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}% \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}% \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}% \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}% \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}% % % Standalone accent \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}% % % Greek letters lower case \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}% \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}% \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}% \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}% \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}% \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}% \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}% \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}% \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}% \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}% \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}% \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}% \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}% \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}% \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}% \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}% \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}% \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}% \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}% \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}% \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}% \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}% \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}% \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}% % % More Greek vowels with accents \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}% \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}% \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}% \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}% \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}% % % Variant Greek letters \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}% \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}% \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}% % \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}% \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}% \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}% \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}% \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}% \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}% \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}% \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}% \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}% \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}% \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}% \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}% % \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}% \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}% % \DeclareUnicodeCharacter{1E20}{\=G}% \DeclareUnicodeCharacter{1E21}{\=g}% \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}% \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}% \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}% \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}% \DeclareUnicodeCharacter{1E26}{\"H}% \DeclareUnicodeCharacter{1E27}{\"h}% % \DeclareUnicodeCharacter{1E30}{\'K}% \DeclareUnicodeCharacter{1E31}{\'k}% \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}% \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}% \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}% \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}% \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}% \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}% \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}% \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}% \DeclareUnicodeCharacter{1E3E}{\'M}% \DeclareUnicodeCharacter{1E3F}{\'m}% % \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}% \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}% \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}% \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}% \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}% \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}% \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}% \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}% \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}% \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}% % \DeclareUnicodeCharacter{1E54}{\'P}% \DeclareUnicodeCharacter{1E55}{\'p}% \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}% \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}% \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}% \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}% \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}% \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}% \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}% \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}% % \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}% \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}% \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}% \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}% \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}% \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}% \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}% \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}% \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}% \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}% % \DeclareUnicodeCharacter{1E7C}{\~V}% \DeclareUnicodeCharacter{1E7D}{\~v}% \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}% \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}% % \DeclareUnicodeCharacter{1E80}{\`W}% \DeclareUnicodeCharacter{1E81}{\`w}% \DeclareUnicodeCharacter{1E82}{\'W}% \DeclareUnicodeCharacter{1E83}{\'w}% \DeclareUnicodeCharacter{1E84}{\"W}% \DeclareUnicodeCharacter{1E85}{\"w}% \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}% \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}% \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}% \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}% \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}% \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}% \DeclareUnicodeCharacter{1E8C}{\"X}% \DeclareUnicodeCharacter{1E8D}{\"x}% \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}% \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}% % \DeclareUnicodeCharacter{1E90}{\^Z}% \DeclareUnicodeCharacter{1E91}{\^z}% \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}% \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}% \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}% \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}% \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}% \DeclareUnicodeCharacter{1E97}{\"t}% \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}% \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}% % \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}% \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}% % \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}% \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}% \DeclareUnicodeCharacter{1EBC}{\~E}% \DeclareUnicodeCharacter{1EBD}{\~e}% % \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}% \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}% \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}% \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}% % \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}% \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}% % \DeclareUnicodeCharacter{1EF2}{\`Y}% \DeclareUnicodeCharacter{1EF3}{\`y}% \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}% % \DeclareUnicodeCharacter{1EF8}{\~Y}% \DeclareUnicodeCharacter{1EF9}{\~y}% % % Punctuation \DeclareUnicodeCharacter{2013}{--}% \DeclareUnicodeCharacter{2014}{---}% \DeclareUnicodeCharacter{2018}{\quoteleft{}}% \DeclareUnicodeCharacter{2019}{\quoteright{}}% \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}% \DeclareUnicodeCharacter{201C}{\quotedblleft{}}% \DeclareUnicodeCharacter{201D}{\quotedblright{}}% \DeclareUnicodeCharacter{201E}{\quotedblbase{}}% \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}% \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}% \DeclareUnicodeCharacter{2022}{\bullet{}}% \DeclareUnicodeCharacter{202F}{\thinspace}% \DeclareUnicodeCharacter{2026}{\dots{}}% \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}% \DeclareUnicodeCharacter{203A}{\guilsinglright{}}% % \DeclareUnicodeCharacter{20AC}{\euro{}}% % \DeclareUnicodeCharacter{2192}{\expansion{}}% \DeclareUnicodeCharacter{21D2}{\result{}}% % % Mathematical symbols \DeclareUnicodeCharacter{2200}{\ensuremath\forall}% \DeclareUnicodeCharacter{2203}{\ensuremath\exists}% \DeclareUnicodeCharacter{2208}{\ensuremath\in}% \DeclareUnicodeCharacter{2212}{\minus{}}% \DeclareUnicodeCharacter{2217}{\ast}% \DeclareUnicodeCharacter{221E}{\ensuremath\infty}% \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}% \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}% \DeclareUnicodeCharacter{2229}{\ensuremath\cap}% \DeclareUnicodeCharacter{2261}{\equiv{}}% \DeclareUnicodeCharacter{2264}{\ensuremath\leq}% \DeclareUnicodeCharacter{2265}{\ensuremath\geq}% \DeclareUnicodeCharacter{2282}{\ensuremath\subset}% \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}% % \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}% \DeclareUnicodeCharacter{2032}{\ensuremath\prime}% \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}% \DeclareUnicodeCharacter{2111}{\ensuremath\Im}% \DeclareUnicodeCharacter{2113}{\ensuremath\ell}% \DeclareUnicodeCharacter{2118}{\ensuremath\wp}% \DeclareUnicodeCharacter{211C}{\ensuremath\Re}% \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}% \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}% \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}% \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}% \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}% \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}% \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}% \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}% \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}% \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}% \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}% \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}% \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}% \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}% \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}% \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}% \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}% \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}% \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}% \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}% \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}% \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}% \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}% \DeclareUnicodeCharacter{2202}{\ensuremath\partial}% \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}% \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}% \DeclareUnicodeCharacter{2209}{\ensuremath\notin}% \DeclareUnicodeCharacter{220B}{\ensuremath\owns}% \DeclareUnicodeCharacter{220F}{\ensuremath\prod}% \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}% \DeclareUnicodeCharacter{2211}{\ensuremath\sum}% \DeclareUnicodeCharacter{2213}{\ensuremath\mp}% \DeclareUnicodeCharacter{2218}{\ensuremath\circ}% \DeclareUnicodeCharacter{221A}{\ensuremath\surd}% \DeclareUnicodeCharacter{221D}{\ensuremath\propto}% \DeclareUnicodeCharacter{2220}{\ensuremath\angle}% \DeclareUnicodeCharacter{2223}{\ensuremath\mid}% \DeclareUnicodeCharacter{2228}{\ensuremath\vee}% \DeclareUnicodeCharacter{222A}{\ensuremath\cup}% \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}% \DeclareUnicodeCharacter{222E}{\ensuremath\oint}% \DeclareUnicodeCharacter{223C}{\ensuremath\sim}% \DeclareUnicodeCharacter{2240}{\ensuremath\wr}% \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}% \DeclareUnicodeCharacter{2245}{\ensuremath\cong}% \DeclareUnicodeCharacter{2248}{\ensuremath\approx}% \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}% \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}% \DeclareUnicodeCharacter{2260}{\ensuremath\neq}% \DeclareUnicodeCharacter{226A}{\ensuremath\ll}% \DeclareUnicodeCharacter{226B}{\ensuremath\gg}% \DeclareUnicodeCharacter{227A}{\ensuremath\prec}% \DeclareUnicodeCharacter{227B}{\ensuremath\succ}% \DeclareUnicodeCharacter{2283}{\ensuremath\supset}% \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}% \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}% \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}% \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}% \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}% \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}% \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}% \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}% \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}% \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}% \DeclareUnicodeCharacter{2299}{\ensuremath\odot}% \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}% \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}% \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}% \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}% \DeclareUnicodeCharacter{22A8}{\ensuremath\models}% \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}% \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}% \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}% \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}% \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}% \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}% \DeclareUnicodeCharacter{22C6}{\ensuremath\star}% \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}% \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}% \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}% \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}% \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}% \DeclareUnicodeCharacter{2322}{\ensuremath\frown}% \DeclareUnicodeCharacter{2323}{\ensuremath\smile}% % \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}% \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}% \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}% \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}% \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}% \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}% \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}% \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}% \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}% \DeclareUnicodeCharacter{266D}{\ensuremath\flat}% \DeclareUnicodeCharacter{266E}{\ensuremath\natural}% \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}% \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}% \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}% \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}% \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}% \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}% \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}% \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}% \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}% \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}% \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}% \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}% \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}% \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}% \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}% \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}% \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}% \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}% % \global\mathchardef\checkmark="1370% actually the square root sign \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}% }% end of \unicodechardefs % UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command) % It makes the setting that replace UTF-8 byte sequence. \def\utfeightchardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii \unicodechardefs } % Whether the active definitions of non-ASCII characters expand to % non-active tokens with the same character code. This is used to % write characters literally, instead of using active definitions for % printing the correct glyphs. \newif\ifpassthroughchars \passthroughcharsfalse % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro to replace/pass-through a Unicode character % \def\DeclareUnicodeCharacterNative#1#2{% \catcode"#1=\active \def\dodeclareunicodecharacternative##1##2##3{% \begingroup \uccode`\~="##2\relax \uppercase{\gdef~}{% \ifpassthroughchars ##1% \else ##3% \fi } \endgroup } \begingroup \uccode`\.="#1\relax \uppercase{\def\UTFNativeTmp{.}}% \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}% \endgroup } % Native Unicode handling (XeTeX and LuaTeX) character replacing definition. % It activates the setting that replaces Unicode characters. \def\nativeunicodechardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative \unicodechardefs } % For native Unicode handling (XeTeX and LuaTeX), % make the character token expand % to the sequences given in \unicodechardefs for printing. \def\DeclareUnicodeCharacterNativeAtU#1#2{% \def\UTFAtUTmp{#2} \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp } % @U command definitions for native Unicode handling (XeTeX and LuaTeX). \def\nativeunicodechardefsatu{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU \unicodechardefs } % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Define all Unicode characters we know about. This makes UTF-8 the default % input encoding and allows @U to work. \iftxinativeunicodecapable \nativeunicodechardefsatu \else \utfeightchardefs \fi \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \txipageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \txipagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \else \ifx\XeTeXrevision\thisisundefined \special{papersize=#8,#7}% \else \pdfpageheight #7\relax \pdfpagewidth #8\relax % XeTeX does not have \pdfhorigin and \pdfvorigin. \fi \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset \advance\dimen0 by 1in % reference point for DVI is 1 inch from top of page % \dimen2 = \hsize \advance\dimen2 by \normaloffset \advance\dimen2 by 1in % reference point is 1 inch from left edge of page % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper % Default value of \hfuzz, for suppressing warnings about overfull hboxes. \hfuzz = 1pt \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Set catcodes for Texinfo file % Active characters for printing the wanted glyph. % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. % \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hatchar=`\^ \catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \let\realunder=_ \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix \catcode`\-=\active \let-=\normaldash % used for headline/footline in the output routine, in case the page % breaks in the middle of an @tex block. \def\texinfochars{% \let< = \activeless \let> = \activegtr \let~ = \activetilde \let^ = \activehat \markupsetuplqdefault \markupsetuprqdefault \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. } % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ % \realbackslash is an actual character `\' with catcode other. {\catcode`\\=\other @gdef@realbackslash{\}} % In Texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % Print a typewriter backslash. For math mode, we can't simply use % \backslashcurfont: the story here is that in math mode, the \char % of \backslashcurfont ends up printing the roman \ from the math symbol % font (because \char in math mode uses the \mathcode, and plain.tex % sets \mathcode`\\="026E). Hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @ttbackslash % @backslashchar{} is for user documents. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % {@catcode`- = @active @gdef@normalturnoffactive{% @passthroughcharstrue @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @let\=@ttbackslash @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have @fixbackslash turn them back on. @catcode`+=@other @catcode`@_=@other % \enablebackslashhack - allow file to begin `\input texinfo' % % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % If the file did not have a `\input texinfo', then it is turned off after % the first line; otherwise the first `\' in the file would cause an error. % This is used on the very last line of this file, texinfo.tex. % We also use @c to call @fixbackslash, in case ends of lines are hidden. { @catcode`@^=7 @catcode`@^^M=13@gdef@enablebackslashhack{% @global@let\ = @eatinput% @catcode`@^^M=13% @def@c{@fixbackslash@c}% % Definition for the newline at the end of this file. @def ^^M{@let^^M@secondlinenl}% % Definition for a newline in the main Texinfo file. @gdef @secondlinenl{@fixbackslash}% % In case the first line has a whole-line command on it @let@originalparsearg@parsearg @def@parsearg{@fixbackslash@originalparsearg} }} {@catcode`@^=7 @catcode`@^^M=13% @gdef@eatinput input texinfo#1^^M{@fixbackslash}} % Emergency active definition of newline, in case an active newline token % appears by mistake. {@catcode`@^=7 @catcode13=13% @gdef@enableemergencynewline{% @gdef^^M{% @par% %@par% }}} @gdef@fixbackslash{% @ifx\@eatinput @let\ = @ttbackslash @fi @catcode13=5 % regular end of line @enableemergencynewline @let@c=@comment @let@parsearg@originalparsearg % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. @catcode`+=@active @catcode`@_=@active % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. This macro, @fixbackslash, gets % called at the beginning of every Texinfo file. Not opening texinfo.cnf % directly in this file, texinfo.tex, makes it possible to make a format % file for Texinfo. % @openin 1 texinfo.cnf @ifeof 1 @else @input texinfo.cnf @fi @closein 1 } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'before-save-hook 'time-stamp) @c page-delimiter: "^\\\\message\\|emacs-page" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @enablebackslashhack libtasn1-4.16.0/build-aux/compile0000755000000000000000000001632713615375040013473 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: libtasn1-4.16.0/build-aux/mdate-sh0000755000000000000000000001373213514402107013533 00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1995-2018 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to . EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Use UTC to get reproducible result. TZ=UTC0 export TZ # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: libtasn1-4.16.0/build-aux/useless-if-before-free0000755000000000000000000001602313514140427016267 00000000000000#!/bin/sh #! -*-perl-*- # Detect instances of "if (p) free (p);". # Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces. # Copyright (C) 2008-2019 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Written by Jim Meyering # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx "$0" "$@"' if 0; my $VERSION = '2018-03-07 03:47'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. use strict; use warnings; use Getopt::Long; (my $ME = $0) =~ s|.*/||; # use File::Coda; # https://meyering.net/code/Coda/ END { defined fileno STDOUT or return; close STDOUT and return; warn "$ME: failed to close standard output: $!\n"; $? ||= 1; } sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { print $STREAM < sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; exit }, list => \$list, 'name=s@' => \@name, ) or usage 1; # Make sure we have the right number of non-option arguments. # Always tell the user why we fail. @ARGV < 1 and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR; my $or = join '|', @name; my $regexp = qr/(?:$or)/; # Set the input record separator. # Note: this makes it impractical to print line numbers. $/ = '"'; my $found_match = 0; FILE: foreach my $file (@ARGV) { open FH, '<', $file or (warn "$ME: can't open '$file' for reading: $!\n"), $err = EXIT_ERROR, next; while (defined (my $line = )) { # Skip non-matching lines early to save time $line =~ /\bif\b/ or next; while ($line =~ /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\) # 1 2 3 (?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;| \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg) { my $all = $1; my ($lhs, $rhs) = ($2, $3); my ($free_opnd, $braced_free_opnd) = ($4, $5); my $non_NULL; if (!defined $rhs) { $non_NULL = $lhs } elsif (is_NULL $rhs) { $non_NULL = $lhs } elsif (is_NULL $lhs) { $non_NULL = $rhs } else { next } # Compare the non-NULL part of the "if" expression and the # free'd expression, without regard to white space. $non_NULL =~ tr/ \t//d; my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd; $e2 =~ tr/ \t//d; if ($non_NULL eq $e2) { $found_match = 1; $list and (print "$file\0"), next FILE; print "$file: $all\n"; } } } } continue { close FH; } $found_match && $err == EXIT_NO_MATCH and $err = EXIT_MATCH; exit $err; } my $foo = <<'EOF'; # The above is to *find* them. # This adjusts them, removing the unnecessary "if (p)" part. # FIXME: do something like this as an option (doesn't do braces): free=xfree git grep -l -z "$free *(" \ | xargs -0 useless-if-before-free -l --name="$free" \ | xargs -0 perl -0x3b -pi -e \ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s' # Use the following to remove redundant uses of kfree inside braces. # Note that -0777 puts perl in slurp-whole-file mode; # but we have plenty of memory, these days... free=kfree git grep -l -z "$free *(" \ | xargs -0 useless-if-before-free -l --name="$free" \ | xargs -0 perl -0777 -pi -e \ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms' Be careful that the result of the above transformation is valid. If the matched string is followed by "else", then obviously, it won't be. When modifying files, refuse to process anything other than a regular file. EOF ## Local Variables: ## mode: perl ## indent-tabs-mode: nil ## eval: (add-hook 'before-save-hook 'time-stamp) ## time-stamp-line-limit: 50 ## time-stamp-start: "my $VERSION = '" ## time-stamp-format: "%:y-%02m-%02d %02H:%02M" ## time-stamp-time-zone: "UTC0" ## time-stamp-end: "'; # UTC" ## End: libtasn1-4.16.0/build-aux/config.sub0000755000000000000000000007555513514402107014101 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2019 Free Software Foundation, Inc. timestamp='2019-06-30' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # 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 or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2019 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 ;; *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 # Split fields of configuration type # shellcheck disable=SC2162 IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \ | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 os=$maybe_os ;; android-linux) basic_machine=$field1-unknown os=linux-android ;; *) basic_machine=$field1-$field2 os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 os= ;; *) basic_machine=$field1 os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc os=bsd ;; a29khif) basic_machine=a29k-amd os=udi ;; adobe68k) basic_machine=m68010-adobe os=scout ;; alliant) basic_machine=fx80-alliant os= ;; altos | altos3068) basic_machine=m68k-altos os= ;; am29k) basic_machine=a29k-none os=bsd ;; amdahl) basic_machine=580-amdahl os=sysv ;; amiga) basic_machine=m68k-unknown os= ;; amigaos | amigados) basic_machine=m68k-unknown os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=sysv4 ;; apollo68) basic_machine=m68k-apollo os=sysv ;; apollo68bsd) basic_machine=m68k-apollo os=bsd ;; aros) basic_machine=i386-pc os=aros ;; aux) basic_machine=m68k-apple os=aux ;; balance) basic_machine=ns32k-sequent os=dynix ;; blackfin) basic_machine=bfin-unknown os=linux ;; cegcc) basic_machine=arm-unknown os=cegcc ;; convex-c1) basic_machine=c1-convex os=bsd ;; convex-c2) basic_machine=c2-convex os=bsd ;; convex-c32) basic_machine=c32-convex os=bsd ;; convex-c34) basic_machine=c34-convex os=bsd ;; convex-c38) basic_machine=c38-convex os=bsd ;; cray) basic_machine=j90-cray os=unicos ;; crds | unos) basic_machine=m68k-crds os= ;; da30) basic_machine=m68k-da30 os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec os= ;; delta88) basic_machine=m88k-motorola os=sysv3 ;; dicos) basic_machine=i686-pc os=dicos ;; djgpp) basic_machine=i586-pc os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=ose ;; gmicro) basic_machine=tron-gmicro os=sysv ;; go32) basic_machine=i386-pc os=go32 ;; 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 | hp300hpux) basic_machine=m68k-hp os=hpux ;; hp300bsd) basic_machine=m68k-hp os=bsd ;; hppaosf) basic_machine=hppa1.1-hp os=osf ;; hppro) basic_machine=hppa1.1-hp os=proelf ;; i386mach) basic_machine=i386-mach os=mach ;; isi68 | isi) basic_machine=m68k-isi os=sysv ;; m68knommu) basic_machine=m68k-unknown os=linux ;; magnum | m3230) basic_machine=mips-mips os=sysv ;; merlin) basic_machine=ns32k-utek os=sysv ;; mingw64) basic_machine=x86_64-pc os=mingw64 ;; mingw32) basic_machine=i686-pc os=mingw32 ;; mingw32ce) basic_machine=arm-unknown os=mingw32ce ;; monitor) basic_machine=m68k-rom68k os=coff ;; morphos) basic_machine=powerpc-unknown os=morphos ;; moxiebox) basic_machine=moxie-unknown os=moxiebox ;; msdos) basic_machine=i386-pc os=msdos ;; msys) basic_machine=i686-pc os=msys ;; mvs) basic_machine=i370-ibm os=mvs ;; nacl) basic_machine=le32-unknown os=nacl ;; ncr3000) basic_machine=i486-ncr os=sysv4 ;; netbsd386) basic_machine=i386-pc 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 ;; necv70) basic_machine=v70-nec os=sysv ;; 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 ;; os400) basic_machine=powerpc-ibm os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=ose ;; os68k) basic_machine=m68k-none os=os68k ;; paragon) basic_machine=i860-intel os=osf ;; parisc) basic_machine=hppa-unknown os=linux ;; pw32) basic_machine=i586-unknown os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=rdos ;; rdos32) basic_machine=i386-pc os=rdos ;; rom68k) basic_machine=m68k-rom68k os=coff ;; sa29200) basic_machine=a29k-amd os=udi ;; sei) basic_machine=mips-sei os=seiux ;; sequent) basic_machine=i386-sequent os= ;; sps7) basic_machine=m68k-bull os=sysv2 ;; st2000) basic_machine=m68k-tandem os= ;; stratus) basic_machine=i860-stratus os=sysv4 ;; sun2) basic_machine=m68000-sun os= ;; sun2os3) basic_machine=m68000-sun os=sunos3 ;; sun2os4) basic_machine=m68000-sun os=sunos4 ;; sun3) basic_machine=m68k-sun os= ;; sun3os3) basic_machine=m68k-sun os=sunos3 ;; sun3os4) basic_machine=m68k-sun os=sunos4 ;; sun4) basic_machine=sparc-sun os= ;; sun4os3) basic_machine=sparc-sun os=sunos3 ;; sun4os4) basic_machine=sparc-sun os=sunos4 ;; sun4sol2) basic_machine=sparc-sun os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun os= ;; 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 ;; toad1) basic_machine=pdp10-xkl os=tops20 ;; 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 ;; vsta) basic_machine=i386-pc os=vsta ;; vxworks960) basic_machine=i960-wrs os=vxworks ;; vxworks68) basic_machine=m68k-wrs os=vxworks ;; vxworks29k) basic_machine=a29k-wrs os=vxworks ;; xbox) basic_machine=i686-pc os=mingw32 ;; ymp) basic_machine=ymp-cray os=unicos ;; *) basic_machine=$1 os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # 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) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi os=${os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray os=${os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $os in irix*) ;; *) os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony os=newsos ;; next | m*-next) cpu=m68k vendor=next case $os in openstep*) ;; nextstep*) ;; ns2*) os=nextstep2 ;; *) os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde os=${os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x$os != x ] then case $os in # First match some system type aliases that might get confused # with valid system types. # solaris* is a basic system type, with this one exception. auroraux) os=auroraux ;; bluegene*) os=cnk ;; solaris1 | solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; solaris) os=solaris2 ;; unixware*) os=sysv4.2uw ;; gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) es1800*) os=ose ;; # Some version numbers need modification chorusos*) os=chorusos ;; isc) os=isc2.2 ;; sco6) os=sco5v6 ;; sco5) os=sco3.2v5 ;; sco4) os=sco3.2v4 ;; sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` ;; sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; scout) # Don't match below ;; sco*) os=sco3.2v2 ;; psos*) os=psos ;; # Now 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* | esix* | aix* | cnk* | sunos | sunos[34]*\ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | kopensolaris* | plan9* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* \ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ | knetbsd* | mirbsd* | netbsd* \ | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* \ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \ | linux-newlib* | linux-musl* | linux-uclibc* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ | openstep* | oskit* | conix* | pw32* | nonstopux* \ | storm-chaos* | tops10* | tenex* | tops20* | its* \ | os2* | vos* | palmos* | uclinux* | nucleus* \ | morphos* | superux* | rtmk* | windiss* \ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix) # Remember, each alternative MUST END IN *, to match a version number. ;; qnx*) case $cpu in x86 | i*86) ;; *) os=nto-$os ;; esac ;; hiux*) os=hiuxwe2 ;; nto-qnx*) ;; nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; sim | xray | os68k* | v88r* \ | windows* | osx | abug | netware* | os9* \ | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) ;; linux-dietlibc) os=linux-dietlibc ;; linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; lynx*) os=lynxos ;; mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; opened*) os=openedition ;; os400*) os=os400 ;; sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; wince*) os=wince ;; 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 ;; # 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 ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; zvmoe) os=zvmoe ;; dicos*) os=dicos ;; pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $cpu in arm*) os=eabi ;; *) os=elf ;; esac ;; nacl*) ;; ios) ;; none) ;; *-eabi) ;; *) 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 $cpu-$vendor in score-*) os=elf ;; spu-*) os=elf ;; *-acorn) os=riscix1.2 ;; arm*-rebel) os=linux ;; arm*-semi) os=aout ;; c4x-* | tic4x-*) os=coff ;; c8051-*) os=elf ;; clipper-intergraph) os=clix ;; hexagon-*) os=elf ;; tic54x-*) os=coff ;; tic55x-*) os=coff ;; tic6x-*) os=coff ;; # This must come before the *-dec entry. pdp10-*) os=tops20 ;; pdp11-*) os=none ;; *-dec | vax-*) os=ultrix4.2 ;; m68*-apollo) os=domain ;; i386-sun) os=sunos4.0.2 ;; m68000-sun) os=sunos3 ;; m68*-cisco) os=aout ;; mep-*) os=elf ;; mips*-cisco) os=elf ;; mips*-*) os=elf ;; or32-*) os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=sysv3 ;; sparc-* | *-sun) os=sunos4.1.1 ;; pru-*) os=elf ;; *-be) os=beos ;; *-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 ;; *-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 ;; *-wrs) os=vxworks ;; *) 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. case $vendor in unknown) case $os in riscix*) vendor=acorn ;; sunos*) vendor=sun ;; cnk*|-aix*) vendor=ibm ;; beos*) vendor=be ;; hpux*) vendor=hp ;; mpeix*) vendor=hp ;; hiux*) vendor=hitachi ;; unos*) vendor=crds ;; dgux*) vendor=dg ;; luna*) vendor=omron ;; genix*) vendor=ns ;; clix*) vendor=intergraph ;; 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 ;; esac echo "$cpu-$vendor-$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libtasn1-4.16.0/build-aux/vc-list-files0000755000000000000000000000736613514140427014524 00000000000000#!/bin/sh # List version-controlled file names. # Print a version string. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2006-2019 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 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # List the specified version-controlled files. # With no argument, list them all. With a single DIRECTORY argument, # list the version-controlled files in that directory. # If there's an argument, it must be a single, "."-relative directory name. # cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/ postprocess= case $1 in --help) cat <. EOF exit ;; --version) year=`echo "$scriptversion" | sed 's/[^0-9].*//'` cat < This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. EOF exit ;; -C) test "$2" = . || postprocess="| sed 's|^|$2/|'" cd "$2" || exit 1 shift; shift ;; esac test $# = 0 && set . for dir do if test -d .git || test -f .git; then test "x$dir" = x. \ && dir= sed_esc= \ || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; } # Ignore git symlinks - either they point into the tree, in which case # we don't need to visit the target twice, or they point somewhere # else (often into a submodule), in which case the content does not # belong to this package. eval exec git ls-tree -r 'HEAD:"$dir"' \ \| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess elif test -d .hg; then eval exec hg locate '"$dir/*"' $postprocess elif test -d .bzr; then test "$postprocess" = '' && postprocess="| sed 's|^\./||'" eval exec bzr ls -R --versioned '"$dir"' $postprocess elif test -d CVS; then test "$postprocess" = '' && postprocess="| sed 's|^\./||'" if test -x build-aux/cvsu; then eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess elif (cvsu --help) >/dev/null 2>&1; then eval cvsu --find --types=AFGM '"$dir"' $postprocess else eval awk -F/ \''{ \ if (!$1 && $3 !~ /^-/) { \ f=FILENAME; \ if (f ~ /CVS\/Entries$/) \ f = substr(f, 1, length(f)-11); \ print f $2; \ }}'\'' \ `find "$dir" -name Entries -print` /dev/null' $postprocess fi elif test -d .svn; then eval exec svn list -R '"$dir"' $postprocess else echo "$0: Failed to determine type of version control used in `pwd`" 1>&2 exit 1 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: libtasn1-4.16.0/build-aux/missing0000755000000000000000000001533613615375040013513 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: libtasn1-4.16.0/AUTHORS0000644000000000000000000000071013246341643011262 00000000000000Original authors: Fabio Fiorina Nikos Mavrogiannopoulos Current maintainer: Simon Josefsson ---------------------------------------------------------------------- Copyright (C) 2002-2014 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. libtasn1-4.16.0/windows/0000755000000000000000000000000013615400132011753 500000000000000libtasn1-4.16.0/windows/libtasn1.sln0000755000000000000000000000634413246341643014153 00000000000000 Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtasn1", "libtasn1\libtasn1.vcproj", "{4DE20933-A72B-4261-9B63-0DE9AF31DAB2}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-tree", "test-tree\test-tree.vcproj", "{53CDE0B4-BA0D-4911-8730-41B03CDC310A}" ProjectSection(ProjectDependencies) = postProject {4DE20933-A72B-4261-9B63-0DE9AF31DAB2} = {4DE20933-A72B-4261-9B63-0DE9AF31DAB2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-parser", "test-parser\test-parser.vcproj", "{CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}" ProjectSection(ProjectDependencies) = postProject {4DE20933-A72B-4261-9B63-0DE9AF31DAB2} = {4DE20933-A72B-4261-9B63-0DE9AF31DAB2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asn1-parser", "asn1-parser\asn1-parser.vcproj", "{3E96D323-99DD-497F-991A-9316C9FFA99A}" ProjectSection(ProjectDependencies) = postProject {4DE20933-A72B-4261-9B63-0DE9AF31DAB2} = {4DE20933-A72B-4261-9B63-0DE9AF31DAB2} {0C4318E2-FFD7-40DC-945C-40016B10665C} = {0C4318E2-FFD7-40DC-945C-40016B10665C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gnulib", "gnulib\gnulib.vcproj", "{0C4318E2-FFD7-40DC-945C-40016B10665C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.Debug|Win32.ActiveCfg = Debug|Win32 {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.Debug|Win32.Build.0 = Debug|Win32 {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.Release|Win32.ActiveCfg = Release|Win32 {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.Release|Win32.Build.0 = Release|Win32 {53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Debug|Win32.ActiveCfg = Debug|Win32 {53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Debug|Win32.Build.0 = Debug|Win32 {53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Release|Win32.ActiveCfg = Release|Win32 {53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Release|Win32.Build.0 = Release|Win32 {CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Debug|Win32.ActiveCfg = Debug|Win32 {CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Debug|Win32.Build.0 = Debug|Win32 {CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Release|Win32.ActiveCfg = Release|Win32 {CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Release|Win32.Build.0 = Release|Win32 {3E96D323-99DD-497F-991A-9316C9FFA99A}.Debug|Win32.ActiveCfg = Debug|Win32 {3E96D323-99DD-497F-991A-9316C9FFA99A}.Debug|Win32.Build.0 = Debug|Win32 {3E96D323-99DD-497F-991A-9316C9FFA99A}.Release|Win32.ActiveCfg = Release|Win32 {3E96D323-99DD-497F-991A-9316C9FFA99A}.Release|Win32.Build.0 = Release|Win32 {0C4318E2-FFD7-40DC-945C-40016B10665C}.Debug|Win32.ActiveCfg = Debug|Win32 {0C4318E2-FFD7-40DC-945C-40016B10665C}.Debug|Win32.Build.0 = Debug|Win32 {0C4318E2-FFD7-40DC-945C-40016B10665C}.Release|Win32.ActiveCfg = Release|Win32 {0C4318E2-FFD7-40DC-945C-40016B10665C}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal libtasn1-4.16.0/windows/test-tree/0000755000000000000000000000000013615400132013667 500000000000000libtasn1-4.16.0/windows/test-tree/test-tree.vcproj0000755000000000000000000000640013246341643016766 00000000000000 libtasn1-4.16.0/windows/gnulib/0000755000000000000000000000000013615400132013233 500000000000000libtasn1-4.16.0/windows/gnulib/getopt.h0000755000000000000000000000006113246341643014641 00000000000000#define HAVE_GETOPT_LONG 1 #include "getopt_.h" libtasn1-4.16.0/windows/gnulib/gnulib.vcproj0000755000000000000000000000644713246341643015711 00000000000000 libtasn1-4.16.0/windows/libtasn1.ncb0000755000000000000000000334600013246341643014120 00000000000000Microsoft C/C++ MSF 7.00 DSs4qøÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿýÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿ?pøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'b Dÿÿ˜˜b Dÿÿ™™rW Dÿÿšš`] Dÿÿ››Ô DÿÿÌ4 Dÿÿ__pV @ÿÿ: ˜ hU @ÿÿ à  ÙT @ÿÿ– ¿ ~T @ÿÿ. 4 uT @ÿÿ' - Á @ÿÿ$$‚ @ÿÿ!!– @ÿÿE @ÿÿ9 E@ÿÿQ @ÿÿò*M @ÿÿñ"M @ÿÿØíM @ÿÿ ÁÖM @ÿÿ!³ºþL @ÿÿ"›°èL @ÿÿ#–ßL @ÿÿ$wŒÚL @ÿÿ%frÕL @ÿÿ&Wc›L @ÿÿ'Ää•K @ÿÿ '{)W@0(}}7W@0)~~© @ÿÿ*øøŽ @ÿÿ+òòH @ÿÿ,êê/ @ÿÿ-ããÙ @ÿÿ -ÅËEW@0".ÈÈWW@0"/ÉÉdW@0"0ÊÊY @ÿÿ2< Š Y@ÿÿ4®®m @ÿÿ7£ ° m@ÿÿ:­­ª @ÿÿ;««’@ÿÿ<ªªz @ÿÿ=§§o @ÿÿ>¤¤h @ÿÿ?¡¡R @ÿÿ@ŸŸ; @ÿÿAžžÛ @ÿÿ A+Ah @1 B+ggû @1 C+ffö @1 D+eeè @1 E+ddØ @1 F+ccÐ @1 G+bbÌ @1 H+aaÆ @1 I+``Á @1 J+__µ @1 K+^^¬ @1 L+]]£ @1 M+\\Ÿ @1 N+[[œ @1 O+ZZ” @1 P+YY @1 Q+XX… @1 R+WW @1 S+VVz @1 T+UUr @1 U+TTc @1 V+SS\ @1 W+RRY @1 X+QQR @1 Y+PPJ @1 Z+OO> @1 [+NN6 @1 \+MM, @1 ]+LL( @1 ^+KK @1 _+JJ @1 `+II @1 a+HH  @1 b+GG @1 c+FFü @1 d+EEñ @”.1šD¶aé/@•œHðeWf; /names/ncb/targetinfo/ncb/moduleinfo/ncb/modulecommandlines/ncb/iinstdefs/ncb/auxnamemap/ncb/directorywatch/ncb/module/c:\libtasn1\lib\asn1.c/ncb/module/c:\program files\microsoft visual studio 8\vc\include\stddef.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\crtdefs.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\sal.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\vadefs.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\stdlib.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\limits.h/ncb/module/c:\libtasn1\lib\coding.c/ncb/module/c:\libtasn1\lib\parser_aux.h/ncb/module/c:\libtasn1\lib\element.h/ncb/module/c:\libtasn1\lib\decoding.c/ncb/module/c:\libtasn1\lib\structure.h/ncb/module/c:\libtasn1\lib\element.c/ncb/module/c:\libtasn1\lib\errors.c/ncb/module/c:\libtasn1\lib\errors.h/ncb/module/c:\libtasn1\lib\int.h/ncb/module/c:\libtasn1\lib\gstr.c/ncb/module/c:\libtasn1\lib\parser_aux.c/ncb/module/c:\libtasn1\lib\gstr.h/ncb/module/c:\libtasn1\lib\structure.c/ncb/module/c:\libtasn1\lib\windows\config.h/ncb/module/c:\libtasn1\lib\defines.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\string.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\stdio.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\swprintf.inl/ncb/module/c:\program files\microsoft visual studio 8\vc\include\ctype.h/ncb/module/c:\libtasn1\lib\libtasn1.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\sys\types.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\time.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\wtime.inl/ncb/module/c:\program files\microsoft visual studio 8\vc\include\time.inl/ncb/module/c:\libtasn1\lib\mem.h/ncb/targetmap/ncb/filenameimodmap/ncb/moduleinfofreelist/ncb/versioninfo/ncb/module/c:\libtasn1\tests\test_tree.c/ncb/module/c:\libtasn1\tests\test_tree_asn1_tab.c/ncb/module/c:\libtasn1\tests\test_parser.c/ncb/module/c:\libtasn1\src\asn1parser.c/ncb/module/c:\libtasn1\gl\strdup.h/ncb/module/c:\libtasn1\gl\getopt_.h/ncb/module/c:\libtasn1\gl\getopt_int.h/ncb/module/c:\libtasn1\gl\gettext.h/ncb/module/c:\libtasn1\gl\getopt.c/ncb/module/c:\libtasn1\gl\getopt1.c/ncb/module/c:\libtasn1\gl\getopt.h6^‘&ý¿¡®áLïH,Í£Aà *°0cé&N x$Uò8]- 9ö'n Î7É\4ð”!t83ˆ7'€(z2ã1u.Â%¿5r >ß"ª†/^ ©6• )# ?,Ì)9+1 e+DDí @1 f+CCç @1 g+BBàM @ÿÿi+ee°O @ÿÿj+¤O @ÿÿk+O @ÿÿm+KO @ÿÿp+ÇN @ÿÿu+¸N @ÿÿw+ÿÿ¢N @ÿÿx+__`N @ÿÿ{+UUN @ÿÿ+66 N @ÿÿ‚+44N @ÿÿƒ+--ùM @ÿÿ„+,,ºM @ÿÿ‡+­M @ÿÿˆ+M @ÿÿ‰+ŠM @ÿÿŠ+wM @ÿÿ‹+]M @ÿÿŒ+  WM @ÿÿ+  OM @ÿÿŽ+  EM @ÿÿ+  1M @ÿÿ+ M @ÿÿ‘+ÀÀòL @ÿÿ’+šš‹L @ÿÿ”+ÀÀL @ÿÿ•+¾¾vL @ÿÿ–+½½lL @ÿÿ—+ººcL @ÿÿ˜+¸¸\L @ÿÿ™+¶¶RL @ÿÿš+´´KL @ÿÿ›+±±CL @ÿÿœ+¯¯ÑK @ÿÿ +‘‘ÁK @ÿÿ¢+††§K @ÿÿ£+‚‚À4 @ÿÿ¤+ll·4 @ÿÿ¥+ee4 @ÿÿ¦+aa¡4 @ÿÿ§+ZZ4 @ÿÿ¨+XX4 @ÿÿ©+WW÷3 @ÿÿ«+  ï3 @ÿÿ­+®3 @ÿÿ¯+Ÿ3 @ÿÿ°+  ¶ @ÿÿ±+ @ÿÿ²+ÑÑá @ÿÿ³+ÐÐ @ÿÿ´+ÏÏË @ÿÿµ+ÁÁ» @ÿÿ¶+¼¼³ @ÿÿ·+´´ @ÿÿ¸+û @ÿÿ¹+ö @ÿÿº+ŽŽè @ÿÿ»+Ø @ÿÿ¼+ŒŒÐ @ÿÿ½+‹‹Ì @ÿÿ¾+ŠŠÆ @ÿÿ¿+‰‰Á @ÿÿÀ+ˆˆµ @ÿÿÁ+‡‡¬ @ÿÿÂ+††£ @ÿÿÃ+……Ÿ @ÿÿÄ+„„œ @ÿÿÅ+ƒƒ” @ÿÿÆ+‚‚ @ÿÿÇ+… @ÿÿÈ+€€ @ÿÿÉ+z @ÿÿÊ+~~r @ÿÿË+}}c @ÿÿÌ+||\ @ÿÿÍ+{{Y @ÿÿÎ+zzR @ÿÿÏ+yyJ @ÿÿÐ+xx> @ÿÿÑ+ww6 @ÿÿÒ+vv, @ÿÿÓ+uu( @ÿÿÔ+tt @ÿÿÕ+ss @ÿÿÖ+rr @ÿÿ×+qq  @ÿÿØ+pp @ÿÿÙ+ooü @ÿÿÚ+nnñ @ÿÿÛ+mmí @ÿÿÜ+llç @ÿÿÝ+kkÏ @ÿÿÞ+>>¹ @ÿÿß+99£ @ÿÿà+88 @ÿÿá+77{ @ÿÿâ+66e @ÿÿã+55S @ÿÿä+44= @ÿÿå+330 @ÿÿæ+00) @ÿÿç+-- @ÿÿè+** @ÿÿé+'' @ÿÿê+$$#$%23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW*7mQmlmƒmšmÎmÛmñmƒm,µH-nƒm7nFnTn*dn**nE*nEHln~n‰n›n»nÒnÒnÒnÒnÒn»n»n»n»néndnönû*üno*û·.o*nE*nE*9oAo*9oAoKoXoû·T.oÎmaoholopotoxo|o€o„oˆoŒoo”o˜oœo o¤o¨o¬o°o´o¸o¼oÀoÄoÈoÌoÐoÔoØoÜoàoäoèoìoðoÀlôoøoüopp#p7'p7,p3p77p=pBpHp7QpVp_pjpopspéqñqpõqñqr¼l CrÝrBpãrórss!s C2s7sJs\s_scs¥shoºl©s­s°s³s©szG¶sttt"tplt‰tŽt C•t¤t«t´t¨)¹tÇtÉtÌtÒtÁ+ C Cdn C C Cholopotoxo|o€o„oˆoŒoo”o˜oœo o¤o¨o¬o°o´o¸o¼oÀoÄoÈoÌoÐoÔoØoÜoàoäoèoìoðoÀlôoøo7âtðtþt uu&u2u C C@uIu C Ç4^lmo‹ Œ ÇNpñ PêGO¾ÁÃÇGR¢Ðb‹3 ¹9$vo9M Gum—Ç‚6ÎÊ899:;;<<>rsxyz„„……Š‹‘’——œœ±²·¸½½ÂÂÇÇÌÍÒ×Üáââçìíîïôùþ     %*++01277<<==BGHHMNNSXY^_``eejjoottyy~~ƒƒˆˆ’’——œ¡¡¦¦§§¨¨­­²²³³´´¹¹¾¾ÃÃÈÈÉÉÎÏÏÔÕÕÚÛÛÜÜáââçèèíîîïïôõõúÿ    !!&&++00116778=>L˜ª)FN-O„‡²‚Oåëï‚P’“¦¹‚V : B E \ ] d d m o o p ké#B\gnw‚¢¼Ø 8ñ.8kM óëM"ÑÖëNtuwÆÈÉèíîñrÈÏåìôM$?tQ˜¢§]è"Afm¡»×7ð-7]  ]4;]M äÝNpv&3› ž ¨ ² » ï  < = @ G k y ” &P2Zjkpq‡‰‰¬¬¯·DÜÝö÷÷÷ùùúüüþþ&34P]]_cËÌÎÏÏÏÑÑÒãêì¦TD S \ k 7  …wãæéëðtˆœŸ¦ ÑxxOõ3QÞøRÂCT? Z i o s v z | Ir. O „‡ˆ‘“¤§¨®°²³áÄÐá3aOÌÏJOx0 Ê3JN<<ABSÊS¦ÊT{ S4]_ÓV > d g m o p { } ~ <æç¼L0®°Ž³ÀÁFo. …W€4 M³_…NPQUW§ îO2wé#<Bgn‚¢¼Ø 8ñ.8÷‚‡‡§¨÷3 %(N˜ª)8FnyÐù÷K’¢7wMÌ Ù÷P°¶÷Q<âí +HN`¨´ÏÕÜâèïõ 7wR±·÷Rí ÷T— ™ À4X^kl@O¾ÁÂÇÇÈÀP¢¥¨ÀSœÀUí E )-©öø}‡›³Áؾ¾ÂÃZ[\™µ©PŸ´ÄÄ©Q/8rxб·ÌÒ×Üáçìíôùþ %*0BGMSX^œÎÔÚáçíôúÿ 6=©Uæ ²3  2N::AR²Nf2R…=É1›LÁÄN56Uš ð H W¨ dS*^ÚíÍþÿZÍUü S VTP¿üý¿3 L¡ªº»P:=?CQóö÷þÿMz{|}ˆ‰  ‘SMzU~1 z §H O O U U ` w £ © úK”•••––æëëëíîïÖÙÛúO3zQ™¡¦µ¾¿CL¯ãÃMCS,Lu/ ¬]†2 ¬TG \ _ k µ^‡2 žRÇHçBk. çQ ;…=§³ÉÛî1çVˆ pV: Y4®= YQz0 ÙÄÅÎÏ~‡„ФªÚàóù!_`ak˜ÙT—  • ÙV^ f "àá¢K~`˜§»Å"MØ·÷`Ï¢N]_æ"Rsz‹’²¸Íî 2Y_"V ‹LÀ ð”Y‚1 RrxŠ0ýSÔÚýT — › › ž Ÿ   ¡ ¢ £ ¤ ¨ © ª « ¬ ­ ­ ® ² ³ ´ µ ¶ · » » á   ; ” • Æ`‰3 FQZ[¾ ÆUø O o¤E d ¡ « õ L © /áãÄWfwñï3“ü¯P ÈÉ×ÙÜáoS%*ïSÎ/Túÿ/U ­ ¸NjÿrÈÏåì¸Q88Tÿ¸V = { } ~  ƒ „ ‰ Œ $Á9Á_ˆ2 A/UÁK†·L¾ÁP:=>BSîï§³SBGAU¡ « ­ ª «Ÿ ¡ © « ³ ê B ¨ j3£ © *47*L¥¦¨¨¶¸*MñÝê *N 6:;<=AACC*P [^ejÕ×ÙÛÛàjPÁÂÃÉÊ˪V < m o p q u v ‰ ‹ ³³´æ-c³@ɳP¡¤´½\R{0 œZƒ2 œõö47;@LW·|\9ÁÉ\L¶\T¬ÀÆe5&q‰ eOÚÞøåO13:=y´Ä¥P ”¶¶¶···ÀÁeR¬ŽðòéKŽNQgíñÎO2PBEHTáUš ó ú  J Q Y NU± —LÀÁÁWM é뜟 ×NptQWR§Tçí—T ? z z z { | ƒ ƒ ƒ „ „ àKŽ‘•àM!eR¼Þ  `NNPU PVijopvyy Qÿ$àVo } ' 445‰4CÉMpv‰OçéÉQ9:y‘ï 1¾ 8>IT Hq. RPy0 RŸp ð ó ú    H J Q W Y • — ¬ ­ ’ª¶ Ò3RL´­°°_c’M²¸ÒM)***,p&0RS¼½ PCERQ_`ÒT„ { 6!ñ ¥æ ~ ‡ ûf4 ; žD S T \ k u í ï ø E G O » ¸¹º¼0-Jp ;48»K‚{OÛÞâåçéî»O"%wÉ„§É@ o ­ D9=CfÄLH‘ÄO2ÄV > \ ^ ^ _ ` c f f g h m5­£ íCl m4>­M­RÌÒ×6Mv/ öeŽ4 6ž„ˆ¤¨¶ûýÿ h”¤!$)U„ŽNg‘twvL½ÁJs/ Ÿ[„2 _¡Ê_ÁÉŸ3 ZÎL¤§¨ßLwŸOõøßO "%&*VX[wyŸP“³ÀÛŸT @ i s v w { ~ „ ‡ ŸV; y ƒ „ (Kt/ èd4 h¡>ã ü þ   @ S U W ˆ èLc¨N egmtw®°³ÆÈÉè(O„‡Š‘¤§ª²óöùühUà ñDmˆ 1M1O¾ÁÏ1QLMNz‚ 1SþÚLfå&MÁùaÑZOÌÏZP…‡CtŒÏÜ_```aactˆ¿ËÝßìÚP¨ÄÅ£8lrÎ÷ýcS|0 £\…2 cL¸ãP¬¶#Q ,034#TôãUþ U ÌaŠ3 ÌLK‘ N4:;<=BDÌP£§ÅLQ\e~‰ŒŽ‘¡ÄËT_`¾¿Øßà   •K {‚¶·wxxy|~ÕLWP]N 446:;<=BD>Nw1 þAÉDDIINOOTTYY^^cchhmmssyzz‹‹‘’’²²¸¸ÍÍîîï   122YY__¾ 8>~ ‡ þ30v“ þ þK•þL›‡ÜËþP±¹»ÀÙ~T. „ ÏX1 4NX¿{  SôV V: k u v ùM,·ÎÏyUà ê í ùU W ÂNjmÿBP…tˆ«8´Lç4NK}[~Ž‘™¦µºÄËT¾Øà    MSùþæ36f4 =]efhm u { ƒ æKfM "fTêÏ=>ÏK †‡68<=eeeOM  w㦠ÏM8ØcŒ3 Ø3X4:ØKŽ‘–ØM Iëðñö÷ ¥ ØOsz‹’²¸Íî 2Y_¡ « ­ d n u | ƒ XQ–k089<>DINOTY^chmrsxyz„Š‹‘’—œ¢§¬±²·¸½ÂÇÌÍÒ×Üáâçìíîïôùþ    %*+0127<BGHMNSXY^_`ejoty~ƒˆ’—œ¡¦§¨­²³´¹¾ÃÈÎÏÔÕÚÜáâçèíïôõúÿ   !&+0678=>CHPVØQ9¡4OTYZuxy!O„‡‰‘•¤§©­®°²Ž³óöø¡SS 6=ŠM'ŠNPRRSSUüEn. / ü3%(),E3EŸß EM ÅR×®3 &™š›œÈ q ®Løî.Pbfs·4W]de7L §gޤ®°±²·ÉË·Tp § ¬ €ïð€Q«¯¹ €RÂǦ²¹iQ†eíéRì rT}1 òLš‰ÝÌrNOOòNu¤§îrP‘ÂÊÍÛAÛKŽ‘–¤Mýk¤OZ_g Gp. MÀü RO  ¢ £ ¤ ª ¬ ® ´ µ ¶ · q  T*? D D D E G L L L L M M M M N N O P R S T \ \ ] ^ _ d i k k k k l l l l m m m m s u Uà å è –7–N\]PMVŽÁÛV1 4ADE\`afmMúHçêìøQ49>@ÑKŒŽ‘¥QP…ÐÕEôû  ÑP¤´½ÈÑRÜáçìQSºM:QNuu~‚†ºRÒg4 ƒUà lLºìP¯°°lTõü õÈ8¢§¬·CHõ3u4AuO‘ÚÞàïøae¢Å089:;;<DIOTY^chmssyzz„……‹‹‘’’—œ²²·¸¸½ÂÇÍÍâîîï    +1227<==HNYY__`ejoty~ƒˆ’—¡¦§¨­²³´¹¾¾ÃÈÉÉÏÕÛÛÜâèîîïõ  !&+01178>VÝæê uT' ƒ „ ^Q‹ÞRáGM§K‚ˆ§§Léî'Sù000L¥¼ÁÂÃÉÊËå‘¡¢ÄÅtuwx††Ž°O®±²°SX^°TT u *L¡¥¥¦¦§N44™Qñ ™T? Y ] ] ^ ™Uã å è âNpbP޼âS¹ËÀÁ-KL±‰¯÷`ÏKOÌT¾à ËV> ] ` c { } } ~ Tè"Afm¡»×7ð-7TN==CDSÔS²TV  ‘ = 303:=ö M =N;;CR=V Qóö¤Ü  RDINTY^chmH ` w ~ ‡ Ÿ © ³ v „ $ DÿÿV3@ÿÿ,,K3@ÿÿ++>3@ÿÿ((a3 @ÿÿ 55E3 @ÿÿ ))+3 @ÿÿ '' @ÿÿ?EGESE?E\EgEN*nErE³EµE·E77w+G2:w3B3Ea3;a335;=j33355;;==k0I+3&'K3+{3CDd(CE´5l33355;;==Í35;=5E3)–,NE®5†+,î+,&3 >3()V3,n35†3D,n35†3Dw Dÿÿ::Ø Dÿÿ••¨. @ÿÿÓÓi.@ÿÿÌÌ×, @ÿÿ»Ó×,@ÿÿ¥¥F/@0¼¼g/@0½½‹/@0¾¾±/@0¿¿Ó/@0ÀÀñ/@ ÁÆ0@0 ÂÂK0@0 ÃÃ}0@0  Äİ0@0  ÅÅä0@0 ÆÆ1@0 ÇÇ)1@0 ÈÈL1@0ÉÉx1@0ÊÊ£1@0ËËÎ1@0ÌÌì1@0ÍÍ2@0ÎÎ32@0ÏÏR2@0ÐÐq2@0ÑÑ2@0ÒÒ©- @ÿÿ¶¶£- @ÿÿ¶¶}- @ÿÿ²¶µ2@0³³É2@0´´Ü2@0µµa- @ÿÿ¯¯Q- @ÿÿ¯¯/- @ÿÿ«¯ð2@0%­­ 3@0% ®® -@ÿÿ ©©- @ÿÿ!¨¨- @ÿÿ"§§î,@ÿÿ"¦¦» @ÿÿ#% @ÿÿ$ @ÿÿ%î @ÿÿ&þþæ @ÿÿ'ùù• @ÿÿ(ÝÝŽ @ÿÿ)ÜÜa @ÿÿ*ÑÑE @ÿÿ+¿¿+ @ÿÿ,¶¶5/ @ÿÿ.õõ/ @ÿÿ0êêþ. Dÿÿ1ääÏ. Dÿÿ2ÞÞ±- @ÿÿ3ÔÔk- @ÿÿ4··+ @ÿÿAŸŸ¡* @ÿÿLœœo, @ÿÿY˜˜>, @ÿÿe””?* @ÿÿqâ) @ÿÿ}) @ÿÿ‰ŠŠ8) @ÿÿ™‡‡ã( @ÿÿ§„„Ž( @ÿÿ´9( @ÿÿ¾~~£, @ÿÿÅ{{ä' @ÿÿÍxx‹' @ÿÿÚuu.' @ÿÿårrÎ& @ÿÿónnk& @ÿÿÿjj& @ÿÿ gg½% @ÿÿddj% @ÿÿ'aa% @ÿÿ5^^Ä$ @ÿÿB[[q$ @ÿÿLXX­+ @ÿÿRUU$ @ÿÿZRR}+ Dÿÿ[PPh+ @ÿÿ]OOT+ @ÿÿ_NN1+ @ÿÿaMMÒ* @ÿÿlBBs* @ÿÿu??* @ÿÿ<<¹) @ÿÿŠ99d) @ÿÿ•66) @ÿÿ¤33º( @ÿÿ±00e( @ÿÿ¼--( @ÿÿÅ**»' @ÿÿÌ''^' @ÿÿ×##' @ÿÿà  ž& @ÿÿì;& @ÿÿöè% @ÿÿ•% @ÿÿ B% @ÿÿï$ @ÿÿ(œ$ @ÿÿ3  I$ @ÿÿ<Û# @ÿÿCl# @ÿÿHèè># @ÿÿRØØã" @ÿÿZÈÈ®" @ÿÿc½½ˆ" @ÿÿp²²b" @ÿÿ{§§-" @ÿÿ„œœø! @ÿÿ‘‘‘Ã! @ÿÿœ††Ž! @ÿÿ¥{{Y! @ÿÿ¬ppë @ÿÿ±eeá @ÿÿ²^^Ù @ÿÿ³ZZÏ @ÿÿ´UU¹ @ÿÿµ==¥ @ÿÿ¶99† @ÿÿ·33u @ÿÿ¹++k @ÿÿº##N @ÿÿ»@ @ÿÿ¼0 @ÿÿ½ @ÿÿ¾  ö @ÿÿ¿Õ @ÿÿÀöö| @ÿÿÁÞÞN @ÿÿÂÓÓ3 @ÿÿÃÁÁ @ÿÿÄ··  @ÿÿű±È @ÿÿǧ§å @ÿÿÈ——· @ÿÿÉŒŒ @ÿÿÊ€ @ÿÿËzzN @ÿÿÍoo+ @ÿÿÎffð @ÿÿÏ``¤ @ÿÿÑPPh @ÿÿÓBBC @ÿÿÕ;; @ÿÿ×11Þ @ÿÿØ((Ë @ÿÿÙ$$· @ÿÿÚ!!— @ÿÿÛv @ÿÿÜ  i @ÿÿÝN @ÿÿÞùù4 Dÿÿßññ+ @ÿÿàéé" @ÿÿáßß @ÿÿâÕÕÓ @ÿÿãÎλ @ÿÿä¿¿¬ @ÿÿåµµ @ÿÿ磣— @ÿÿ颢g @ÿÿëžžv @ÿÿíÁ @ÿÿî{ @ÿÿïd @ÿÿð      !"&'÷)***&*9*Ô(D*N*N*T***N*N*N*‚*N*Š*›*²*²*È*Ù*ë*û*û*û* +%+>+M+\+y+™+¤+¬+**û*û*·+·+Á+È+Ñ+7é7777Ó+",,,6,F,U,^,c,k,r,z,,‰,,",,,6,F,U,^,c,k,r,z,Ø,x-„-",,,’-F,U,^,c,k,r,z,-x-„-",,,’-U,^,c,k,r,z,=.x-„-",,,6,’-Ë.U,^,c,k,Ü.x-„-",,,6, /(///7/U,^,>/x-„-",,,6, /(/U,^,c,k,‚/x-„-",,,6,U,^,c,k,r,z,,‰,Ô/Ü/ã/x-„-",,,6,U,^,c,k,r,z,,‰,.0x-„-",,,6,F,U,^,c,k,r,z,r0x-„-",,,6,U,^,c,k,¯0x-„-",,,U,^,ç0x-„-",,,6,U,^,Ó+",,,6,F,U,^,c,k,r,z,,‰,,",,,6,F,U,^,c,k,r,z,1x-„-",,,’-Ë.F,U,^,c,k,r,z,=.x-„-",,,6,’-Ë.U,^,c,k,Ü.x-„-",,,6, /(///7/U,^,>/x-„-",,,6, /(/U,^,c,k,‚/x-„-",,,6,U,^,c,k,r,z,,‰,Ô/Ü/ã/x-„-",,,6,U,^,c,k,r,z,,‰,.0x-„-",,,6,F,U,^,c,k,r,z,r0x-„-",,,6,U,^,c,k,»1x-",,,U,^,ç0x-„-",,,6,U,^,77ó17ó17ó12",,,U,^,c,k,r,z,,‰,d2",,,U,^,c,k,r,z,¿2x-„-",,,’-U,^,c,k,#3x-„-",,, /(///7/U,^,}3x-„-",,, /(/U,^,c,k,×3x-„-",,,U,^,c,k,r,z,,‰,Ô/Ü/A4x-„-",,,U,^,c,k,r,z,,‰,£4x-„-",,,U,^,c,k,r,z,5x-„-",,,U,^,c,k,S5x-„-",,,U,^,5",,,U,^,c,k,r,z,,‰,ÿ5",,,U,^,c,k,r,z,Y6x-„-",,,’-U,^,c,k,r,z,Â6x-„-",,,’-U,^,c,k,%7x-„-",,, /(///7/U,^,~7x-„-",,, /(/U,^,c,k,×7x-„-",,,U,^,c,k,r,z,,‰,Ô/Ü/@8x-„-",,,U,^,c,k,r,z,,‰,¡8x-„-",,,U,^,c,k,r,z,þ8x-„-",,,U,^,c,k,O9x-„-",,,U,^,˜9x-,,U,J;O;x-,,’-U,^,c,k,r,z,a<x-,,’-U,^,c,k,h=x-,, /(///7/U,^,é=x-,, /(/U,^,c,k,r,z,,‰,€>x-,, /(/U,^,c,k,r,z, ?x-,, /(/U,^,c,k,?x-,,U,^,c,k,r,z,,‰,Ô/Ü/$@x-,,U,^,c,k,r,z,,‰,°@x-,,U,^,c,k,r,z,1Ax-,,U,^,c,k,§Ax-,,U,^,BB#B+B@B7TBÑ+77jB777777777pBC C C C7CÂCËC7ÐCìC7ìCùCìC«DÆD CÌDàD77èD#B777ðD77èDEEEE!E5EEGLNSUY[`b./ab‡ˆ‘–˜ù349;>EGLNSUY[`b./ab‡ˆ‘–˜ù349;>EGLNSUY[`b./ab‡ˆ!€ƒG!€ƒG!€ƒG)333,ùùù.ÆÆÆ'''˜# èíïèíïèíïa ùUSVY\_behklopsvy|‚…ˆ‹Ž‘’•–™š aÏÑÏÑÏÑá ]^]^]^a-¯¯¯á.áááJ-4-4-4ÊOOOOOOJfffÓ!’ËÛÉßìø2HUa’ËÛÉßìø2HUa’ËÛÉßìø2HUaÓ ÅÈÊÎÅÈÊÎÅÈÊÎS"œœ¡§¬²·½Âúûüý679:fhjry€†“•—Ÿ¦­³º   1245deghŠ‹Žœ¡§¬²·½Âúûüý679:fhjry€†“•—Ÿ¦­³º   1245deghŠ‹Žœ¡§¬²·½Âúûüý679:fhjry€†“•—Ÿ¦­³º   1245deghŠ‹Ž< ííííííííííííEGLNSUY[`b)+.7:;@CDMPQY\]fijqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ {€‚†‹‘–˜§¬®²·¹Øßâã÷øùûüÿ   !#$-.0134?@BCßáäëíòôùûÿ !&(,.359;>EGLNSUY[`b)+.7:;@CDMPQY\]fijqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ {€‚†‹‘–˜§¬®²·¹Øßâã÷øùûüÿ   !#$-.0134?@BCßáäëíòôùûÿ !&(,.359;>EGLNSUY[`b)+.7:;@CDMPQY\]fijqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ .ÅÅÅîOOOîþžþžþžî,¦¨¦¨¦¨wލ7Møލ7Møލ7Mø÷ ,-8,-8,-8w moomoomooÀ „„„@ ©-¶¶¶²DGDGDG2 113113113² „„„$ N÷RN÷RN÷R.ÇÇÇ›.ÒÒÒ5••dµÊµÊµÊ¤ IKNPIKNPIKNPä' (öx(öx(öxd)666$.ÈÈÈÍ´­¯¶^hs~‰”ŸªµÀÍÝëëëël™žžÐý*W„±îWƒ”–ž¥¬°²´»½ÅÇÏÖÝáãåìîDGsv ­¯¶^hs~‰”ŸªµÀÍÝëëëël™žžÐý*W„±îWƒ”–ž¥¬°²´»½ÅÇÏÖÝáãåìîDGsv ­¯¶^hs~‰”ŸªµÀÍÝëëëël™žžÐý*W„±îWƒ”–ž¥¬°²´»½ÅÇÏÖÝáãåìîDGsv ¡£¡£¡£) 71Š71Š71Š.ÐÐÐVW]io{W]io{W]io{Ö#íïíïíïV.ËËË!¯pu{€†‹‘–œ¡§¬²·ÈÏØßö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†ÀÂÄÎ×äðý#)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ pu{€†‹‘–œ¡§¬²·ÈÏØßö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†ÀÂÄÎ×äðý#)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ pu{€†‹‘–œ¡§¬²·ÈÏØßö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†ÀÂÄÎ×äðý#)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ ?* =7=7=7.ÎÎΈ¨ø(çí¨ø(çí¨ø(çíˆlãåÑáÂÄÐÙæòÿ#+-9BO[hqx…Œ9=Alp’–šãåÑáÂÄÐÙæòÿ#+-9BO[hqx…Œ9=Alp’–šãåÑáÂÄÐÙæòÿ#+-9BO[hqx…Œ9=Alp’–šZvZvZvÈ £¥§£¥§£¥§ ˆ"²ü²ü²ü‘ èèêèèêèèê!ýejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíõö÷øùúûüýþÿ   '(*+-.0134679:<=NPRZahnu{}‡Ž•›¥¬²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†“•—Ÿ¦­³ºÀÂÄÎ×äðý#)+-7@MYfqx…Œö÷ùúüýÿ    "#%&()+,./1245789;<=?@ARSUVXY[\^_abdeghjklnopxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíõö÷øùúûüýþÿ   '(*+-.0134679:<=NPRZahnu{}‡Ž•›¥¬²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†“•—Ÿ¦­³ºÀÂÄÎ×äðý#)+-7@MYfqx…Œö÷ùúüýÿ    "#%&()+,./1245789;<=?@ARSUVXY[\^_abdeghjklnopxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíõö÷øùúûüýþÿ   '(*+-.0134679:<=NPRZahnu{}‡Ž•›¥¬²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†“•—Ÿ¦­³ºÀÂÄÎ×äðý#)+-7@MYfqx…Œö÷ùúüýÿ    "#%&()+,./1245789;<=?@ARSUVXY[\^_abdeghjklnopxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™š#ØÈÓØãþÿ<==ÀÂÄÅÒÛè #)+-.;DQqsxz…Œ79;==?AAjlnp’”––˜ššÈÓØãþÿ<==ÀÂÄÅÒÛè #)+-.;DQqsxz…Œ79;==?AAjlnp’”––˜ššÈÓØãþÿ<==ÀÂÄÅÒÛè #)+-.;DQqsxz…Œ79;==?AAjlnp’”––˜šš$    !#$'(*+-.0134679:<=?@BCNR{²¶ßã 9=fj“—ÀÄ)-’–ÃÇö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ     !#$'(*+-.0134679:<=?@BCNR{²¶ßã 9=fj“—ÀÄ)-’–ÃÇö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ     !#$'(*+-.0134679:<=?@BCNR{²¶ßã 9=fj“—ÀÄ)-’–ÃÇö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ Ñ,9=Alp’–š9=Alp’–š9=Alp’–š-¨®¨®¨®Q-¯¯¯º(000CD79;DPY`gt†”¤«½ÄËØêñø%2DKR_qxŒž¥¬¹ÍÖãü"6?Lepw~‹¤«ºÎÕÜë #&),/2589<=@ADGSVY\_behklopsvy|‚…ˆ‹Ž‘’•–™š 79;DPY`gt†”¤«½ÄËØêñø%2DKR_qxŒž¥¬¹ÍÖãü"6?Lepw~‹¤«ºÎÕÜë #&),/2589<=@ADGSVY\_behklopsvy|‚…ˆ‹Ž‘’•–™š 79;DPY`gt†”¤«½ÄËØêñø%2DKR_qxŒž¥¬¹ÍÖãü"6?Lepw~‹¤«ºÎÕÜë #&),/2589<=@ADGSVY\_behklopsvy|‚…ˆ‹Ž‘’•–™š Ã!†ø†ø†ø$\   '(*+-.0134679:<=Npw²ÔÛß .59[bfˆ“µ¼Àô%)]j‡Žö÷üýÿ   "%(+.147;?RX[^adgjnx{~„‡Š”˜   '(*+-.0134679:<=Npw²ÔÛß .59[bfˆ“µ¼Àô%)]j‡Žö÷üýÿ   "%(+.147;?RX[^adgjnx{~„‡Š”˜   '(*+-.0134679:<=Npw²ÔÛß .59[bfˆ“µ¼Àô%)]j‡Žö÷üýÿ   "%(+.147;?RX[^adgjnx{~„‡Š”˜Ã-¼Ä¼Ä¼ÄC.ÊÊÊl<¼ÆÛæ<¼ÆÛæ<¼ÆÛæ,$ÒâÑÚçó:CP\iÒâÑÚçó:CP\iÒâÑÚçó:CP\i¬ ±³µ±³µ±³µl#èèèuãããu ')+')+')+5! fq|‡’¨³¾ÉÙé5#´ÑÒÓáâãÂÅÐÑÒÙÚÛæçèòóôÿ #%+.9:;BCDOPQ[\]hijqsxz…‡ŒŽÑÒÓáâãÂÅÐÑÒÙÚÛæçèòóôÿ #%+.9:;BCDOPQ[\]hijqsxz…‡ŒŽÑÒÓáâãÂÅÐÑÒÙÚÛæçèòóôÿ #%+.9:;BCDOPQ[\]hijqsxz…‡ŒŽ5/ôõôõôõ^./././Þ ÛáçÛáçÛáçÞ!'(,ƒ„Ž–œ´'(,ƒ„Ž–œ´'(,ƒ„Ž–œ´13;o§ù13;o§ù13;o§ùžêìíñêìíñêìíñ"E‘–ù349;=ELSY`./ab‡ˆ‘–ù349;=ELSY`./ab‡ˆ‘–ù349;=ELSY`./ab‡ˆž&^'###ž+¨P\cj}‰—§®´ÀÇÎáíôû!(;GNUht{‚•¡¨¯ÂÒÛè +;DQsz” §®ÅÑØßP\cj}‰—§®´ÀÇÎáíôû!(;GNUht{‚•¡¨¯ÂÒÛè +;DQsz” §®ÅÑØßP\cj}‰—§®´ÀÇÎáíôû!(;GNUht{‚•¡¨¯ÂÒÛè +;DQsz” §®ÅÑØßçOOOgœžœžœžçÇÇǧ „ì„ì„ì'!ejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíííííõö÷øùúûüýþÿ     !!#$$'(*+-..0134679:<=?@@BCCNPR\chnu{}‰•›Ÿ¥§¬®²´¶ÀÇÌÒÙßáãíôù !&,39;=GNSY`fhjt{€†“•—¡¨­³ºÀÂÄÒÛäðý #)+-;DMfszŒ’”– §¬»ÃÅÇÑØÝìö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíííííõö÷øùúûüýþÿ     !!#$$'(*+-..0134679:<=?@@BCCNPR\chnu{}‰•›Ÿ¥§¬®²´¶ÀÇÌÒÙßáãíôù !&,39;=GNSY`fhjt{€†“•—¡¨­³ºÀÂÄÒÛäðý #)+-;DMfszŒ’”– §¬»ÃÅÇÑØÝìö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíííííõö÷øùúûüýþÿ     !!#$$'(*+-..0134679:<=?@@BCCNPR\chnu{}‰•›Ÿ¥§¬®²´¶ÀÇÌÒÙßáãíôù !&,39;=GNSY`fhjt{€†“•—¡¨­³ºÀÂÄÒÛäðý #)+-;DMfszŒ’”– §¬»ÃÅÇÑØÝìö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ° fv fv fv ð VX[`VX[`VX[`°ììì0    0!¼ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏÓØßãõö÷øùúûüýþÿ    !#$'(*+-.0134679:<=?@BCIJJKNPSZ\achjnppuww{}€‡‰Ž•—›žžžŸ ¥§¬®²´·¾ÀÅÇÌÎÒÔÔÙÛÛßáäëíòôùûÿ !&(,..3559;>EGLNSUY[[`bbfhkrty{€‚†ˆˆ“•˜Ÿ¡¦¨­¯³µµº¼¼ÀÂÅÎÒ×Ûäèðôôý #%%)+.7;@DMQY]]fjjqsxz…‡‡ŒŽŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏÓØßãõö÷øùúûüýþÿ    !#$'(*+-.0134679:<=?@BCIJJKNPSZ\achjnppuww{}€‡‰Ž•—›žžžŸ ¥§¬®²´·¾ÀÅÇÌÎÒÔÔÙÛÛßáäëíòôùûÿ !&(,..3559;>EGLNSUY[[`bbfhkrty{€‚†ˆˆ“•˜Ÿ¡¦¨­¯³µµº¼¼ÀÂÅÎÒ×Ûäèðôôý #%%)+.7;@DMQY]]fjjqsxz…‡‡ŒŽŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏÓØßãõö÷øùúûüýþÿ    !#$'(*+-.0134679:<=?@BCIJJKNPSZ\achjnppuww{}€‡‰Ž•—›žžžŸ ¥§¬®²´·¾ÀÅÇÌÎÒÔÔÙÛÛßáäëíòôùûÿ !&(,..3559;>EGLNSUY[[`bbfhkrty{€‚†ˆˆ“•˜Ÿ¡¦¨­¯³µµº¼¼ÀÂÅÎÒ×Ûäèðôôý #%%)+.7;@DMQY]]fjjqsxz…‡‡ŒŽŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ð-ÀÀÀÙ ZZZY!pöpöpö™-µµµ¢ ¢¢££¢¢££¢¢££" ÙÜßÙÜßÙÜßb"§û§û§ûâ) : 4: 4: 4 &&&ËÕ1+9= OOOË$$$K! itŠ• «¶ÁÎÞìË#íïíïíï‹' $Ãu$Ãu$Ãu”[ams…[ams…[ams…Ô"E½Âý9:“•—Ÿ¦­³º  45gh޽Âý9:“•—Ÿ¦­³º  45gh޽Âý9:“•—Ÿ¦­³º  45ghŽT+JNJNJN”.ÑÑÑýOOOOOO½% f df df d}+LPLPLP}-²²²ý-ÃÃÃÆOìOìOìOOOFT¨T¨T¨† žžžžžž† 237237237Æ ===F$Š  !$(+.147:==@C†”ž¤«6?Le#<=@AVo|•–™š  !$(+.147:==@C†”ž¤«6?Le#<=@AVo|•–™š  !$(+.147:==@C†”ž¤«6?Le#<=@AVo|•–™šF+IIJJKKMNOIIJJKKMNOIIJJKKMNO†-³³³†.ÏÏÏï$o, ?˜?˜?˜/-«««/.ÉÉÉo.ÍÍÍ8131313ø!‘ù‘ù‘ù8) 4.‡4.‡4.‡OOOÁ’’’ ¥§§¥§§¥§§'   A-­­­A/õ*'''ª¢!¢!¢!ªj% 9a9a9aª+¨WZ^a„‡‹Ž»¾ÂÅèëïòBEILorvyœŸ£¦ËÎÔ× 47=@nqux›ž¢¥ÌÏÓÖWZ^a„‡‹Ž»¾ÂÅèëïòBEILorvyœŸ£¦ËÎÔ× 47=@nqux›ž¢¥ÌÏÓÖWZ^a„‡‹Ž»¾ÂÅèëïòBEILorvyœŸ£¦ËÎÔ× 47=@nqux›ž¢¥ÌÏÓÖê+Wßÿ)Y…’²Ããÿ(?CF[nru˜œŸßÿ)Y…’²Ããÿ(?CF[nru˜œŸßÿ)Y…’²Ããÿ(?CF[nru˜œŸ3»Á»Á»Ás*???\lllÜ"W½ÂÄý9:“•˜Ÿ¡¦¨­¯³µº¼  45gh޽ÂÄý9:“•˜Ÿ¡¦¨­¯³µº¼  45gh޽ÂÄý9:“•˜Ÿ¡¦¨­¯³µº¼  45ghŽ#ËÌÕÛÜåœ$   å #•—™œc #•—™œc #•—™œc%OOO% ¥ 89BC89BC89BC%#ZËÌÕÛÜåÉÊÝßàêìíöøù23FHISUV_ablËÌÕÛÜåÉÊÝßàêìíöøù23FHISUV_ablËÌÕÛÜåÉÊÝßàêìíöøù23FHISUV_able(---å+ž ž ž NW]io{W]io{W]io{Î’ù’ù’ùNÆÈÆÈÆÈN õ÷ùõ÷ùõ÷ùN kmokmokmoNÍÓÍÓÍÓŽÜÜÜN Ž!{÷{÷{÷Î& )n)n)nŽ( .ÿ(.ÿ(.ÿ(*<<<Ž+¼NY`gptw²½ÄËÔØÛßêñø %.259DKR[_bfqxˆŒ“ž¥¬µ¹¼ÀÍÖãü’¤«µº¾ÃÎÕÜæëïö÷üýÿ    %&()+,./124578CDFGRSXY[\^_abdeghjkrsuvxy~‚„…‡ˆŠ‹Ž‘œŸ NY`gptw²½ÄËÔØÛßêñø %.259DKR[_bfqxˆŒ“ž¥¬µ¹¼ÀÍÖãü’¤«µº¾ÃÎÕÜæëïö÷üýÿ    %&()+,./124578CDFGRSXY[\^_abdeghjkrsuvxy~‚„…‡ˆŠ‹Ž‘œŸ NY`gptw²½ÄËÔØÛßêñø %.259DKR[_bfqxˆŒ“ž¥¬µ¹¼ÀÍÖãü’¤«µº¾ÃÎÕÜæëïö÷üýÿ    %&()+,./124578CDFGRSXY[\^_abdeghjkrsuvxy~‚„…‡ˆŠ‹Ž‘œŸ — BHNBHNBHN—¢£¢£¢£— %  ^ ^ ^×, ¥§»¥§»¥§»5::   „„„ -©Ò©Ò©ÒI$I-®®®'''R! lw‚˜£®¹ÄÓãïÒ*BBB{{@OOOVhz@OOOVhz@OOOVhz;RRR» »½¿»½¿»½¿» ììì»# ëííïëííïëííï;&»''''DR:R•:R•Ä ¼Ûþ¼Ûþ¼ÛþÄJ‰”bFôJ‰”bFôJ‰”bFôÄ#íïíïíïÄ$ ß[ ß[ ß[-"œúœúœú-#ÌÜÊàíù3IVbÌÜÊàíù3IVbÌÜÊàíù3IVb­+ {úU{úU{úUö)++õõ)++õõ)++õõv žèžèžèv       ¶ „„„öö-¶.ÛÛÛíííßOOOߤ¤¤(OOO(¨¨¨h @BD@BD@BD¨# ëííïëííïëííïè%h+KOKOKO¨.ÓÓÓ(/ïðïðïðq½ÕÜç½ÕÜç½ÕÜç± 999ñ!†‹‘–˜²·¹øùü#$0134BC !&(,.359;>EGLNSUY[`bÃÅÈÏÑÖØÝßãæìï+,./FG^_abuv„…‡ˆŸ †‹‘–˜²·¹øùü#$0134BC !&(,.359;>EGLNSUY[`bÃÅÈÏÑÖØÝßãæìï+,./FG^_abuv„…‡ˆŸ †‹‘–˜²·¹øùü#$0134BC !&(,.359;>EGLNSUY[`bÃÅÈÏÑÖØÝßãæìï+,./FG^_abuv„…‡ˆŸ ±# ëííïëííïëííïq$ ²ýX ²ýX ²ýX1+IMIMIM±-ºÔºÔºÔOOOÔÕÔÕÔÕµ·µ·µ·/èêèêèê#'''#§©«¯¿Èѧ©«¯¿Èѧ©«¯¿ÈÑc!ÕåÝêöFS_lùÕåÝêöFS_lùÕåÝêöFS_lùã"ÈþÈþÈþã( 1+„1+„1+„£,"{"{"{£-¶À¶À¶À WWWÌ-½½½•ÝÝÝÕõöõöõö•%~Y_kq}ƒY_kq}ƒY_kq}ƒ>#ØÿØÿØÿ>, ;”;”;”þ.âäâäâä‡AAA‡!puw{€‚†‹‘–˜œ¡£§¬®²·¹ÈÏÒÓØßãö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´·¾ÀÅÇÌÎÒÔÙÛßáäëíòôùûÿ !&(,.359;>EGLNSUY[`bfhkrty{€‚†ˆÀÂÅÎÑÒ×ÚÛäçèðóôý #%)+.7;@DMQY]fjqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ puw{€‚†‹‘–˜œ¡£§¬®²·¹ÈÏÒÓØßãö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´·¾ÀÅÇÌÎÒÔÙÛßáäëíòôùûÿ !&(,.359;>EGLNSUY[`bfhkrty{€‚†ˆÀÂÅÎÑÒ×ÚÛäçèðóôý #%)+.7;@DMQY]fjqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ puw{€‚†‹‘–˜œ¡£§¬®²·¹ÈÏÒÓØßãö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´·¾ÀÅÇÌÎÒÔÙÛßáäëíòôùûÿ !&(,.359;>EGLNSUY[`bfhkrty{€‚†ˆÀÂÅÎÑÒ×ÚÛäçèðóôý #%)+.7;@DMQY]fjqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ OOO010101& “ g“ g“ g(***-´´´/çççùOOOù¤¤¤ù+TÀô"%)]jpw~‡‹Ž79jlnp’Àô"%)]jpw~‡‹Ž79jlnp’Àô"%)]jpw~‡‹Ž79jlnp’ÂðððB%+ åçéåçéåçé+fff« „„„+¶¶¶4 +5>+5>+5>4ÄÊÄÊÄÊ4 íïñíïñíïñ´!È{€†‹‘–§¬²·Øß÷øùûüÿ   !#$-.0134?@BCßáãëòùÿ &,39;=ELSY`)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ {€†‹‘–§¬²·Øß÷øùûüÿ   !#$-.0134?@BCßáãëòùÿ &,39;=ELSY`)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ {€†‹‘–§¬²·Øß÷øùûüÿ   !#$-.0134?@BCßáãëòùÿ &,39;=ELSY`)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ '''!Aejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏØßèíïõö÷øùúûüýþÿ      !!#$$'((*++-..0113446779::<==?@@BCCNPRSZ\achjnu{}€†‡‰Ž”•—›ž¤¥§«¬®²´¶·¾ÀÅÇÌÎÒÙßáãäëíòôùûÿ !&(,39;=>EGLNSUY`fhjkrty{€‚†“•—˜Ÿ¡¦¨­¯³ºÀÎ×äðý)67?@LMYef’”–—ž ¥§¬®²»ÃÅÇÈÏÑÖØÝßãìö÷ùúüýÿ    "##%&()+,./124578;<<?@@CDFGRSUVVXY[\^_abdeghjknoorsuvxy{||~‚„…‡ˆŠ‹Ž‘”••˜™™œŸ ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏØßèíïõö÷øùúûüýþÿ      !!#$$'((*++-..0113446779::<==?@@BCCNPRSZ\achjnu{}€†‡‰Ž”•—›ž¤¥§«¬®²´¶·¾ÀÅÇÌÎÒÙßáãäëíòôùûÿ !&(,39;=>EGLNSUY`fhjkrty{€‚†“•—˜Ÿ¡¦¨­¯³ºÀÎ×äðý)67?@LMYef’”–—ž ¥§¬®²»ÃÅÇÈÏÑÖØÝßãìö÷ùúüýÿ    "##%&()+,./124578;<<?@@CDFGRSUVVXY[\^_abdeghjknoorsuvxy{||~‚„…‡ˆŠ‹Ž‘”••˜™™œŸ ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏØßèíïõö÷øùúûüýþÿ      !!#$$'((*++-..0113446779::<==?@@BCCNPRSZ\achjnu{}€†‡‰Ž”•—›ž¤¥§«¬®²´¶·¾ÀÅÇÌÎÒÙßáãäëíòôùûÿ !&(,39;=>EGLNSUY`fhjkrty{€‚†“•—˜Ÿ¡¦¨­¯³ºÀÎ×äðý)67?@LMYef’”–—ž ¥§¬®²»ÃÅÇÈÏÑÖØÝßãìö÷ùúüýÿ    "##%&()+,./124578;<<?@@CDFGRSUVVXY[\^_abdeghjknoorsuvxy{||~‚„…‡ˆŠ‹Ž‘”••˜™™œŸ # ëííïëííïëííïf444æùûùûùûæ-¿¿¿ÏOOOÏMMMÏ &QSUju€‹–¡¬·ÂÏßíPZahnu}‡Ž•›¥¬´¾ÅÌÒÙáëòùÿ&,3;ELSY`hry€†•Ÿ¦­³ºÂÎ×äðý#+7@MYfqx…Œ”ž¥¬²»ÅÏÖÝãìQSUju€‹–¡¬·ÂÏßíPZahnu}‡Ž•›¥¬´¾ÅÌÒÙáëòùÿ&,3;ELSY`hry€†•Ÿ¦­³ºÂÎ×äðý#+7@MYfqx…Œ”ž¥¬²»ÅÏÖÝãìQSUju€‹–¡¬·ÂÏßíPZahnu}‡Ž•›¥¬´¾ÅÌÒÙáëòùÿ&,3;ELSY`hry€†•Ÿ¦­³ºÂÎ×äðý#+7@MYfqx…Œ”ž¥¬²»ÅÏÖÝãìÏ.ÜÞÜÞÜÞØOOOOOOXáçáçáçØ-¾¾¾!OOO¡* @Cœ@Cœ@Cœ «±«±«± ,<´µ¶¶¶½¾¿¿¿åæçççîïððð´µ¶¶¶½¾¿¿¿åæçççîïððð´µ¶¶¶½¾¿¿¿åæçççîïððð“xxx    |ããã|ÛÞÛÞÛÞÅ „„„E½¿½¿½¿E!ähjlsuw~€‚‰‹”–˜Ÿ¡£ª¬®µ·¹ÀÂÄÍÏÓÝßãlnp™›žžÐÒÔýÿ*,.WY[„†ˆ±³µîðôWY]ƒ…‡°²µáãæhjlsuw~€‚‰‹”–˜Ÿ¡£ª¬®µ·¹ÀÂÄÍÏÓÝßãlnp™›žžÐÒÔýÿ*,.WY[„†ˆ±³µîðôWY]ƒ…‡°²µáãæhjlsuw~€‚‰‹”–˜Ÿ¡£ª¬®µ·¹ÀÂÄÍÏÓÝßãlnp™›žžÐÒÔýÿ*,.WY[„†ˆ±³µîðôWY]ƒ…‡°²µáãæ.OOO®í®"½ý½ý½ý.' !’r!’r!’r·"ŠŒŽô"ŠŒŽô"ŠŒŽô·!$!$!$·ìììËËË€ uxzuxzuxz€ ++++ CFŸCFŸCFŸiîöþâRîöþâRîöþâRi ýÿýÿýÿé!φ‹‘–²·øùü#$0134BC &,39;=ELSY`ÃÅÇÏÖÝãì+,./FG^_abuv„…‡ˆŸ †‹‘–²·øùü#$0134BC &,39;=ELSY`ÃÅÇÏÖÝãì+,./FG^_abuv„…‡ˆŸ †‹‘–²·øùü#$0134BC &,39;=ELSY`ÃÅÇÏÖÝãì+,./FG^_abuv„…‡ˆŸ i.ÌÌÌÌÌÌ[9;;BDDKNPP9;;BDDKNPP9;;BDDKNPP["Æœ¡£§¬®²·¹½ÂÄúûüý679:fhkrty{€‚†ˆ“•˜Ÿ¡¦¨­¯³µº¼   1245deghŠ‹Žœ¡£§¬®²·¹½ÂÄúûüý679:fhkrty{€‚†ˆ“•˜Ÿ¡¦¨­¯³µº¼   1245deghŠ‹Žœ¡£§¬®²·¹½ÂÄúûüý679:fhkrty{€‚†ˆ“•˜Ÿ¡¦¨­¯³µº¼   1245deghŠ‹ŽÛ#Û+ žŸžŸžŸi @ÿÿÐÐ[ @ÿÿÉÉI @ÿÿÅÅ4 @ÿÿÄÄ) @ÿÿ Ãà Dÿÿ  @ÿÿ ÁÁ @ÿÿ ÀÀù @ÿÿ¿¿ë @ÿÿ¾¾à @ÿÿ½½Ë Dÿÿ¼¼C @ÿÿ»»¸ @ÿÿºº˜ @ÿÿ®®x @ÿÿ­­_ @ÿÿ¬¬@ @ÿÿ««! @ÿÿªª  @ÿÿ©©ç @ÿÿ ¨¨Å @ÿÿ"§§£ @ÿÿ%¦¦ @ÿÿ(¥¥d @ÿÿ*¤¤G @ÿÿ,££1 @ÿÿ-¢¢ @ÿÿ/¡¡õ @ÿÿ1  Þ @ÿÿ2ŸŸÁ @ÿÿ4žž¤ @ÿÿ6Ž @ÿÿ7œœn @ÿÿ9››N @ÿÿ;šš. @ÿÿ>™™ @ÿÿA˜˜ó @ÿÿC——Ø @ÿÿE––Ä @ÿÿF••­ @ÿÿH””– @ÿÿJ““z @ÿÿL’’^ @ÿÿN‘‘I @ÿÿO. @ÿÿQ @ÿÿSŽŽÿ @ÿÿTá @ÿÿVŒŒÃ @ÿÿX‹‹¥ @ÿÿ[ŠŠ‡ @ÿÿ^‰‰n @ÿÿ`ˆˆU @ÿÿb‡‡C @ÿÿc††' @ÿÿe……  @ÿÿg„„ï @ÿÿjƒƒÓ @ÿÿm‚‚¼ @ÿÿo¥ @ÿÿq€€“ @ÿÿrƒ @ÿÿs~~p @ÿÿu}}] @ÿÿw||A @ÿÿy{{% @ÿÿ{zz @ÿÿ|yyõ @ÿÿ~xxÚ @ÿÿ€wwÆ @ÿÿvv¨ @ÿÿƒuuŠ @ÿÿ…ttl @ÿÿˆssN @ÿÿ‹rr5 @ÿÿqq @ÿÿpp  @ÿÿooð @ÿÿ’nnÖ @ÿÿ”mmà @ÿÿ•llª @ÿÿ—kk‘ @ÿÿ™jj @ÿÿšiic @ÿÿœhhG @ÿÿžgg+ @ÿÿ¡ff @ÿÿ¤eeø @ÿÿ¦ddá @ÿÿ¨ccÑ @ÿÿ©bb¾ @ÿÿ«aa« @ÿÿ­``“ @ÿÿ¯__{ @ÿÿ±^^j @ÿÿ²]]S @ÿÿ´\\< @ÿÿ¶[[" @ÿÿ¸YY @ÿÿºXXî @ÿÿ½WWÔ @ÿÿÀVV¿ @ÿÿÂUUª @ÿÿÄTTš @ÿÿÅSSŒ @ÿÿÆRRv @ÿÿÈQQ` @ÿÿÊPPQ @ÿÿËOO< @ÿÿÍNN' @ÿÿÏMM @ÿÿÐLL @ÿÿÒKKé @ÿÿÔJJÑ @ÿÿ×II¹ @ÿÿÚHH¦ @ÿÿÜGG“ @ÿÿÞFF‡ @ÿÿßEEx @ÿÿáDDi @ÿÿãCCS @ÿÿåBB= @ÿÿçAA. @ÿÿè@@ @ÿÿê?? @ÿÿì==ö @ÿÿí<<Þ @ÿÿï;;Æ @ÿÿñ::® @ÿÿô99– @ÿÿ÷88ƒ @ÿÿù77p @ÿÿû66d @ÿÿü55P @ÿÿþ44< @ÿÿ33$ @ÿÿ22 @ÿÿ11ô @ÿÿ00Ü @ÿÿ //É @ÿÿ ..¶ @ÿÿ--  @ÿÿ,,Š @ÿÿ++t @ÿÿ**^ @ÿÿ))M @ÿÿ((< @ÿÿ''2 @ÿÿ&& @ÿÿ%% @ÿÿ!$$ @ÿÿ"##î @ÿÿ$""Ü @ÿÿ&!!Ñ @ÿÿ'  Á @ÿÿ)± @ÿÿ+¨ @ÿÿ,› @ÿÿ.Ž @ÿÿ0| @ÿÿ2j @ÿÿ4_ @ÿÿ5N @ÿÿ7= @ÿÿ93 @ÿÿ: @ÿÿ< @ÿÿ>÷ @ÿÿAã @ÿÿDÔ @ÿÿFÅ @ÿÿH½ @ÿÿI­ @ÿÿK   @ÿÿM   @ÿÿN  ‡ @ÿÿO  s @ÿÿQ  _ @ÿÿSK @ÿÿV7 @ÿÿY( @ÿÿ[ @ÿÿ] @ÿÿ^ @ÿÿ_ó @ÿÿaá @ÿÿcÏ @ÿÿfÿÿ¶ @ÿÿiþþ© @ÿÿkýýœ @ÿÿmüü– @ÿÿnûû‡ @ÿÿpúúx @ÿÿrùùp @ÿÿsøøb @ÿÿu÷÷T @ÿÿwöö< @ÿÿxõõ0 @ÿÿzôô$ @ÿÿ|óó @ÿÿ}òò @ÿÿññ  @ÿÿððE @ÿÿƒãã! @ÿÿ…ââ Dÿÿ†ááù Dÿÿ‡ààÓ Dÿÿˆßß¹ @ÿÿŠÞÞ¨ Dÿÿ‹ÝÝ— DÿÿŒÜÜ @ÿÿŽÛÛm DÿÿÚÚ] @ÿÿ‘ÙÙ Dÿÿ’ØØû Dÿÿ“××ð @ÿÿ•ÖÖá @ÿÿ—ÕÕÚ Dÿÿ˜ÔÔÔ Dÿÿ™ÓÓÌ DÿÿšÒÒº @ÿÿœÑѨ @ÿÿžÐЛ @ÿÿ Ïω @ÿÿ¢ÎÎr @ÿÿ¤ÍÍ^ @ÿÿ¦ÌÌQ Dÿÿ§ËËF Dÿÿ¨ÊÊ> Dÿÿ©ÉÉ. DÿÿªÈÈ  Dÿÿ«ÇÇ Dÿÿ¬ÆÆ  Dÿÿ­ÅÅÿ Dÿÿ®ÄÄø Dÿÿ¯ÃÃÁ @ÿÿ°ßß³ Dÿÿ±ÛÛ78=Qmvm•ª7³ÄÕéï7*8>_d_…›_û_[°_ë_&_dk_d©_ß_@___~’_Ñ_º_ó_, _dh _d¤ _Ø _ 5 _e _• _² _Ï á _= _™ ê _! _X _d’ _dÌ _þ _0 W _Œ _Á _dù _d1_a_‘Áæ__>_[_xŠ_æ_B“__m_dÝ_dM_µ_z_•_°À_û_6’_Ö__da_d¨_ç_&Z_•_Ð_Ð_é÷_÷_O_p_‘_dó_dU_¬_P§_§_¾Ê_Ê_C_b__d½_dù_._c—_ý_c_z_‘c__ã_O_€_d´_dè__@a_Ž_»_í__dT_da_Ž_‰_¸_ç_d _dK _u _Ÿ ¾ _Ò _æ ï _!_E!e!_Ž!_·!Õ!_û!_!"_4"_G"O"_‘"_Ó" #_%#_@#_dƒ#_dÆ#_å#_$,$_S$_z$´$Õ$_%_1%_db%_d“%_Ò%_&\&Ž&_§&_À&_dî&_d,$_S$_'B'_R'_b'g'_Ž'_µ'Ñ'_ò'_(:(_Z(_7m7m7777ª777é7787778787777_7_7_7_7_7z(777777777(7ÿ‡ú‡  ‡ EOb~Ggš‡‰G£ª­  P 4y¹¾ÞÃùÀàɹ HJe‚ù¿Â»kÝÔk77Ìë ‡¹¹ÕÖÙººÎÎÐë¿À«`“+f™ë¾t *0ô 04Ä]¹Ùº  ]|¦ GIdÏÿ*e˜Ø– ˜®áÕ!²âÄá+ácjm–áŒ!ªÊ¾¾ÞÃÊ +1 ovy¢Št§ÙÓ¿ßÈS B“ FHMNPQc€S\“_“Ó‚Ž¡< ²²··âãÄÄÅÅ<õ| < '-3< 3<N<[¼E·ãÅ Å 6ŧ.Èî "® 9. @îWYsŠnˆ’..™n›7 ÷ 9 #@«©ýÿ(i CEF`|é Jg„)ÃiÌÎÐr @ÍóþCDHRVV2 &›QÏ› [ÇÉ$óöù$ 2d 5<@¤d¤«® ðûü CD M (.4Öߣáûüý    EFGLRiœñý –û&– 8Öm–“ÿ ÄðñCDR¿UWqˆiÿˆ÷›ØiÈ<þþÿÿ))**//008899HHIIVVVWWWeeffrrss‚‚ƒƒ‰‰ŠŠ˜˜™™¥¥¦¦Xt‹Q,Ë‘»»Û¿¿Ñ  Ñ IKfƒQOÑbl•‘jº_ÑñDUUz’CGõö÷  !"-./01234<<==>>LMNSSZZ[[\\ijkvvwwxxŽŽœž©©ªª««»ƒ 7?BÃlƒ~C†Ã‹Àls¦5qx{¤õxõ Þ÷Í^7Ì»^ )/Þ ;^‘ÞŸ'M'…ç¨ð‡Ö0ô÷úpøp 6=>Aðnp}  ?LÂb÷"YuŒËßK  : „˼Ô5pÓòòóôõö÷ !"<=>RSTUVWZ[\opqrstuvwxŽœ©ª«½TöÔ 7ÔVXr‰½ 5= = AF+ÊÆ :Ævïƒø ýxùx DGa}ødkn—x­¸ºÁÞßãä¿»Û¿Á "%Kh…A{Áž¥j ªTV[\^_p‡j]ªk³Ûó ,s  3 ó—ž¡œüþ'Ü !Ü /pwz£%z¥€¥ŠN Ž Nr¥˜NšŽœÁ—¼ÜÀ £Ç  ,2`PའR Å &'()*+,56789:;`abcdefghiooppqqrrssttuu|}~€‚ƒ„…†‡ˆ‰Š‹Œ“”•–—˜™š›œœœ¢£¤¥¦§¨‰GÎôÿIWWÉ .I ©IÅûRš›× &'()*+,56789:;`abcdefghooppqqrrssttuu|}~€‚ƒ„…†‡ˆ‰Š‹Œ“”•–—˜™š›œœœ¢£¤¥¦§¨{^„C@@GGQQXX__ÍÎÏÐÑððññóóôôöö÷÷ùùúúüüýýþþÿÿ      !!""$$%%''(())**++,,--..//001122334466778899::;;==>>??AABBCCDDFFGGHHIIJJJKKKMMNNPPQQTTTUUUVVWWXXXYYY[[\\^^__``aaccddeeffgghhjjkkmmnnppqqrrssttuuwwxxzz{{||}}€€‚‚ƒƒ„„……‡‡ˆˆ‰‰ŠŠ‹‹ŒŒŽŽ‘‘’’““””––——˜˜™™šš››žž  ¡¡££¤¤¥¥¦¦§§¨¨ªª««­­®® =>Ä•ŸmºÚ¾­  ­”ö¶þ)¶ -ö <vQòóôõø_  ;_  %_¬è 7@GQX_²·¹»¾¨XÐðCTT¨½ÝÁ( ¨  #¨u¨± !$1¢©¬Údw‡Ôûüýþÿ       -./01234<=>CCCDDDEFGHILLMNRSTUVWZ[\`abcdefghiijkopqrstuvwxŽœœœž©ª«šSZÚwã 8ch›£¦ÌWi£ÒòCCDDEFGHILLMNRRSSTTUUVVWWZZ[[\\`abcdefghiijkooppqqrrssttuuvvwwxxŽŽœœœœž©©ªª«« $ 1ŒRSTUZ]o†ÆòU‡Ž‘>*Éòûüý    EFGLRRiœ¾a”ˆ @ÿÿ<<N @ÿÿ33F @ÿÿhh: @ÿÿgg, @ÿÿ ffR @ÿÿ ddî @ÿÿSSà @ÿÿRR @ÿÿBBX @ÿÿ>>4 @ÿÿ55# @ÿÿ))Á @ÿÿ @ÿÿÔ(Û(î())):)<))n)p)¨)ª):))º):)Ç)n)77ï)õ)76w (•G0÷Rddd°y BD\]fnoq‹¹Gji9G¹HIIâMORdfgg‰‹ŒŒk"Al‘ ›BBDD\\\]]fffnnnoqqq‹‹‹ë)MMNOOS\\^^_``ffgghhnnqqtttww~~‚ƒƒ‹‹ŒŒ4/5´Bu:B]dd‰‰ö~~F(bΖ.)N13O®BîOS_tþSF`hwƒÏ IIOORRSS^^^__ggggttttu€€€‚ŒŒŒŒX\mn|~_ddˆ(((X8>ˆ:<XYZfhmqw|ƒ‹VÁÑKMM*Y^:^gtŒ #Ó#')+3ÃIR\^nqtu#Z`c–|:,\fnq~‹$ Dÿÿ"5 Dÿÿ½H@ÿÿ99¯H@ÿÿ77ªH@ÿÿ 66£H@ÿÿ55žH@ÿÿ44™H@ÿÿ33”H@ÿÿ22H@ÿÿ%11ŠH@ÿÿ+00fH@ÿÿ.EH@ÿÿ22H@ÿÿ5ÄH @<ÄG @ÿÿ1AÄG@ÿÿLÒG@ÿÿS  ¸G@ÿÿX  úH @]  ªG @ÿÿ1_  ªG@ÿÿe  ŸG@ÿÿi  –G@ÿÿlmG@ÿÿsI @z`G @ÿÿ1|`G@ÿÿ„UG@ÿÿ‰úú1G@ÿÿŽïï#I @•íí G @ÿÿ1šíí G@ÿÿ¥èìG@ÿÿ¬ççG@ÿÿ±ååXI @$¶ääßF @ÿÿ1¸ääßF@ÿÿ¾ãã×F@ÿÿÂááÑF@ÿÿÆßßÉF@ÿÿÊÝÝÃF@ÿÿÎÛÛ¹F@ÿÿÒÚÚ¦F@ÿÿÕÙÙ{F@ÿÿØÒÒSF@ÿÿß··lI @/æ¶¶1F @ÿÿ1è¶¶1F@ÿÿð´µ*F@ÿÿô³³F@ÿÿø²²F@ÿÿý±±F@ÿÿ°°ýE@ÿÿ¯¯õE@ÿÿ ®®ìE@ÿÿ­­ÜE@ÿÿ¬¬ÖE@ÿÿªªI @;©©ÎE @ÿÿ1©©ÎE@ÿÿ%¨¨ÈE@ÿÿ+§§ŽI @?2¦¦¶E @ÿÿ14¦¦¶E@ÿÿ<¥¥°E@ÿÿB¤¤I @CI££xE @ÿÿ1K ££xE@ÿÿS ¢¢^E@ÿÿX œœ3E@ÿÿ^ ‰‰(E@ÿÿc ˆˆE@ÿÿi ‡‡E@ÿÿn ††E@ÿÿr ……E@ÿÿu „„÷D@ÿÿz ƒƒìD@ÿÿ€ ‚‚äD@ÿÿ… ÐD@ÿÿ‹ €€ÈD@ÿÿ }}ÂD@ÿÿ’ ||ºD@ÿÿ– {{´D@ÿÿ™ zz¬D@ÿÿ yy¦D@ÿÿ  xxD@ÿÿ£ vv>D@ÿÿ¨ ss¬I @Y­ rrRD @ÿÿ1¯ rrRD@ÿÿµ qqID@ÿÿ¸ pp3D@ÿÿ¾ oo+D@ÿÿà nn!D@ÿÿÉ mmD@ÿÿÎ llD@ÿÿÓ kk D@ÿÿ× jjD@ÿÿÜ ii¾I @dá hhùC @ÿÿ1ã hhùC@ÿÿé ggóC@ÿÿî ffÎI @hó eeëC @ÿÿ1õ eeëC@ÿÿû ddåC@ÿÿ ccÝI @l bbÝC @ÿÿ1 bbÝC@ÿÿ  aa³C@ÿÿ ZZ›C@ÿÿ YY‰C@ÿÿ  XXxC@ÿÿ% WWYC@ÿÿ* VV>C@ÿÿ. UU0C@ÿÿ1 TT&C@ÿÿ6 SSC@ÿÿ: RRf4@ÿÿ= QQÇ4@ÿÿ@ PPÿB@ÿÿD OOÛB@ÿÿJ 44ìI @|Q 33ÍB @ÿÿ1S33ÍB@ÿÿ[22ÄB@ÿÿ`11J @€f00˜B @ÿÿ1h00˜B@ÿÿo//fB@ÿÿv..KB@ÿÿ|,,rB@ÿÿ**TB@ÿÿ…))DB@ÿÿŠ((J @ˆ'';B @ÿÿ1‘'';B@ÿÿ—&&+B@ÿÿš$$ B@ÿÿ !!B@ÿÿ¥  úA@ÿÿ«óA@ÿÿ°éA@ÿÿµâA@ÿÿ¹ÖA@ÿÿ¼ÆA@ÿÿ¿¡A@ÿÿÁ•A@ÿÿÇ#J @–·A @ÿÿ1ЇA@ÿÿØ~A@ÿÿÝ8J @šã  8A @ÿÿ1å  8A@ÿÿì  .A@ÿÿò   A@ÿÿ÷  ü@@ÿÿü  ñ@@ÿÿå@@ÿÿÛ@@ÿÿÒ@@ÿÿ ¾@@ÿÿ¸@@ÿÿJJ @¦«@ @ÿÿ1«@@ÿÿ"—? @@ÿÿ&ûþž@@ÿÿ*÷÷‘@@ÿÿ0õõ†@@ÿÿ5ôôz@@ÿÿ;óóh@@ÿÿ@òò^@@ÿÿDññV@@ÿÿGððM@@ÿÿLïïB@@ÿÿRîî:@@ÿÿWíí+@@ÿÿ]ìì%@@ÿÿbêêYJ @¶géé@ @ÿÿ1iéé@@ÿÿoèè³?@ÿÿtççhJ @ºyææÍ? @ÿÿ1{ææÍ?@ÿÿää½?@ÿÿ„ââ—?@ÿÿˆáá?@ÿÿ‹ßßi?@ÿÿŽÝÝQ?@ÿÿ‘ÜÜK?@ÿÿ—ØÚC?@ÿÿžÔÖ;?@ÿÿ¥ÏÑï>@ÿÿ­ËÍÕ>@ÿÿ±ÇÇÐ>@ÿÿ´ÆÆÈ>@ÿÿ¸Åž>@ÿÿ»ÄÄ®>@ÿÿ¿Â©>@ÿÿÂÁÁ[>@ÿÿÅ££V>@ÿÿÈŸŸO>@ÿÿËžž>@ÿÿÏšš>@ÿÿÑ——>@ÿÿÔ––>@ÿÿו•xJÓÚ‹‹Õ= @ÿÿ1Ý‹‹P=@ÿÿà8=@ÿÿ $=@ÿÿæ=@ÿÿé~~é<@ÿÿì}}^=@ÿÿíjjF=@ÿÿîii0=@ÿÿïhh=@ÿÿðgg=@ÿÿñff´<@ÿÿô^^Ñ<@ÿÿ÷]]¿<@ÿÿøWWž<@ÿÿûSSŠ<@ÿÿþRR«<@ÿÿÿAA–<@ÿÿ@@€<@ÿÿ==w<@ÿÿ<<g<@ÿÿ..`<@ÿÿ--Y<@ÿÿ,,î;@ÿÿÓ;@ÿÿ ¼;@ÿÿ ®;@ÿÿ™;@ÿÿS;@ÿÿòò4;@ÿÿññ; @ÿÿîîï:@ÿÿÖÖÐ:@ÿÿÕÕ¾: @ÿÿÒÒ÷9@ÿÿ ««Æ9@ÿÿ"ªªÙ9@ÿÿ#¥¥¤9 @ÿÿ$¤J Dÿÿ$޵J@0ù%“9 @ÿÿ&‰‰ÌJ Dÿÿ&„‰ÝJ@0ü'ˆˆˆ9 @ÿÿ(~~ñJ Dÿÿ(|~K@0ÿ)}}z9 @ÿÿ*zzK Dÿÿ*xz'K@0+yyK9 @ÿÿ,gg;K Dÿÿ,egLK@0-ff&9 @ÿÿ.VV9 @ÿÿ.SVaK@0/TToK@00UU9 @ÿÿ1QQ9 @ÿÿ1NQ|K@0 2OO‰K@0 3PPÚ8 @ÿÿ477o< @ÿÿ5,,H @ÿÿ6++uH @ÿÿ7**CG @ÿÿ8@E @ÿÿ9••ÌC @ÿÿ:ŒŒˆD @ÿÿ;uuçB @ÿÿ<NNB @ÿÿ=##Ý> @ÿÿ>ÉÉ—> @ÿÿ?ÀÀ>> @ÿÿ@æ= @ÿÿA””«= @ÿÿCŒŒù; @ÿÿDá; @ÿÿE¤; @ÿÿFµ: @ÿÿGÎΠ: @ÿÿHÉÉŒ: @ÿÿIÈÈ|: @ÿÿJÃÃm: @ÿÿKÂÂ^: @ÿÿLÁÁN: @ÿÿMÀÀE: @ÿÿN»»:: @ÿÿOºº1: @ÿÿP¹¹&: @ÿÿQ¸¸: @ÿÿR··: @ÿÿU±± : @ÿÿX°°»9 @ÿÿY¢¢¬9 @ÿÿZ˜˜-9 @ÿÿ[““T9 @ÿÿ]jjù8 @ÿÿ^XXÈ8 @ÿÿ_FFð8 @ÿÿ`CC»8 @ÿÿa11®8 @ÿÿb00 5 @ÿÿc#.:>BXcgk{‡•™¥µ¹Òúý    GªGgEÔ(ºGÍGÛGæGH HH!H2H*IH`HÔ(pHzHÛGˆHÔ(HzHÛG¦HÔ(ºHÆHzH×HÔ(ºHîHüHIIÔ(ºHÆHüHIIH2IJIH[IsIŠIH¨IgE?E²IÇIåIÿIJ5J7§J¹JÉJÚJ?EêJKK,K:KQKdK€KŽK¥KHêJK,KQK€KLH[LtL‹L L?E[LtLÏLíL7%M?E[LtL‹L2MFM?EƒM˜M®M*ÒMìMH‹LN,N[L@NTN?EÏLN,N[L@N¥N7%M?EÿN2MN,N[L@NOD*sO²I2M†OH HH!H2H?E²OÄOßOöOP&P7§J¹JÉJÚJ?E‰PŸP§J¬P¹J·PÇPÜPÚJçPH‰PŸP¬P·PÜPOQHQ•Q©Q»Q?EQ•QáQüQ7%M?EQ•Q©Q+R?RsR„RšR¥R*¾RšRÐRsR„RšR¥R*¾RšRÐR?EåR÷R S*IH`H GªGgEHÆÐD€¹ OQRSUVWXYZ¹5)¹A¹FÚDik !'Ùõ…ø6%?ëT¦¨ªÄÅÆÇËÏÜÝßáâðñòóôõ÷  !>AOQRSUVWXYZjklmnopxyz{|}„…†‡ˆ‰œ¤§¬­®¯²³ÙÛÝßáú015k ‹ë?äèìíîï &adgq€‚ƒ¢¥¨ª234ëCdet ,/2ôFãäå   Ý>ÈÉÝCab]Dqq]FºÀÎ&3&(*&9V÷û&:¸¦?á÷¦A&CS¦Dx¦FÙ59OT;û=qwH1˜#/29Qá˜B/0Gça-"«ÂÅÇñóõ  !*.234kmoy{}…‡‰¯°±á;*aB)*,.Ê;Ób.Ó´èS;òÓ;S>žŸSF·<ZÁÂÄÅÆÇâäæçðñòóôõ  )*,./01234jklmnopqrsxyz{|}„…†‡ˆ‰œ¬­®¯°±ÙÚÚããääååçèú         5< 3¼; êíï  (cfiƒª·å 2347;Þãååî   îB RS]^}~€äæçèéìî  &',./023abdeghqrs€‚¢£¥¦¨©´¶Úãäèí   î;nA% 0134bcceffhiirr      w¥6¹D÷Œw3Ÿ÷9«w<<K,÷Dƒ@<%HM@E•@H©>Á2 ç  ,./023s²:É2<$GL2?ÍÖ?F²A2B$v2H› OQRSUVWXYZ›?á÷›CYdÅ¥§ª«ÕÖñò  !"#$%&,-.012<=@AFGHIWY]^fghijnopqr•–—šÁÂÄÅÆÇËÏÔØáâäçèêìíîïðñòóôõ÷     !$&()*,./124OPQRSTUVWXYZacdfgijklmnopqsvxyz{|}€‚ƒ„…†‡ˆ‰œ¢¤¥§¨ª¬­®¯°±·×ÙÚãåçïú    01234567d PTä8:>ºº¼¼¾äDäE¬­®¯°±ÍeŠÐÐÙÙäæçèìî         &.///001222334AAHHOOQRSSUUVVVWWXXXYYYZZZZadgqqrs€‚œ¢¥¨´ãéêëìú M 0Í?äæM@ïÍB234Ö# µ¶·çì V3V>ŸÖ?äæqrV@ðÖAÖEª2VH¿<WZ¥6¹ˆ"39Nˆ9~®±ˆDtuE…‘çs>–‘@õz9z¬¯z@óúACfghijnopqrâíï)*pƒ¤§ªç 012347Ã>&ÄÅÆÇ  !jklmnoxyz{|}„…†‡ˆ‰¬­®¯°±C?ÔECA   //0223ÃFÛCGñ¬9˜¬Dyµ9˜µ:Î5@ìíîï&adg€‚ƒ¢¤¥§¨ª²³ÛÝßá012347µH79Sž<AIS@-èéêìíîïòóôõ !&'(abcdefghilmno€‚ƒ†‡ˆ‰347ž@÷ýžFמH4g<.5çBMNð8C99p9r‹ŸýpCVYZðGÙ9¢¥¨Y<,4YA  aaddgg€€‚‚úú  YCV¢ÁÂðñòóôõ ïï 5 >•–‹B,,..œœããïïï666 Gçèí9PU: °°°±±±&&&'''”E¢£¤¥¦§01”H2ý=•–ýE¯FÆ9 ªÆ<YZF=iwÆA¯H78=iq€8>š¸@48A  ¸G H+s*1ó?æéê '(0134bcefhir£¦©íóAóCf\9j'(hiÜ<]ÜAÜE¬¥ OPQRSTUVWXYZ%#bc{./8%<#FK%@ê3%HŽ!©<!13CRR>——>¿À—?áûA    B"#CR—F×`<-3`G`HÉ ).IDpIF´¶·ãäåçë    ÉFÝÒ@RDqrÒG »#ìì»81»9ž ¢»=Š‹;?ÏA;B&'7B m:ÂmDssmGmH&öjjttyˆv>¦¨Ò9vA 0134_ééêê'(bbccefhi£££¦¦¦©ßFãä¨ 4Õßåñû¦¨ªÂÅÇñóõ  !*.234RSWXYZkmoy{}…‡‰¯°±´Ò9¨#êê(Eˆ1:¹1>š1F´¶1Gï6ßåçûDlc{8EL<&INÌC]ŒLE—žõü•%ê(cfiÕ=‹ŒÕ>Ç•AUG÷úHþ.,./2adgqs€‚¢¥´Úè >3  ¾: ÒÕÕÖÝÞßßç>>œ¾>Äþ>ËÌÏÐÔÕØÙ>>AAEEHHOO¾@~A>CU>Dps¾E¥§1‡AF°>´½?ßA  Dkù9!ù8LXù;+ù<fghijnopqr}~€ù>ËÏ>Ay?Ýù?ççùCgh¢ÞëÜàB%·B@îïÂD|+ ÌÌÕÕä,>>EE+3 «<AN«=„†Œ+@ìí«@4+B$+Dn´)jææéêê '((01344£¦©¶¶¶¶¶·····äääåååí4;ñû´<W^´=†††‹ŒŒ´Dz#éé:È=gu=rx>š?ËÏÔØ>AEHDvf4Qæ9§¨æ:Õßåçñæ=“”fA fB*.fHÏ. äçèìî &O>ž¡A!DmŠ<@HRŠH0“òóôõ !jklmno†‡ˆ‰“9‰|:Ã|>¨ªü@ |B,,.E!7æèèéììîî &&'034QQSSUUVVWWXXYYZZbehr¢¢£¥¥¦¨¨©´´¶ä E3 E:»EH®"æ 0134r¶¶¶¶····ääåå    ®"ä ®80®;®>Â.A ®FÙ57Gï6€ÄOQ+4€<=L€DsE„€E¢GåHi 6¤ÐÜìø+8Ve°Åé<fn}i?ÝéAr;úÿr@òóôõ !jklmno†‡ˆ‰rB*rEœ¶·ú[>£Û@[B)*,.ÛB4¤@AHIW¤9¤;$=hp *14çççç     ?ËÌÏÐÔÕØÙ>>AAEEHHOO @çE¢£¤¥¦§01G–#^}~€äæqr¢¢££¤¤¥¥¦¦§§¬­®¯°±0011:±–<@M@èé3–G?ßÿBOÈ01234567È84FH9fjÈ=Š‹‹È>ÅÈD}ÈE§1Ñ $v´´´µ¶¶¶¶····×Ñ<]Q?ÜÑFß::º:@íºD{< 04ƒ=pvƒFÕÖll#íìD‚ƒìE­ìFãäå   õE®uH*^  ÞÊÓã+=D^:Á^=jx^@ñ^E™œÞG§@ûý'A  0ËÏ>A0!/20=hv0CT°E¤0 äèìî &adgq€‚¢¥¨´ã RS; îññòùúûû™;<"25™H3b b" 0â<^b>¦¬¹b?Üâ?ääâAË# ´¶·çê K3 K9gq­°K?ØHKB),KHTAAT Ô ÔØEHT+ê(cfiT9jtTB)=9b½?â=F´=Gï6½H9† RS}~€èéê'(bcefhi£¦©Ú †9}=ft>•†> ª¬¶¹º¼¾ÀËΆ@ôCPRSTWXYZï:Öo<:,ï>Ë>ø!£¦¶x=ouxCWxE¢£¤0xGÁA/·å ª=âþ§»*F³ªG  ªH6³?âç³@'(efhi³B/2³CZ3Do3E‰œæé'behr£¦©¶ä :·E‡œE£¦©F²e9o˜öå@åCcN 66Îdh‘ENîùÿNfghijnopqr}~€N:ÀÎ@NCUVWXYZÎE¨©ª×Fá :É A ‰CX Dj: °°°±±±&&&'''=go~E†F±{—žõü{FÉÒÄ# ´¶·çé Ä?âäæçpqrsÄ@     0134DB(7ÄB1ÄG -"æé'behr-#c/-9`“¶ 4œéêëìú¶>!ÂÅÇñóõ  !*.234kmoy{}…‡‰¯°±¶E¥¦§12êç ]•–ššžŸËÌÌÍÏÐÐÑÕÕÖÙÙÚÜÝááäèèèééêêìììííîîîïïòóôõ÷÷ûû       !&&&''((,.//012234>>>?AAABEEFHHIOOQRSSUUVVVWWXXXYYYZZZZaaabbccdddeeffggghhiiq€€€‚‚‚ƒƒ†‡ˆ‰œ¢¢¢££¤¤¥¥¥¦¦§§¨¨¨©©ªª²²³³ÛÛÝÝßßááãéêëìú 0011223344677Ÿ9CSSXXZZŸG è%å h+·å h=nth@òhEœçèú ñ@qF¼¾qH'Ú8 79:C¾ÉËÒÒÚD#?ÍÑÖÚ?BFI£@ûý£B//22£E£¤¦¨©ª02#F²³ÛÝßá#Gëë£H5 :°Œ:È B!FI£@ûý£B//22£E£¤¦¨©ª02#F²³ÛÝßá#Gëë£H5 :°Œ:È B!$ DÿÿU7 @ÿÿddL7 @ÿÿ[[÷6 @ÿÿKKî6 @ÿÿIIå6 @ÿÿGGÍ6 @ÿÿBBÄ6 @ÿÿAA·6 @ÿÿ@@£6 @ÿÿ <<š6 @ÿÿ ;;6 @ÿÿ ::}6 @ÿÿ 66u6 @ÿÿ 55j6 @ÿÿ44I6 @ÿÿ11?6 @ÿÿ0016 @ÿÿ//6 @ÿÿ..6 @ÿÿ-- 6 @ÿÿ,,ö5 @ÿÿ++î5 @ÿÿ**æ5 @ÿÿ))Ö5 @ÿÿ((Í5 @ÿÿ''Ä5 @ÿÿ&&¹5 @ÿÿ%%°5 @ÿÿ§5 @ÿÿŠ5 @ÿÿ€5 @ÿÿv5 @ÿÿ m5 @ÿÿ!a5 @ÿÿ"AFJFSFjFFŸF®F¼FÑFÜFåFõFýFGSFFjFGG)GAKMXYefrs‘’”•±²µ¶ÅÆÑãt\B./12345:BFHILNQRRSSVWZZ\__bbde{Œ‘’“¡¥§¨««¬®²³µµº½¾¾¿¿ÂÂÄÇÇÊÊÌÍSÞFýS½íW`jk¡¤¥¦§ª¼½¾¿Îß%((‚…… "5„‘¥¥±]Yn\›ÝZ¬®²ËÐÓÖÙÜàâåèëîñ]\ ..uw{ŒŒý\ò$7&312LW’®÷<lm®Á**,/13ObcˆˆŠ‘˜»ÊË÷ "'5:GR_l~¯°¿Rù†[ÙRkªoSäQïS¼íx/Tù¾T^ïüXnpt—²³µ#88;>>@BJNQQRSSZ\z€–˜˜šœœž¡©«¬²³µº½½¾¿¿ÂÄòû #/06?BLNZ[ghtuz“–™Ÿ´·ºÇÈÐÑáÏX/24557î(;HS`mÀZ$[nopqstò+-/0VXZ[ceghprtu“”–—™´µ·¸ºÃÇo\ ,245{Š’“ØO5®°±²ö{ xZ€Zaghhiijklm}}™¢£¤¥¦§ª®¶ÁÆÆ'((((**-CC|„…………††ˆˆ‹¢¢ðý  ""'(++/55:;?GHLRSVVZ_`ccglmppt}~ƒ†‘’£¤¤¥¥¥¥¦§§««¯°±²¿ÀÃÃÇÑÔ×××ÛÛÛÞÞ\îø\òü 2DO\ivy‡Ššž¨¬®»ÉÌÌÐÔÖØÚÜÞSêk¡SÛ4AUµzŸáYðýþ!Z!TdÀÌÁZ›¬ÀËa\'BNQRRRSSSZZZ\v¡«««¬®®²³µµµº½¾¾¾¿¿¿ÂÂÂÄ\!8:VXÊS`¡ŠZD[lnpppq8;>?@zœžò+,-/0>?ABKLMNVWXZ[cdeghpqrtu’’“–––—¯±²²´···¸ÃÄÅÇÈ*\ñJ\’j\2bwʪ\s²óAl¯SYkpryz{{³Y´#ãó\ò{|} ¢£œY§L\ZXÑüZ ¦ÐÓÖÙÜàâåèëîñE¦ìW–ìóeR¥EYk¬®ËÐÓÖÙÜàâåèëîñåZ¥e\14I^_bw’¨ÆÇÊ…\8˜T¾ð%x‘U¶%ƒ8˜åîYò WR§wRj¤ó(…„¥÷R(…¥T¿ð‚±—TGQSVXYYYmxz}~~~ï     ~±±±²²³³÷Yö.NŒº×[å7\ý×\íöÀSÏàV”±Cq²QRS½¾¿/Zgt—¸ÇàX4€Y’“”•@[®¿îñÀ\z°²³µ¶¸ÉQm¶éYñ   ]ó?@@LÑ)] yŠž¬®ÌÜÞòYò2])<ITanÁ›X#Y ELLWXYkrw~ÛYðþÿB®ÁZ÷@¤Z—$[¨d[Ó\ëä\ðƒ„„„„…†$]üÌÐÔÖmH~¬®± Rú-Z)D­[àí[è ]÷6Z7V[Ж\>œ+VcpÃ_ /XZ—™s|ðY EMVYks}~ß\íô¨WEJLRSTT>@z˜šœžíùáèX6ˆYBŽ’“”§®±í8<ABCDXppq—²8>QRRSs˜œ²²³³½¾¾¿ô /?LZgt’––—²··¸ÇÑÑRÕ!QSç^‘SØ!±WghÆ(*C…†ˆ¢„¥¦§ÛÛqY[§Q],WdqÄzZ [^uxyšŸ«¸»ÂÊš[Üz\IKLRSWXZ^^{¨ª«®µ¾¿ÂÆÆ#TöƒUíY7CZ7=>¬WlíöìWö,YHñŒYŽ•§¬²´íô#8E8>s–˜œ,] 2DO\iv‡š¨»ÉÌØÚÕYï  ,33Fbce{Š‘‘¥ÊËÍu[Öþ ”§®°±±²íöù7CÞW«Þ¾[â'Sß§X /(;HS`mÀ'Y*HSYnz~ðö÷ùúý!\nq›µ¶ NOQST}º»½¿Àñz{}“—Ÿ £´¸ç\ò#6ÐÙVþZp–·™Zj¤¼½¾¿Î%((‚……„‘¥¥±"R}£°¢W$®Á:LLVWWX "'+/5:?GLRVZ_cglpt¯¿ÃÇ Y E“®An“´KZ:=@ACDEÔS "5”Y“”•©®°±²ï:ABCDETZ:>??BD”Zi}ÍU@ÿÿ;;ùU@ÿÿ99ãU@ÿÿ 77=V@ÿÿ 55"V@ÿÿ33ìW@ÿÿ11ÞW@ÿÿ//AU@ÿÿ--TV@ÿÿ++V@ÿÿ))ÌW@ÿÿ!&'€R@ÿÿ%#$S@ÿÿ( !ØQ@ÿÿ+÷Q@ÿÿ/2R@ÿÿ2·W@ÿÿ5çQ@ÿÿ9ÉQ@ÿÿ="R@ÿÿB ©Q@ÿÿE W @ÿÿFÎm†u@·Îm†u@·Îm†u@·Îm†u@·Îm†u@·.o¢u´už·.oáu{´Ô(þuvvHnEHnEHáu{´.oáuvS·.oáu{´Ô(áu{´.oáuNvv·.oáu{´.oáu{´.oáuwvv·.oáu´už·.oáu‡v¢vÁ·.oæv­\7#çQ÷Q·WÇWØQ€R$V)¨W ©Q ÉQS!AU-ùU9±W !$'/3579;"R 2R"V3¢W $›-ƒU3579;ãU7TV+¬W1ÌW'ìW1üW1E3579;ÍU;=V5W þ-ÞW/_  !#$'//11WyX@ÿÿ JX@ÿÿ 0X@ÿÿ%X @ÿÿHáuwwƒ¸ÎmFwXwqw„wwÎmáu{´7 _ ¨W¬W 0X`XE%XyX ‘X  ¢WJXjX'b Dÿÿb DÿÿrW Dÿÿd Dÿÿ`] Dÿÿ X Dÿÿ!!Ì` @ÿÿo×q` @ÿÿ ©R6` @ÿÿ¡Û_ @ÿÿ<~x_ @ÿÿ|U_ @ÿÿ#;`_ @ÿÿ(ã7Õ^ @ÿÿ+´ß©^ @ÿÿ1#±˜^ @ÿÿ9 e^ @ÿÿ@Ö÷R^ @ÿÿGÄÒ.^ @ÿÿO¨¾…\@ÿÿToq–\ @ÿÿY:^^ @ÿÿ]$-Ö_ @ÿÿ^É_ @ÿÿ_½_ @ÿÿ`·_ @ÿÿaÎmÞzôz{{Ÿ²ÎmÞzôzá²Îmºw„{•{{¶{Á{³Îm||„{•{ƒmI³Îmôz„{•{ƒm‡³Îm•|„w®|Îm•|áu„wF¹*áu{´*áu•|3xú|y¹*•|3xú|!y8}E}R}H•|3xú|!y8}”}*•|3xú|!y8}”}*•|3xú|!y8}Ï}R}*•|3xÜ}ì}kX•|3x„w~Háu×w¹@~¸lºl CºGR4ÇW-0Éʪ°×ÙÝÞèíôy’¸…‹²´¸¹ÃÈϧÅ!"ÓÙêF„„¾Îßî:;G]ª^% äS~úÐZ(HUdg_ãCEIyX),%)$/0PQRSeoz‹µ¹»¿ÍÒã '/0‡‰‹’?HJQs¤«­¯³¹½ë^ ½¬¸‡“ÛÕÝòSŠ5+WW/23458PQRSeoz‹½‹–¬¬­¸ÅÅÏÖî÷÷ÿ{¹¹Ø Qy‡‡ˆ“  ª±ÉÒÒÚÛÞî‘ÆÆì;¹ÂÕÕÖÝéñòõGH`‡º¼¿Ôæðñûˆ’“Ÿ&39uuÉàDU¹¾ÍÓ  ˜¿ÇíùZ[—¢ºÊÌãåL{š¢ÈÔßãIij¤¬ÇÛÝùû±ÄäÕç>F‹R8T#'-99;=>>A__apquuw¦®¯åèðô÷÷øüþ14=ADFFGMMOQRRVY]šš¡¦®®²²ÈØÙÙúýý!&&()*..266>BCEIIKLMQQSTU]^^cfnnpr˜›£ªª¬¯ÁÁÃÅÅÇÑÔØÝÞêíòòóBq|‰‰£³´´ÕØØêð÷û  ##(--::?CEILPPSTX\\_`dllps}}ƒƒ…‡¥­¶¶¸¼¼¾ÀÐÐÒÕÕâèìñò   x¥»ÆÆÉÍÒ××ÚÚçëëìïïü  !%%'++-22499:@@BCCDMMNSSUXX\`efinno}ÏX%())+Z{'>?åìðñ"$,.01=RY&()*BCEIKLMQSTUnoqrxª«­®¯ÅÇÊËÑÔB #%:<CEILPSTX\_`d}~ƒ„†‡Ž¶·¸¼½¿ÀÕÛÜâè¥ !%'+-235@ACEX\­tª­O_æ"#‚ËÌÑÒÓäåêëìCÜÝâãäúûaÊÔØO)/;s°Wa3ˆÁ%2FITgn\ž˜^ ¡S ‡-Ôæðˆ’!Z(Óìäa\¢µ}!` AWX%&FIJgÊS/Øì`ŠZ×'9;=>A_auw¦®å  "#$,-.01=MOQRSTY˜™¡¦®²ÇÈÙùúúý&'()*.26>IJKLMQRSTUZ\fnpŽ›£ª¬ÁÃÅÅÇÉÊËÑÔÝÞãäêíB{|‰¢£´ÔÕØê #$%(-:;<?PQSTX\]_`diks}ƒ…¤¥­¶¸¼¾ÐÒÕÕÙÛÜâèñòùú¥ÄÅÍÒ×Úëïü  %&'+,-24@BSUXX\efi­tª«­Š^éêñòŠ_/°±²´´|~?‹Œ’”¤ÙÚ®ÇÉÎÎÏÐÐÑÑÔÔÕרØÚßßáââããææçøÓV @@BCFGacdghüZ4|‚…ˆŒ””˜›ž¢|^è<_åë  'E â:{; ¨¬ns…\p9_uMÁÐSTR¡Xg0U9•½Ñ9_ru°Þ5M^”³·Üýþ7DÁßvŽ’·ØÙí.KÐó}¶¿Üïðÿ Sg~¬ø s›¨¯µîY Ûæêìîîïòó.^©WR5wR2o{¹‘ÆG÷R¹ÆHTS¡‹¢>—T >JLNÙíííïð÷Y ËäÜú×[•þ7\®+S¹×\|‡Œ§Àäï 8_g¤Íàæö¡«©±·=Eoy|„÷]À·_^i,DR^ÉÚø$/?Q`kÀS{ïàV¸Í"àX(€Y ª±³¶·¸ÇÊËËÍÎÏ@[CSf”ž¢êÉQ©ITñû“Ÿ ]Gs{€ƒ„„…ŒŽ””®²³·ÙÛÜãúýýþCDDÞßáBv‰Ž’´¶·¾ÕØØÙíEIKKòóõ¥¿×ÚÜëïïðÿ  fgh)]•œ£ÍYŒþ  x~¨h£Z]ÁÈÏ1?w‰‹)^>KNNQ[s„‰’I^ ª·ÅË×Þèéêñò ©^ $®²Ùý‰´Ø×ÚëïÉ_d|µ5Wq)`+A^bdimõ ,7DFRV^bx|²µÉÚæø$/35?QUW`koqÒT].PjÐâø›òYÛåæè2]‚ŒR^Å6-’_ „679E-.0¬öø !s™›§¨­¯´µ»ÀÅY=MOQQRX\Û_<„@A«««õrrBDUÄV @@AABabbcZÎçßý$[6d[\›ä\·¾ÀÁÁÄ—˜›¢ªª«¬¬­®°¸¹½½¿ÆÇÊÑÞßèéøùyz{|}~¸¹¹¹¹º»?z{}……†‡‡ˆ‰‹“”˜˜š¡¢¥¬¹ºÃÄÓÔ‘’“”——ÅÆÆÆÆÇȤÃÄÇÎÓÓÔÕÕÖ×ÙÝÞââäFGHHHI®¾¿¿ÀÀÂÐâîïðñóùùûûüüþ++.u‘’“–ŸŸ  ¢¥ÐÐÔ$]‘v‡þrŒ ¼6wƒD_åìíññöü=AHIU„ÙÛñEíï ¨acmd`¤¯±³çì|¤`®  u§©­±²¶ºav„…ˆ‹› R '(Jµó•–¤¥U ©±´îöoy”™£§­[Œí[˜ ] ¹‰JN­±Ž²z~€†‰_ ÅÆÇÈÉÊËÑÒãäêëBÕÖØÙÛÜâãùú¥XY[\V[|–\&;±Êá>ì,R&IQnªÅ #:P\}ƒ¶¼Õ %+2@XªÖ_õ 7FVbx²æ6`¡_ %$&µ·ã?¤ß\|…=F¡©¿^)3456CSTÿ_ <L]ah.2PTjn¨Wh;@E[quz’Ùáããíöãìô,.4;DMOR]|®²ØÙý&(.6BIKQS]nªÁÃÅÇÝ=‰³´Ø #-:CPS\_}ƒ¶¼ÐÒÕñx¡µ×Úëï %+2@SUXe­õöt˜™èX*¯wˆY“;CFJQpuwx{„©±¸ÅÊÍ×áåæïð $9>_uãêì÷÷þ",0;FFMR…šš®²Ùý!&).6CILQT^^nªÁÅÑØÞêòòF‰´Øðû #-:EIPT\`ll}ƒ¶¼ÐÕâìò  ©ÆÆ×Úëï %+299@CCMMSX`fnn¨`ö™ÑR%  QS—HO$‘S„%  ±W6ZÎÎÖ×´½ÉÊÝÞ|““žž¹º  ˜¤¥¸¹’—¨¨ÆÇ<=âHˆˆÀÑãùü +AAIJ ±ÐqYÑêâ[5Q]lu‡Š´ÉÌ:<@`bvx|‚…ˆŒ•˜›Ÿ£©îôþ-.DNPS¨ÁÛð'(JKRS`bho¥«ÂÄÆÇ÷ƒœ¶Ëòý$;QS]_nu~„¯·½ÑÓÖzÒä &,3ATVYq«Q`¢¯q`©zZ'-BLOV^š[ˆú^3ÃŒ§ÀÏßäéï 8_g}¤ÍàæöMRZ‚›ªº¿ÄÊæñü/mt“®Þôü+Ly´ºú` v|}©ªª­±²´#T­Öˆ±ÖéƒU |<¡©©®oouvY+CZ £_ ãå¾ÀÃÊÛè&/¬W&VWX%(IJ«´ÐÐÐâââòóóöÿr””•––™££¤¥¥§©ìW¯|„ŒY;ANpu‰©®±ÅÉÊ×àáãã $+9;>_auw,]:Ë#+3?FNVkƒ”Ÿ¾ûþ ¦Üàø )@MYey€™©¹8;óö "(.5;Ptw|…‡Œ`«´µòÿÌ`ou[‚Õ^µvU_;Þòfõ_<HMRVWXZ_j‚›¿Êæñü/mt®Þôü+Lvy`@X]aag''(.22@FFJPTTaggjnnþª¸ÅÉÍÎ×ÞÞàèéêñò ÞWÁÑ—Æø z¡Ó^ËÇרD¾[^`¢´çìçQ  ±²'S‹'Y)Úèêòæ  '(€../166;=rsu¯°³@--35‡ˆ‹ÀÁÄ'_å"$0X‘œº¦Ç0_å™U‰?J­®±±uvvyy}…¶ÙVAb™Z!2PQRSeoz­Ö{¹¹ˆ±î‘ÆÆÖéGHº¿Ôæðˆ’™_ –¬ y‡;ÂÕ‡"R"'0!")1=LT[u†—¢³¶Òëß5T`j‹œ¬ÄãâS‹ÅÏî÷ÿQ ªÉÒÚ¹ñ¢WDU˜ÇùZ{¢Ôi¤Ä«¼Õçöøør‹˜™››ª­ Y ÊãÛùKZ  `?_jõ 7FVbx²æ0RlR¿ÔSÅ÷ ÒÞõ”Y¬±¶¸ÇÊÍÏÙáãåæïðö ýSQ‹¢>ýT } =ãä¯ w®½_bm3UoRX´òÿ”£†[…Æ^ EIhkú ÕçùoSe“ABïSPXg0/T¥ÀÏR»o\ORƒ…ŒŽ/`a2Tnï`p„8T¼xZ&0123458DUZZ·»¼½¿ÀÁÃÄÇÉÊÊÍÍÎÎÎÑÑÒÓÖ××’–—›¢¹ÅÅÆÉÊÏÏÑÖ×ÙÝÞèíîôô÷÷øýÿ !")1=CLTZ[uy†‘’’“““—œžžž¢³¶¸º»ÒØë      ?syz}”  ¡¤¥ªª¬±²´¸¹ÃÈÉÏÏÒÒÓØÚÛÞßäîõ 57EFTV`bijx‹œ¤¦§§¨¨¨¬²ÄÅÇÈãæì!""%(0;<==IJR^^l¤½ÂÃÇÎÞçéêêëìïñòõFI`|„„„‡ˆˆˆ‹‹®·¸º¼¼¾Ç×  :;;=>AAADDEFIJJø\d‘•œ£ËÍ#+3?FNVYkvƒ‡Œ”Ÿ¾ûþþ   Brx~¦¨Üàø )@MYehy€Œ™£©¹ 8;Z]¥¼ÁÈÏóö "(.156;?Ptww|ƒ…‡‰‹x_|­¸`§SšP[*AUèêòr¯‡ÀÁZ)HTdfg\q””(9DH_dgu|‚…ˆŒ•˜›ž¢>MƒÁDЧSA^ ª¶ÅÏ×Ýö $q¯*\¢óA ˜ÇùZ{¢Ôi¤Ä³Yº[,Mó\/01;<=stu°²³B345ˆŠ‹ÁÃÄœ`¬ÃÊÛè!&/Qs»ÀÅÊÔÖeR3åZ3e^×.å`p|÷]@ÿÿã]@ÿÿ¼]@ÿÿ š]@ÿÿ çV@ÿÿ |] @ÿÿ.oáu{´.oæv­\.oZzizž·.oz{´Îm¢u—z®z!¹7_ çV ×]ã]÷]¸V üW |]°] ¼]E W‰] š] Ò]'b Dÿÿb DÿÿrW Dÿÿd Dÿÿ `] Dÿÿ!!Þa @ÿÿö?¨` @ÿÿ hßWa @ÿÿ0X @ÿÿy“JX @ÿÿKvyX @ÿÿ #9Åa @ÿÿ$·a @ÿÿ(‘a @ÿÿ-  ÎmZz´u\~j~n²Îm¤~´u³~„w´Îmê~´uþ~•{G´*áu{´ÎmFwXwqw„wwHáuwwƒ¸?¦ª³¸¦ª³€¦ª³c€ŠGRÇW€‚$-@oyšçêì~—­ºÒýG]§ÇËÏÖS!|yX$ya 9:<DEGQRSW[^_abhŒ“[$)z€€‚  #$&'),-/02?@Zinoxy™š¡¤¿ÂÍØãçêìûjoprsttux}}~†ŽŽ—§§«­¹¹º¿ÃÇÇËËÏÏÒÖÖØøúûý$"R&')/02i¡¿ÂÍØãûâS¢WcKRn "+88<CGSqqu|€–———œœ¡¡¥§¨ª­­®±±³¶¶¸¸º¿¿ÂÂÂÇÌÒ×Ýâéúÿmuz}ƒ†‡ŠŽ‘‘‘’’š››§§¬°°²·¹¼¼¿¿ÃÃÇÇËËÏÏÒÖØØ YdÈÓÞöôM RB{™¯ÔS#,n™t}޹]~Š‹S£Â#ýSþ/W/ƒƒ #%&,./?BZnpx{™›¤rsttx}€Ž™«¯¹»$=a Piiijj ‹‹‹ŒŒ&3)-.RˆŠ  &/:EMRdfs~†ÈÊÓÕÞàöøpu}޹ûR†[ ÏM RoSÅÅ)ïS//TõÔ5ZkÕÖØa4?M[x†˜¥§ª®±³·¸ºÿØO –¡¥¨¿ÂÇÒÝ·xZg&)-.155|‚ƒƒƒƒ„………†ˆŠ $%%%&-.../@ABCCGKKMopppqqu|š›››œçèéìññój~€‘‘‘’𭮝°±µµº»»»¼øý  \0˜^ÏSÛÍ-¡S•ª!AU!Z[k‘“ÎÙäüÊSÊT 8q—§­­³¶¶º‘JXK<Gu€’›jXKeŠZ& dehiu€Š‹ÈÉÌÍÓÔרÞßâãö÷úûk¦§ÆÇÊËÎÏÖר*\2Š^23óARгY g”§ÇËÏÓalzƒ‡Š’›§°²¼¿ÃÇËÏÒØüZ|^/18ˆEJgõeRÅR/åZÅa°²T1U u’“œ§ÇËÏÞ=îYNUX\]`aj.^§ÇËWRwRƒ3÷RƒTþ1—T8PTTTUU[[[\]`aaceijooopp ]]]^_abbdehhŠŒ–––———¦¦¦§²²²³¹¹¹º÷Y 9DQer}ÉÔß÷×[*7\€Wa·a zƒ‡Š¼¿ÃÒÀSryàVS`XKjp@amb ø ÉQITt«R!ÒT"+C|œéÿš2]½vÒ]hoöúra hmWnpq›a "BZ :ERfs~ÊÕàø$[d[\.ä\|„† yz{||€„„†êëìììííj—˜™šš›¡¡$a'//3„a rsu}~€Œ‘ R"­R%.p›»­[%í[, ]ópÛû-aMXY\]`a WXZ^_ab­a   6ZâV[–\Ö6aORU_$&z| jöøŸa  ¨W0Kcn7<GQS]dehŠÆÇÈÉÌÑÒÓÔ×ÜÝÞßâö÷ú hl’›§·ÇËϨ`hha¨a "ÑR6QSÐÉ+‘S6Z±Wƒ……%.Kp„›íñ¡±µ» ‘X$1238qYhÌ×ú[Q]בa غR&€š["š]„ú^ì#TæsÑ4ƒUh¬W$+./112388ˆŠCC||éhoššÒöúìWoú,YNTU[ceio9<DGru}€ìaö "%'*,.02u[õaöžRÞR?xÞW5¾['ÞaöçQ†'S¤$'Y }ˆˆŒ efhikÉÊÌÍÎÔÕרÙßàâãä÷øúûü0Xz™Zƒƒ %.BZp{›rsx™¯»:$+ .í6 q ïÐ7n¼’l0<úTV`î*v% €Ô>Æ,PÔ4Ð_Ö !€²*¨¤`  Žâh rX¾: –—˜ynopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’ÊËÌÍÏÐÑÒÕרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwÖ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw²³´µ¶}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»«ÆÇÈÉÁÂÃÄÅÆÇÈÉÊËÌÎÓÔx¦§¨©ª¯°±·¸¹º»¼½¾¿ÀÁÂÃÄÅb @ÿÿHœ¬°7Wb“bxyzŸŒ Dÿÿ¹Œ Dÿÿ##‡b @ÿÿnn|b @ÿÿmmIT @ÿÿkk™_ @ÿÿjjë^ @ÿÿii'S @ÿÿee1S @ÿÿdd8T @ÿÿbbdS @ÿÿ ``CS @ÿÿ ^^éR @ÿÿ \\ÞR @ÿÿ [[ÅR @ÿÿ YYºR @ÿÿXXÔS @ÿÿWWâS @ÿÿVVÊS @ÿÿUUžR @ÿÿSSR @ÿÿRReR @ÿÿQQWR @ÿÿPPGR @ÿÿOOQS @ÿÿHH‘S @ÿÿGGÀS @ÿÿFFob @ÿÿEE#T @ÿÿDDS @ÿÿCC¸Q @ÿÿBBT @ÿÿAAT @ÿÿ@@/T @ÿÿ ??¡S @ÿÿ!>>ýS @ÿÿ"==÷R @ÿÿ#<<­R @ÿÿ$;;wR @ÿÿ%::oS @ÿÿ&99S @ÿÿ'88ïS @ÿÿ('b Dÿÿ˜˜b Dÿÿ™™rW Dÿÿšš`] Dÿÿ››Ô DÿÿÌ4 Dÿÿ__pV @ÿÿ: ˜ hU @ÿÿ à  ÙT @ÿÿ– ¿ ~T @ÿÿ. 4 uT @ÿÿ' - Á @ÿÿ$$‚ @ÿÿ!!– @ÿÿE @ÿÿ9 E@ÿÿQ @ÿÿò*M @ÿÿñ"M @ÿÿØíM @ÿÿ ÁÖM @ÿÿ!³ºþL @ÿÿ"›°èL @ÿÿ#–ßL @ÿÿ$wŒÚL @ÿÿ%frÕL @ÿÿ&Wc›L @ÿÿ'Ää•K @ÿÿ '{)W@0(}}7W@0)~~© @ÿÿ*øøŽ @ÿÿ+òòH @ÿÿ,êê/ @ÿÿ-ããÙ @ÿÿ -ÅËEW@0".ÈÈWW@0"/ÉÉdW@0"0ÊÊY @ÿÿ2< Š Y@ÿÿ4®®m @ÿÿ7£ ° m@ÿÿ:­­ª @ÿÿ;'b Dÿÿ|^ @ÿÿ,7Š^ @ÿÿ *HÂ΂ã‚ó‚HÂ΂ã‚ó‚ ßc  #&',034ØO -|^,äc "%&',/234d&d3Í ,- R#I^"-/R0Š^òc#&,-03öc "%&'b Dÿÿb DÿÿrW Dÿÿd Dÿÿ`] Dÿÿ X DÿÿÞd @ÿÿz—·d @ÿÿ [j¢d @ÿÿ JWÍU @ÿÿ"FùU @ÿÿÉãU @ÿÿ‘¸=V @ÿÿƒ"V @ÿÿÑûAU @ÿÿ ©ÃTV @ÿÿ"›¦V @ÿÿ$Š”ÞW @ÿÿ'wƒÌW @ÿÿ*dn€R @ÿÿ.TZØQ @ÿÿ1BGS @ÿÿ449÷Q @ÿÿ8#*2R @ÿÿ;·W @ÿÿ>çQ @ÿÿBð÷ÉQ @ÿÿFÒå"R @ÿÿKµÆìW @ÿÿO`¨©Q @ÿÿR6Q?d @ÿÿS++5d @ÿÿT'')d @ÿÿT$'Xe@0 U%%je@0 V&&’ @ÿÿW!"Ko¯ƒ`HKoǃՃàƒëƒöƒKoǃ„'„Îm†u@·Îm†u@·Îm†u@·Îm†u@·Îm†u@·Ô(þuvvHnEHnE.oáu{´Háu{´.oáuvS·Ô(áu{´.oáu{´.oáuNvv·.oáu{´.oáu{´.oáuwvv·.oáu´už·.oáu‡v¢vÁ·.o¢u´už·.oæv­\>„J„.o]„û·xçQñ-12ÇWM”–$''((8äå$-BBZbuužªªÞîÿ23'Y­»ÀG]½Â‡dÕßà°SÒV‹pdàPe€ˆŠ“ùUÉÙVoˆ™ZÜ&X[`e ÒÜßåìïö&+™_¡g%E¶¹¹º»¼½¿ÀÁÂÄÅÓÕÕרÙÜàáãäñóóôõö$&&'()578CEFUWWXYegijklmx|~£ÑØÚèíFSV_y‘–˜›®ÉÎÐÓÖàäñõ"&&).9"R¶à+m"VÑ¢WL¶º»¼ÀÁÄÄUXklÝÞ)+^gÕØâãððóô¢dK^bfë^¡R&'eïÔSYÝTVœ”ZIõ(€€€‚] dqrww|Š‹š =VW'7KKXÜÜ &XY[`ae ¡ÒÜÝßåæìíïö÷&+,-../}d¬¹º½ýd}ƒ…”&3F+==@BIJLMNggiinx€€‘””››££¹¼ÁÁÕÙÜááãó&77EEWgik||€Øèî–Î×&:PV`dh‡‹–RØãôR,..d '(+-.124ØOÞ)k¸Q&ØQCxZ›ckn{||}}€„”––›œœœŸ  ¡¡£§z~€€€€€‚ÓÚÛÜÜÝÞàäååèèéééììíîñòò !#,-.BBBFIIILLSVXYZuuuy|||“˜›žªªª®±±±´´ËÐÑÒÕØÜÝÞìíîÿ   $)*+,-./233555889:=>>ø\$ 8=?ACFHJLTVWprtvy{}”™›œ¥§©«®°²´Xd<?ÀØd\fS5¡SX`ÜåìöAUªáYeloqqrstwxƒ‡ˆŠŠ‹Œ‘d®·»¼ÀÀÁe}j3KOOQQSV\^^__abbcceffgiÊTðOQJXÞŠ^ ]^fgÔÕáâòóŠ_  $_``abó\ )*+klmüWagk|^w\Óàñœd- \\]]^^_cfffggkmÌÓÓÔÔÕÕÖààááââäññòòóóõEÐÈ!e\&F‘¢ÕbKU5d'+9??žedA»Øjlm’¤þª±ÀÁžR-/TUú‚·ENUÙçøÞWxìL´8îY ÔÞÞßMRSUV^`®²µ»ÀÀÁÞd{÷Q$!.wR +—T®ÀÀÀÀÀ·W·d\…ˆ€RUàVqŠÄ©Q7ÉQÓ(ITÜ aæí÷)]FJLVWy}›œ®²´)^ :<=AEIJKLMNP)d$&’Øãéôú2RÒT|š “’d \Òd\be~…Ž‘›ª°³³¹º½¾ÛY dopqrsˆ‰Š‹Œe~…Ž‘„d  Ìä\1 !"#,124Z[[^m“žŸ ¡¢¢ËÖ×Þßßâãäååæîïïððóôõöö÷$] 8=ATpt™¥©$e~…’­R[ßÍU" ]Ø a–Î'-eˆŽ‘6eˆŽ‘_%%6:<<`acµ¶ÒÓðññ#$$45CTUewxzÓ “Ë$?d +FG‘‘ ¡¢¢d¬º»?e‰’¨W ¶¿ÀÂÄÖÞßßàHe€…†“ÑRܱW%N}œœ¡ñôôõõ€ééñò!16IIi||¢±±  55=>qYßñd{‚ˆƒUÑ‘É"ãU‘ã]'¬WJailn||  ÓרÙÜÞààáãFij(ÓàñÌWe£"ìWa_Öäõ,YÔÕ,] ?CHrv{§«°Ld 9?@EFG’ž¡£¤Œd $%&()+66bdegiiÌd\^Š^@ÿÿ|^@ÿÿ Y @ÿÿ àX @ÿÿHÂ΂ã‚ó‚HÂ΂ã‚ó‚MƒÑ+}ƒƒÑ+}ƒ Yßc'döàXèX|^Š^äcòcÍ'b Dÿÿb Dÿÿ`] Dÿÿ rW Dÿÿ!!d Dÿÿ""šf @ÿÿ È~f @ÿÿ ~‘f @ÿÿig¸` @ÿÿHZf @ÿÿç1êe @ÿÿ§ã¼] @ÿÿš£š] @ÿÿ"U—®e @ÿÿ&>Rú^ @ÿÿ)+e @ÿÿ.§ôçV @ÿÿ3VŽ÷] @ÿÿ6KRã] @ÿÿ90@’@ÿÿ:%%KoÞz‡„M²Îmºw´u·„ï³Hâ„ì„´u…Ä´ÎmÞzizôz´ÎmY…Zz7¸Îmáu{´.oZzizž·.oz{´Îmì„„…M²Îm|{´Îm¬…ñmƒmô´Îmù…—z®z`¸.oáu{´.oæv­\XošGR*ÇW<Oltu|}µÀÉÕÕ##OP‰²G]lÙâôÿ‡bmÄÍÎS¢ëVñùUØLNNOOQ§¬®±Ùçíïò'€†‡‰Âe>Bë^<4fMjoxyz{„…†‡’•—™›Ÿ¡£¥§©«­¯±³µ·¹ÄÈÌÏÐÑÔÚÜãåéíî÷ø  )*+,-./0123456789:;<=BKS èW@1::k¶·ÃÄÍÎ]h‹³´·¸»¼ÈÌô~ŒÁÐÑ(*+,-./0123456789:;<=E´µÝe X`fnt~€Š‹Œ’’&3&6689;<=NNO^~ª¼Ëâ$M[[m¬íù PosT\‚‡ª«¾¿ÇR®¶ÆU‹ÏZklmoR-oSi¨üïS¤/T°ZmÏe X]`–KNPRTUWØOºq½¸Q¸8T8¸VVaxZÏYcehhklmqqtuuwxx||}~‚‚ª·¸¹¼¾¿Á  #$©®±³´µÈÉÕÕÕÙÜÜÜßßéïòô÷üýþÿÿ ###'***--luvzz~††ŒÁÄÄÈÈÌÌÏÏÐÑÔÔ×ÙÙÜàââåééìíîòôô÷øýÿÿ (*+,-./0123456789:;<=EOPPSTWWWZZ[\`aa€‰‹ŒŒ¦²³´µ·½½¾ÁÄÄø\*¬³¾¿ÃÄÏYbewy{‚‡Žª¯±²ÐÒÔÖÙÛÝßëðòó "$')+-¸`HXd58f jw‹Ž‘”¿ÀÃÇË'ASi¦ñ¡S®´e§¡e §¶¶¶·¸¸¹¹ºÃÄáeX~€ŠŒÊS´¸È/ŠZYklnmØÙÜáâåóô÷øþÿ Š^ö÷Š_)"@GHIJKO©¹º»¼½¿ÃÃËÍé   êe§Uó\Yqstª½¾¿Sf‹üWVc}¼]›øN|^õ|bl·Ãœdêõõöö÷÷ø|e X\^`afhioqr‰‹E U¦­=¦æG}¨eR,ÅRÑ2ŽNT`afhioqr‰xyz{„…†‡’•—™›Ÿ¡£¥§©«­¯±³µ·¹ÄÈÌÏÐÑÔÚÜãåéíî÷ø  )*+,-./0123456789:;<=BKT²UÙì*â0¼NUãú®e>÷Q¾K€Á WR+wR·»Ì€ÆG÷R“ÊHT´—T-«µ¶¶¶·¸¸¹¹ºÃÄÔmxxx„„„ÜÜÜÜååååøøøø    7\‚×\IW~†×]›ŸHN÷]LG¹Ã·f¢ª¼ÀS˜ ÀU\àXä©Q·ÉQ¸füRéR4IT=µ©U±)]³eޱ²ÙÝßòó'+-‰]V\)^ 35689:;<=?’%åÒT¼Ò] ›ŸçõølqsuS[’_ ­ØÙßãì󨺼U^fLTY„ꤤ¥¹dS7ä\-"@FKO©µ¶·¸¹ÀÁÆÆÉÊËÌÌÍéøùüýþÿ  $] ¾Ãbw{¯ÐÔð"Df wŽ‘”ÀÃÇË'A R¯·­R–ÎU§°¼¼ÇרÚÛîHNT¡ª®²º ] D¬íP‡6Xj–\lÙâôÿ–f~‚„Œ_0355KLYª@UVXš›§©ççéKl€fj¨WYlmnmÙÛÜâäåôõ÷øÿ  §¹º¨`ºÑRjœÖ1S9QSiª‘Sžß±W!=mwx‚FMMˆ‰ÆËÜÜýýÿÿ**WW`a½Äcß‘e§ºRÐ1š]V¡ú^QÌšf¡CS6#T³¶ƒU V§>HIj~¡¦Yåæã]1]‹¼fçTcf¿¬W9hh¶¸¸ffõüjqzz††~†ŒŒ¤®¶··ºÁÌW#ìWBŸq†,] ¿ÄÏy‚‡ÒÖÛ $)Œ`¤®¯¶Œd©¼¿ÀÁõ_   )>BjqžR.ÞR3ÞW |ÉI‘’ß -Z~f~çQ¿"OŒÀ'S:çVV§e ª¾¿ÁÇÉÉËÍÎ×°SôšÓ°]@BDFGIMMQV[]_…”Ÿ¡™U°î )Dª™Z h³·»Ìô~ŒÁE´™_;ÙeX_ffghllnqt|}}…ˆ‰‰‹‘‘”"R¹nt¿âS5"VÚ¢W6;qq¶¹¹ºglnqt½¿÷ÄÄÈÈÌÌÏÏÔÔ×ÙÜàâåééìíîòô÷øýÿ ¥º¼RÂFÔS0TVí”Z 8NOQMþþÿ ýS¬ýT¨âäåæé=VÛ=fmx„Q_]Y @ÿÿ,Y @ÿÿ@~@~,Y]Yßf DÿÿÌ4 Dÿÿn Dÿÿè~ Dÿÿ Àf @ÿÿ7 σ#׃& „--D#'+.ÀfØfÀƒ"èƒ'ìƒ'„.Êfòƒ**„+$ Dÿÿ›l@ÿÿdd”l@ÿÿccl@ÿÿ bb†l@ÿÿaal@ÿÿ``wl@ÿÿ__nl@ÿÿ^^fl@ÿÿ]]Xl@ÿÿ"SSÚj @@ÿÿ&FGËj @@ÿÿ*DEÃj @@ÿÿ.BCXj @@ÿÿ2@A1l@ÿÿ8::&l@ÿÿ=99l@ÿÿC88l@ÿÿH77l@ÿÿM66úk@ÿÿQ55ïk@ÿÿV44çk@ÿÿZ33Ük@ÿÿ`22Ôk@ÿÿe11Êk@ÿÿi00¤l @m//¸k @ÿÿ1o//¸k@ÿÿt..°k@ÿÿw--·l @z,,¦k @ÿÿ1|,,¦k@ÿÿ€++œk@ÿÿ„**Èl @"ˆ))k @ÿÿ1Š))k@ÿÿ((ˆk@ÿÿ’''Ûl @&•&&~k @ÿÿ1—&&~k@ÿÿ›%%lk@ÿÿ ##vk@ÿÿ¤""dk@ÿÿ§!!Pk@ÿÿ­  [k@ÿÿ²Dk@ÿÿ¸:k@ÿÿ½/k@ÿÿÂ&k@ÿÿÆìl @2Êk @ÿÿ1Ìk@ÿÿÑk@ÿÿÔm @6Øñj @ÿÿ1Úñj@ÿÿßýj@ÿÿâáj@ÿÿçêj@ÿÿëÚj@ÿÿïÓj@ÿÿóËj@ÿÿ÷Ãj@ÿÿû»j@ÿÿ  m @A  ±j @ÿÿ1  ±j@ÿÿ   ©j@ÿÿ¡j@ÿÿ$m @F—j @ÿÿ1—j@ÿÿ$j @@ÿÿ(þ…j@ÿÿ,üü~j@ÿÿ/ûûvj@ÿÿ3úúoj@ÿÿ7ùù5m @N;øøfj @ÿÿ1= øøfj@ÿÿB öö_j@ÿÿF ôôXj@ÿÿJ óóQj@ÿÿN òòEm @TR ññHj @ÿÿ1T ññHj@ÿÿY ïï@j@ÿÿ\ èè(j@ÿÿ_ ÚÚ!j@ÿÿc ÙÙj@ÿÿf ØØj@ÿÿk ×× j@ÿÿp ÖÖj@ÿÿs ÕÕúi@ÿÿw ÔÔòi@ÿÿ{ ÓÓëi@ÿÿ~ ÌÌsg @@ÿÿƒ ¿ÀPi @@ÿÿ‡ º»9i @@ÿÿ‹ ¸¹1i @@ÿÿ ¶·ÙV @@ÿÿ“ ´µ¦i@ÿÿ™ ®®ži@ÿÿž ­­”i@ÿÿ¢ ¬¬Um @i¦ ««ˆi @ÿÿ1¨ ««ˆi@ÿÿ­ ªª€i@ÿÿ° ©©hm @m³ ¨¨vi @ÿÿ1µ ¨¨vi@ÿÿ¹ §§_i@ÿÿ¾ ¥¥hi@ÿÿ ££Pi@ÿÿÆ ¢¢Ii@ÿÿÊ ¡¡Ai@ÿÿÍ   9i@ÿÿÑ ŸŸ1i@ÿÿÕ žži@ÿÿÛ (i@ÿÿà œœd@ÿÿå ››ym @zê šši @ÿÿ1ì šši@ÿÿò ˜˜i@ÿÿø ––ýh@ÿÿý ••õh@ÿÿ ““d@ÿÿ ŽŽŠm @  ŠŠëh @ÿÿ1ŠŠëh@ÿÿˆˆáh@ÿÿ††›m @………Õh @ÿÿ1……Õh@ÿÿ#„„Íh@ÿÿ&ƒƒ®m @‰)‚‚Ãh @ÿÿ1+‚‚Ãh@ÿÿ/¿m @Œ3€€°h @ÿÿ15€€°h@ÿÿ:~~Ê;@ÿÿ=||Ñm @A{{Œh @ÿÿ1C{{Œh@ÿÿHzz˜h@ÿÿKyy{h@ÿÿOxxnh@ÿÿUwwch@ÿÿZvvWh@ÿÿ`uuMh@ÿÿettAh@ÿÿjss7h@ÿÿnrr,h@ÿÿsqq$h@ÿÿwpph@ÿÿ|ooh@ÿÿ€nnh@ÿÿ„mmÙV@ÿÿˆllÿg@ÿÿ‹ffZ@ÿÿ^^õg@ÿÿ–XXëg @@ÿÿšRUãg@ÿÿžPPØO@ÿÿ¡OOÒT@ÿÿ¥NN R@ÿÿ©MMäm @©­LLÎg @ÿÿ1¯LLÎg@ÿÿ´JJR@ÿÿ¸HHôm @­¼GGÅg @ÿÿ1¾GGÅg@ÿÿÃEE³g@ÿÿÈCC½g@ÿÿÌBB«g@ÿÿÑ==£g@ÿÿ×<<œg@ÿÿÜ88“g@ÿÿâ66àV@ÿÿç44/`@ÿÿì33ˆg@ÿÿò22g@ÿÿ÷11sg@ÿÿü00jg@ÿÿ///j @ÿÿhh_l @ÿÿZZ>l @ÿÿ>>Íi @ÿÿ¾¾±i @ÿÿ³³Vg @ÿÿ..Gg @ÿÿ ***g @ÿÿ :g @ÿÿ g @ÿÿ !%15@EMShly€„ˆ‹¨¬*¢†·†®MD*̆چD*̆چD*̆ç†ô†D*̆چD*Ì†ç† ] ‡*¢†·† ].‡*¢†·†®MD* WìMD*̆`‡w‡D*̆•‡ô†D*̆¡‡w‡D*̆•‡ô†*¢†·† ]ÄT¹‡*¢†·† ].‡*¢†·† ]ÄT¹‡*¢†·† ].‡*¢†·†ÄTþ‡*¢†·†®M*¢†·†ÄTþ‡*¢†·†®MÁ+5ˆï] ]ÄTCˆÁ+5ˆï] ]†OD*‚ˆÄT“ˆ?E³ˆÄT͈7%M?Ĕ%MÄTöˆD*‚ˆÚ†?E³ˆ$‰7%M?Ĕ%M:‰D*‚ˆÄT“ˆ?E³ˆÄT͈7%M?Ĕ2MÄTöˆD*‚ˆÚ†?E³ˆ$‰7%M?Ĕ2M:‰?Ĕ2Mç†U‰D*̆ç†ô†D*̆چ?E5ˆfYç† ]y‰D*Ì†ç† ] ‡*¢†·† ]ÄT¹‡*¢†·† ].‡*¢†·†ÄTþ‡*¢†·†®M?E«‰Å‰â‰7%M?E Š2MÿMŠD* WìM?E«‰FŠQŠ7%M?ElŠ2MzІŠD*zŠgED*̆¦Š¼ŠÏŠD*̆¦Šw‡ùŠ W`‡®MÁ+ W¡‡®MùŠ W•‡ ‹ùŠ W¡‡®MD*Zö\„[†O?EYö\„[%‹7%M?E5ˆ»eï]Z‹l‹*¢†·† ].‡D*Zö\„[†O?EYö\„[%‹7%M?E5ˆ»eï]Z‹l‹Á+ï] ]¦‹Á+ï] ]¦‹Á+ WìMÁ+ W¡‡®MD*Zö\w‡?EYö\â‰7%M?E5ˆ»eï]Š*¢†·†®MùŠ W•‡ ‹D*Zö\w‡?EYö\â‰7%M?E5ˆ»eï]ŠD* WìMÔ(¹TAoÔ(¹THÇ‹Ô(¹TAoÔ(¹TH ]Ö‹*ó‹m` ]ŒÔ(¹TAo*ó‹1Œ S*ó‹1Œ SÔ(CŒ`Ho[TŒ^ŒeŒoŒÔ(¹TŒŒ ŒÔ(¹T¸ŒÇ‹Ô(¹TÀŒ ŒÔ(¹T¸ŒÇ‹Á+Í]CŒ ]ÄTÕŒÁ+Í]CŒ ]æVÔ(ÄT?E9ÄTP7%M?E¹T%MÄTvÔ(Ao?E9¡7%M?E¹T%M´Ô(¹TÌßïÔ(¹TÌ ŒKom`ŒŒ SÁ+m`ÀŒ SÔ(¹TAoKom`¸ŒŽKom`ÀŒ S?E¹T%MH ]%ŽÔ(¹TH ]Ö‹Ô(ê\4a„[æV?EêU4a„[PŽ7%M?EÍ]»eCŒZ‹Ž*ó‹1Œ ]ÄT³Ž*ó‹1Œ ]Œ*ó‹1Œ ]ŒÔ(ê\4a„[æV?EêU4a„[PŽ7%M?EÍ]»eCŒZ‹ŽÔ(ÄT?E9ÄTP7%M?E¹T%MÄTvÔ(Ao?E9¡7%M?E¹T%M´?EòŽ 7%M?E3+RzŠ>Ô(*gE?EòŽ[u7%M?E3+R(Só‚Ô((S`HÁ+m`ÀŒ S*ó‹1Œ ]ÄT³Ž*ó‹1Œ ]Œ*ó‹1Œ ]ÄT³Ž*ó‹1Œ ]Œ*ó‹1ŒÄT–*ó‹1Œ S*ó‹1ŒÄT–*ó‹1Œ S*ó‹1ŒÄT–*ó‹1Œ S*ó‹1Œ SKom`HŽÔ(CŒ`Ho[ÇÒ%Mã?EÇ»eÒZ‹ Á+m` ]dcÁ+m` ]dcÁ+m``H*ó‹1Œ SÔ(ê\4a Œ?EêU4au7%M?EÍ]»eCŒó‚Ô(ê\4a Œ?EêU4au7%M?EÍ]»eCŒó‚?EÍ]=\E>Ô(¹THÇ‹*M_%Mqo[ÇÒH%Mo[ÇH%MoŒ?EÇ»eÒZ‹ o[ÇÒ%Mã*M_%Mq*M_%MÄTÈ*M_%Mq‘‘H ]%‘o[ÇÒH ]7H‘7777O‘7GG7õGg*hmÔi–khnÓPi¢º»Pk k()*l7¹[9iŸ¸¹jÕk"°<lëP0123=NOPRflmnopqrstuvwxy|‘“•–žŸ¡¢£¥´¶¸º¿ÌÓÔÖèóôúûüþ3456789:@BDFS]^d+66EJXXˆˆ˜˜ïö  ë ‚¨&,«g=ëgRëhˆŠŽëiÉÌt 6X´%GGHHHLLMMM{{€‚ƒƒ…††ŠŠŽŽŽŽšš››››¨©©«¬¬]D  Ýg#Nmnopqrstuvw‘“•–ÓÔô3456789:]^diœ&3!#%¦i®fjöø&k]¦k+,&l9fl]Ï R´¶¸º¿þ@BDFÏ.­®12˜#/46<EJX\^fˆ˜­®Ìïöüþ 12ØOO˜hyXjó@AXlPSa-2oqsuw„…†–ª«¬®()*./02468:áh†ái¿¿À!jÙ¡jájÊ;|Êk0Ó‹ÓCEJˆ˜¥ïö  #“g46i˜š›Ój<ŽEGHJLMNNOlmmnnooppqqrrssttuuvvwwxxˆŠŽ‘‘““••––š›žžŸ¡¡¢¢£¥­®´¶¶¸ººÓÓÔÔÖÖèñòóôôöøùúúû   1233445566778899::@BBDFFS]]^^_dd H›ù E!;11122233344488<<<===GL\\\^^^{€‚„„…Šš§§¨ªª«ñø &)++,..ÅgEG…jü®GHLM{ŠŽš›ñòøù  î.6CEGJLXz{~€‚„…ˆŠ˜š§¨ª«ïñöø   #%&()+,./nA%ññòòòøøùùù      &'')**,--/00nhwnl^w7G123=7hrwl_@ *0lžŸ¢ó€D{€dŽ€i©Ú@jåèS©j2?¥òiÓÛ#ƒ©'-k[k_›lddo/0126<=PX^flmnopqrstuvwxyz|~ƒ„†Ž“•–œžŸ ¡¢£§©ª¬­®ÌÓÔÕÖרÚèòóôùúûü !"%'(*+-.0123456789:S]^_`abcd$hpäi¿Àdk!`ÍQ/012348<=COPPRR\^tuvwxz~„ŠŽ‘“•–š›œ¡§ª­­®®¿Ö×úûüüþþ    #%(+.1122789:^_ ­®12M /< RMMhtÍhƒÕÍi½¾jþlbVg-.g1=ÿgcfÌl`ˆQýÈ<=ÌÓÔÕÖרÙÚS]^_`abcdd›ˆg2ˆiª«¬Hjïñˆk'bÑ fyz{˜ÌQjò:gzg0z~úiÔ:k^úk5dC By|œ£"Ã>CBOPRTlx„œžŸ ¡¢£¥§ª´µ¶·¸¹º»ÕÖרÙÚèóúû!"#%(+.@ABCDEFGS_`abcƒh xž¡¶·úBCÃh‚ÃjBC¬›,hqlk"#5@/08<Blœ×Ù "#_aõgX\^Õh„…†õh‘“Þ5DIQW}‡—¤îõý þ.CEJXz~„ˆ˜§ªïö  #%(+.žFyzgži­~jû~k%&>l=>çk30!/468<CEJX\^ˆ˜­®ïö  12p9iÏëV°h|~€°k-c EGz~˜ö Y! GL{€…«ñø)/YA ##%%((ÙVl´µZ\^ho¢‚ƒ…†¨©«¬&')*,-/0â?66CCEEJJXXˆˆ˜˜ïïöö  ¢h{€‹Bzz~~ËjDET::ÅÅLLTPRüþT+HMƒ†Ž›©¬òù '*-0”i¬Ôk1”lc½ = CJL‚„…ˆŠŽ§¨ª«ïñ #%&()+,./}+HM=G123=½gBÙýh•ÖýjÆ¥†CRH†la/`3oi£¥/jßhojù/kïk4¸k./0Á 011223346<==X\^¿AhsAi Ø*gjg/<êj3 BMƒ†Žœ ©¬ÕרÙÚò!"'*-0_`abcó?GHLMŠŽš›ñòøù  sg0¿À³gBCœ {€š›ø  œg8œk*Ük2%#‹Œe9bÈäOŽ!Šš Ž(Ž› Î@ Ÿ´µ¸¹ó@ADEÎgJLk×g$Nmnopqrstuvw‘“•–ÓÔÖô3456789:]^dWhuWi¢º»FG—j  48\^àV4I$HMòùIi¡ jÖÒTNj×{ahÇÎãêNU{hx»h~»j Ä@3//00666PPRRTXXXtuvwˆ‘“•–˜œ­®Ö×üüþþ  12789:^_DkÄk/l6-#Œ¶ ö £¥¶>2oqsuw„…†–ª«¬®()*./02468:vAGHLMŠŽš›ñòøù  vi§¨vjúvk"ak///0012346688<<=BCCEJPRXX\^ltuvwz|~~€„ˆˆŠŽ‘“•–˜˜š›œœŸ§ª­®´¸¿¿Ö××Ùïöüþ      #%(+.12789:D^__€C ŠŽŽš››   _i£¥_jô_lZ¨ 2oqsuw„…†–¬®()*./02468:h4\^(iœ×hi£èi¿À(jÚq$†¬*01iž¶·±i²³±j   ñj1l:jØÚjFGZl8c£g<ãgPTchvLEahÇÎãêNUŒhyz{hÇÎãêNUŒhyz{$ Dÿÿ®y Dÿÿþþ“}@ÿÿ´´Ž}@ÿÿ³³‰}@ÿÿ ²²€}@ÿÿ ±±w}@ÿÿ°°Úp@ÿÿ¯¯n}@ÿÿ®®p@ÿÿ­­d}@ÿÿ¬¬\}@ÿÿ¦¦!}@ÿÿ!‹‹}@ÿÿ'ŠŠ}@ÿÿ*‰‰ð|@ÿÿ/ˆˆâ|@ÿÿ2‡‡Ô|@ÿÿ7††Ä|@ÿÿ>……¶|@ÿÿD„„§|@ÿÿGƒƒ˜|@ÿÿJ‚‚–{@ÿÿN@@‡{@ÿÿR??x{@ÿÿU>>o{@ÿÿX<<™} @[;;d{ @ÿÿ1];;d{@ÿÿa::[{@ÿÿd99S{@ÿÿh88G@ÿÿk66={@ÿÿq22I{@ÿÿv11+{@ÿÿ{005{@ÿÿ//"{@ÿÿƒ.. {@ÿÿˆ,,üz@ÿÿŒ**{@ÿÿ‘(({@ÿÿ•''âz@ÿÿœ&&Ìz@ÿÿ¢%%ðz@ÿÿ©$$Øz@ÿÿ¯##´z@ÿÿµ""¢z@ÿÿº  Áz@ÿÿÀ¬z@ÿÿÅŠz@ÿÿËxz@ÿÿЗz@ÿÿÖ‚z@ÿÿÛjz@ÿÿà^z@ÿÿäIz@ÿÿè–y@ÿÿîúú‰y@ÿÿôúú~y@ÿÿùùùhy@ÿÿþùùy@ÿÿéé&y@ÿÿ èèúx@ÿÿçç y@ÿÿææêx@ÿÿ!ääÛx@ÿÿ&ããÎx@ÿÿ+ââ¿x@ÿÿ2àà°x@ÿÿ9ßß¡x@ÿÿ@ÞÞ“x@ÿÿGÝÝ…x@ÿÿNÜÜwx@ÿÿUÛÛhx@ÿÿ[ÙÙYx@ÿÿaØØLx@ÿÿg××>x@ÿÿmÖÖ0x@ÿÿsÕÕ$x@ÿÿyÔÔx@ÿÿ~ÒÒx@ÿÿƒÑÑüw@ÿÿˆÐÐïw@ÿÿÏÏâw@ÿÿ’ÎÎ×w@ÿÿ—ÍÍÉw@ÿÿ›Ë˼w@ÿÿŸÊʯw@ÿÿ¥ÉÉ£w@ÿÿ«ÈÈ—w@ÿÿ¯ÇÇŠw@ÿÿ´ÆÆw@ÿÿ¸ÅÅsw@ÿÿ½ÄÄgw@ÿÿÃÁÁ\w@ÿÿÉÁÁ«} @`Ͼ¾Nw @ÿÿ1Ѿ¾Nw@ÿÿؽ½À} @cÞ¼¼Aw @ÿÿ1༼Aw@ÿÿç»»4w@ÿÿí¹¹(w@ÿÿó¸¸Ô} @hø¶¶w @ÿÿ1ú¶¶w@ÿÿµµç} @k´´w @ÿÿ1´´w@ÿÿ ³³w@ÿÿ±±ýv@ÿÿ°°ñv@ÿÿ¯¯çv@ÿÿ®®Üv@ÿÿ#­­Òv@ÿÿ'¬¬Êv@ÿÿ+««¿v@ÿÿ0ªª¶v@ÿÿ5©©¯v@ÿÿ8§§¨v@ÿÿ;¦¦ù} @y>¥¥Ÿv @ÿÿ1@¥¥Ÿv@ÿÿD¤¤˜v@ÿÿH££‘v@ÿÿM¢¢‰v@ÿÿQ  €v @@ÿÿTJK€v@@ÿÿWŸŸzv@ÿÿ[žžqv @@ÿÿ]HIqv@@ÿÿ_kv@ÿÿbœœ`v@ÿÿe››Yv@ÿÿiššNv@ÿÿk™™Gv@ÿÿn˜˜>v@ÿÿs••øu@ÿÿ{ˆˆv@ÿÿ‚‡‡v@ÿÿ‰††Ðu@ÿÿ‘……êu@ÿÿ˜„„Þu@ÿÿŸƒƒÁu@ÿÿ¤´u@ÿÿ©€€¦u@ÿÿ®šu@ÿÿ³~~ru@ÿÿº||Œu@ÿÿÁ{{€u@ÿÿÇzzMu@ÿÿÎyyeu@ÿÿÕxxZu@ÿÿÛww?u@ÿÿáuu1u@ÿÿçtt%u@ÿÿíssu@ÿÿórr u@ÿÿùqqu@ÿÿÿppót@ÿÿnnæt@ÿÿ mmÛt@ÿÿllÏt@ÿÿkkÃt@ÿÿjj¹t@ÿÿii t@ÿÿgg‡t@ÿÿ"ffzt@ÿÿ&eent@ÿÿ*ddbt@ÿÿ0ccWt@ÿÿ4bbKt@ÿÿ9aa@t@ÿÿ?``6t@ÿÿC__+t@ÿÿH^^t@ÿÿN\\t@ÿÿT[[t@ÿÿXZZ—c@ÿÿ]XXÿs@ÿÿbXX ~ @µgUU%s @ÿÿ1iUU%s@ÿÿoTTôs@ÿÿuRRês@ÿÿ{RR~ @ºOOs @ÿÿ1ƒOOs@ÿÿŠNNÔs@ÿÿ‘MMàs@ÿÿ—LLÊs@ÿÿ›KKÂs@ÿÿŸJJ·s@ÿÿ¤II®s@ÿÿ©HH°T@ÿÿ­GG§s@ÿÿ°FF/~ @ųEEžs @ÿÿ1µ EEžs@ÿÿ¹ CCŒs@ÿÿ¼ BB–s@ÿÿ¾ @@ts@ÿÿÅ ??`s@ÿÿË >>s@ÿÿÒ ==ks@ÿÿØ <<Js@ÿÿÞ ;;:s@ÿÿã 99Vs@ÿÿé 77Cs@ÿÿî 660s@ÿÿò 55?~ @Ó÷ 44s @ÿÿ1ù 44s@ÿÿÿ 33P~ @Ö 22s @ÿÿ1 22s@ÿÿ 11»r@ÿÿ 00ïr@ÿÿ //Ür@ÿÿ ..Êr@ÿÿ --Ãr@ÿÿ  ,,§r@ÿÿ% ++™r@ÿÿ) ))²r@ÿÿ. ''¡r@ÿÿ2 &&’r@ÿÿ4 %%‹r@ÿÿ7 $$„r@ÿÿ: !!|r@ÿÿ= [r@ÿÿA Tr@ÿÿD 1r@ÿÿH ,r@ÿÿK $r@ÿÿN r@ÿÿR r@ÿÿV r@ÿÿZ r@ÿÿ^ r@ÿÿa —F@ÿÿd úq@ÿÿg õq@ÿÿj  c~ @óm  îq @ÿÿ1o  îq@ÿÿs  áq@ÿÿu Ùq@ÿÿw Ôq@ÿÿz Íq@ÿÿ€ Ãq@ÿÿƒ ¹q@ÿÿˆ ³q@ÿÿ‹ ¥q@ÿÿ ÿÿq@ÿÿ” þþ‡q@ÿÿš ýýwq@ÿÿŸ ûû“q@ÿÿ¥ ùù€q@ÿÿª øø\q@ÿÿ° ööfq@ÿÿµ ôôTq@ÿÿ¼ óóAq@ÿÿ òò;q@ÿÿÆ ññ1q@ÿÿÉ ðð+q@ÿÿÍ ïï!q@ÿÿÒ îîŽN@ÿÿ× ííq@ÿÿÜ ëëÀU@ÿÿà ééq@ÿÿâ èèép@ÿÿæ ââáp@ÿÿé ÚÚÔp@ÿÿî ÕÕÇp@ÿÿò ÔÔ½p@ÿÿô ÓÓ¦T@ÿÿ÷ ÒÒ¶p@ÿÿú Ñѯp@ÿÿý ÐЪp@ÿÿ ÏÏ¢p@ÿÿ ÌÌ„p@ÿÿ ÇÇÆU@ÿÿ  ÆÆyp@ÿÿ  ÅÅpp@ÿÿ ÄÄ`p@ÿÿ ÁÁXp@ÿÿ ¼¼Jp@ÿÿ »»to @ÿÿ ’’Yo@ÿÿ ‚‚6 @ÿÿ DD€n @ÿÿ:Cq~@0" ;;~~@0"!<<‹~@0""==™~@0"#>>§~@0"$??µ~@0"%@@Æ~@0"&AAÖ~@0"'BBS} @ÿÿ(ŸŸJ} @ÿÿ)žž‹| @ÿÿ+~~€| @ÿÿ-}}o| @ÿÿ/ww^| @ÿÿ0vvN| @ÿÿ2uu>| @ÿÿ3tt1| @ÿÿ6ss$| @ÿÿ8rr| @ÿÿ;qq| @ÿÿ=ppJo @ÿÿ>\\#v @ÿÿ?YYÖ{ @ÿÿAQQÈ{ @ÿÿDPPzv @ÿÿGOOkv @ÿÿINNxG @ÿÿJ55Ry @ÿÿKîî3v @ÿÿL=r @ÿÿMƒF @ÿÿN6p @ÿÿOµµp @ÿÿP¯¯p @ÿÿQ®®p @ÿÿR­­øo @ÿÿS¬¬éo @ÿÿT««Üo @ÿÿU©©Ïo @ÿÿV¨¨Âo @ÿÿW§§µo @ÿÿX¥¥§o @ÿÿY¤¤‡o @ÿÿZ¡¡ëN @ÿÿ[   o @ÿÿ\ŸŸšo @ÿÿ]žždo @ÿÿ^šš{o @ÿÿ`““&3 @ÿÿayy?o @ÿÿbss7o @ÿÿcqq-o @ÿÿdpp#o @ÿÿeooo @ÿÿfnn o @ÿÿgkko @ÿÿhjjûn @ÿÿiiiÜn @ÿÿj^^Ón @ÿÿk\\Èn @ÿÿlPP¾n @ÿÿmOOrn @ÿÿnEE¬T @ÿÿo66en @ÿÿp44[n @ÿÿq..Tn @ÿÿr,,Mn @ÿÿs%%Bn @ÿÿt_bgjx´¹ÄÒÕò#$%&'()**nE*¸Œµ“Á“*µ“Ò“*¸ŒgE*nE*µ“Ò“*nEaoÞ“î“”*nEÔ(”.” S*¸Œµ“Á“Á+F”%M„[µ“Z”¤+µ“Ò“*µ“” ”¬”kXµ“Ò“*µ“Æ” ”Ó”Á+ê”=ø”„[µ“ •Á+ê”ø”„[µ“J•*µ“Ò“*µ“Ò“z••µ“Œ•z••‡µ“¨•z•µ“Ò“D* ŠÚ†?E«‰$‰7%M?E³W2M:‰*[LìMaowX½•®MHÿMìM?EÒ•[L½•ß•î•ao[L½•ß•'–?EÒ•[L½•U–ao[L½•®MaoÞ“½•„–*Þ‘ÄT¬œ–*Þ‘¬Ç–*Þ‘ÄT¬œ–*Þ‘¬Ç–*ï] ]Þ‘ÄT¬ß–*ï] ]Þ‘¬)—*ï] ]Þ‘ÄT¬ß–*ï] ]Þ‘¬)—*ï]Þ‘ÄT¬`—*ï]Þ‘¬œ—*ï]Þ‘ÄT¬`—*ï]Þ‘¬œ—*µ“Þ‘ÄT¬Å—*µ“Þ‘¬ú—*µ“Þ‘ÄT¬Å—*µ“Þ‘¬ú—*Þ‘ÄT˜-˜*Þ‘˜Y˜D*r˜Œ˜®M*ZÞ‘õ‘§˜’*ZÞ‘õ‘¬L’*ZÞ‘§˜‚’*ZÞ‘¬¦’*³W= ]Þ‘ÄT˜µ˜*³W ]Þ‘ÄT˜É’*³W= ]Þ‘ÄT¬™*³W ]Þ‘ÄT¬“*Þ‘ÄT˜-˜*Þ‘ÄT¬œ–*Þ‘ÄT¬œ–*³W=Þ‘ÄT˜É’*³W ]Þ‘ÄT˜É’*³W ]Þ‘ÄT˜É’*³W=Þ‘ÄT¬“*³W ]Þ‘ÄT¬“*³W ]Þ‘ÄT¬“*µ“Þ‘ÄT˜Z™*µ“Þ‘ÄT˜Z™*µ“Þ‘ÄT˜Z™*µ“Þ‘ÄT¬Å—*µ“Þ‘ÄT¬Å—*µ“Þ‘ÄT¬Å—*Þ‘ÄT˜-˜*Þ‘ÄT˜-˜*Þ‘ÄT˜-˜*Þ‘ÄT¬œ–*Þ‘ÄT¬œ–*Þ‘ÄT¬œ–*Þ‘˜Y˜*Þ‘¬Ç–*³W ]Þ‘˜R“*³W ]Þ‘¬„“*Þ‘˜Y˜*µ“Þ‘˜™*Þ‘¬Ç–*µ“Þ‘¬ú—*Z„[Þ‘§˜R“*Z„[Þ‘¬„“*Y„[Þ‘§˜³™7%M*³WfY ]Þ‘˜î™*Y„[Þ‘¬.š7%M*³WfY ]Þ‘¬hš*³W2MÞ‘˜R“*³W2MÞ‘¬„“*YÞ‘§˜§š7%M*5ˆ2MÞ‘˜R“*YÞ‘¬Ôš7%M*5ˆ2MÞ‘¬„“*Þ‘˜Y˜*Þ‘˜Y˜*µ“Þ‘˜™*µ“Þ‘˜™*Þ‘¬Ç–*Þ‘¬Ç–*Þ‘¬Ç–*µ“Þ‘¬ú—*µ“Þ‘¬ú—* WìMD*‚ˆÚ†D*³ˆ$‰7%MD*̆2M:‰* Wµ“›D*5ˆ›µ“.›z••µ“Œ•z•J›U›z•J›U›z••‡µ“¨•z•nEz•nEz•µ“Ò“z••‡U›z••‡µ“¨•z•nEz•µ“Ò“ao[L½•`›l›*zH= ]î“ÄT˜•›*zH ]KoÄT˜â›*zH ]î“ÄT˜â›*zH= ]î“ÄT¬!œ*zH ]î“ÄT¬mœ*zH ]î“ÄT¬mœ*î“ÄT˜«œ*î“ÄT˜«œ*î“ÄT¬Ôœ*î“ÄT¬Ôœ*zH=î“ÄT˜â›*zH ]î“ÄT˜â›*zHî“Vk˜üœ*zH=î“ÄT¬mœ*zH ]î“ÄT¬mœ*zHî“ÄT¬-*µ“î“ÄT˜]*µ“î“ÄT˜]*µ“î“ÄT˜]*µ“î“ÄT¬*µ“î“ÄT¬*µ“î“ÄT¬*î“ÄT˜«œ*î“ÄT˜«œ*î“ÄT˜«œ*î“ÄT¬Ôœ*î“ÄT¬Ôœ*î“ÄT¬Ôœ*nE*\EgE*Â*°*Í] ]Ø*Â*µ“ž*Í] ]$ž*°*µ“Ož*zH ]Ø*zH ]$ž*Â*ê\î“§˜nž*ê\Œž*êUî“§˜©ž7%M*zH%MØ*ê\„[î“§˜Ø*ê\„[$ž*êU%Mî“§˜Ðž7%M*zH= ]Ÿ*zH= ]Ÿ*zH ]Ø*Â*Â*µ“ž*µ“ž*¸Œµ“Á“Ô(?ŸAo?EMŸ¡7%M?E3aŸ´?EÒ•oŸaonE*CŒ ]î“ÄT¬|Ÿ*CŒ ]ÀŸ*CŒ ]î“ÄT¬|Ÿ*CŒ ]ÀŸ*CŒî“ÄT¬ñŸ*CŒî“¬' *CŒî“ÄT¬ñŸ*CŒî“¬' *°*êUJ 7%M*zH=$ž*êU%Mp 7%M*zH= ]¤ *µ“3¨I%MÝ *nE*¡­\*¡gEHµ“?Ÿ"¡*î“ÄT¬Ôœ*°*î“ÄT¬Ôœ*°*nEHµ“Ò“*Q`H*Q`H*6¡O¡ S*Q`H*h¡µ“Á“*m``H*¸ŒgE*¸Œµ“Á“*°*°aoX`r¡ S*µ“Ò“H(S`H*µ“Ò“Ô(?ŸAoÔ(òŽ¡7%MÔ(3aŸ´*nE*nE*µ“Ò“Á+„¡%M„[µ“Z”¤+µ“Ò“*µ“” ”¬”kXµ“Ò“*µ“Æ” ”Ó”*µ“•¡¨¡*µ“î“ÄT¬*µ“Ož*µ“î“ÄT¬*µ“Ož?EÒ•Qr¡ß•Å¡aoQr¡µ“ø¡Á+ê”=ø”„[µ“ •Á+ê”ø”„[µ“J•*m`µ“ ¢*¸ŒgE*¸Œµ“Á“*µ“Ož*µ“Ož?EÒ•Qr¡:¢aoQr¡ S*nEÔ(c¢.” S*µ“Ò“Ô(3x¢µ“†¢*µ“Ÿ¢¬¢*nE*µ“Ò“*µ“Ò“*µ“Ò“*µ“Ò“aoÞ“r¡”*nE*µ“Ò“?Eµ“Ò“Hµ“Ò“aoQr¡`›Ã¢*¸Œµ“Á“*µ“Ò“¤+aonEæ¢Ô(*Ô(****Ô(ô¢þ¢7£7£ £%£(£=£%£W£k£%££‰££›£%££ê££77#¤6¤;¤%£6¤Q¤%£6¤_¤6¤7j¤4¥77´lE¥L¥S¥Z¥a¥h¥L¥o¥v¥}¥7„¥—¥ª¥7½¥Ê¥ CGGkGiiÀl Cºl CÍ¥æ¥ÿ¥¦7 ¦i¦¦¦7áÇpÔGq òòóó„„……‘‘Gv˜EINTÐuƒ…¹q”¹tis12‚zkxD¸ë4»¿ÁÊÌÏÐØÚâéô!5@Zde“•œ­ÊËâãä./189‡‰­¯²´ë  E¥;k&ùë?.òó13LMNT[\wxyz{|ƒ„…†‡ˆ¸¹»½ÈÉÛÜÝÞßàæçèé:„…Š‘‘ëN ks<kvœNtoŒ’•Ôþts=?ôsR]D»»½½&3wy{¦TÒfj&p±¦u&yè¦{DpÊ­r˜#679;<=>? "#$%&ur˜v£{(˜|‚Ža-Gùý'+7;=?ijklmnpqrstuwxyz{|~€ƒ„…†‡ˆÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèéú"$&(,ápÚe¯áqJo¹\Jp»gpÊr-Js7;ÊsKÊv«J}žÓPV¿÷Ó)+139;>?NTy|…³µ»½Ýàçé "%&*,Ón\Sz¦S{8S}Ÿ<Ë¿¿ÁÁÊÌééëëíîñôôööøùûý!&')+12345667799;;<=>?HIJKLMNORTUXZ[\^_`abcdeijklmnpqrstuwxyz{|~€ƒ„…†ˆ““••š›žŸ£§©ª«¬­®¯°±³´µ¶¸¹»¼½¾ÁÄÅÆÇÈÉÊËÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèéùú  ""#$%&'(*,.//001122889?­¼o¥¼wÊ?@z{‚ƒ„…†‡ˆ‰Š‹¦¬­®¯°±²³´d уdoˆšd{:;ä{Sbd}¬ÍTòòòóóóó01123<=>?LMMNNORT[\`cxy{|ƒ„……†‡ˆˆ¤³µ¸¹»»¼½½¾ÁÈÉÛÜÝÞßàæççèéé#$%&:„„„…………ŠŠŠMn%,Íq–MuwyÖo¨®Vs7Ö{QTv?os?uu¿vª¿xàúˆýˆ9HIJKLMNOTUZ\abcelmnstuz{|€†‡ˆ®¯°±µ¶¹½¾ÆÇÉËÐÑÒרÙÞßàäèérxÑ|pr‘n=qéë‘v¢w³´zgÕ 0CEúq²ztezvžOúxæçCéôøù&',67<=@Lwzƒ†æè#$'(/1Ã!O¾Ã>ñ£¤§Ãq•Ãr,Cs6ÃtjÃ{NNOOPPQQTTUUVVŽŽ’’““””••––——¬T6¬nA,r¬z5#5HIJKLMNTZ\abcelmnstuz{|€†‡ˆ®¯°±µ¹½ÆÇÉËÐÑÒרÙÞßàäèéµo¥5{/îžF6žsCEt\çnbçv®gwÁp9å©pCÿ†ˆppÄðz$ð|ˆ”YA¢¢¤¤³³µµ¸¸¹¹::Yo‚žŸ ÙqkYvšFKOUYxØ¢¥¦¢pÌ­"z¢z "{.‹r$ uq‹|{~”5gipqv‡ýv°ÆUÆŽ¯o¤¯pÐd¯v§¯wÉ8v8}’’s=}‰•êsRêu„êxäjzó? 24ORUX´¶¼¾ÁùúótnswÄÜ<¿ÁÊÌéëôö0“•./0128Ün^Üo©\qôöÜr.Üv­\wÁ\}£¦%# PQSVWY¿ÀÂ÷øû¥qÿ’%s4TU%usŽ˜™š›œžŸ  >?@@HJŽ!U¶ŽNís2NOŽ}³—F—cX—n>cd—wÇ—z`p¿Á`s<>àsL`v›IF¿Áéëôö!“•/0129Éo§ÉwËIz I{1Rpc»¼ÄÅÆÏÐÑÒÔÕØÚëíîïñòóôöøùûýþÿ$,0BGHI^apqrstu˜šœž ¢£©ª®¯ÄÆÔÕÖרÙ02>?@z{‚ƒ„…†‡ˆ‰Š‹‘‘¯²³Òv¬Ryîòùú;&X;qñ»r,0oj„o““––„pǬ„r!_ 24ORUX´¶¼¾Áùú( 13y¨ Fùý'+7;=?ijklmnpqrstuwxyz{|~€ƒ„…†‡ˆÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèé"$&(,èiJKhpÁ•¨v¦(w¸hxÙhyù1+ RX¦Áùúñnc1qð±1r³1utqvEHñv¯1|sušožEIktvp¯ÚpدZuwšu~cSYÂû½ã"4´£n@#ooão©#vŠY£wÈLEÝä ¡¨Œn<fhpq–– p­Œs@BŒu{Lx×Ìz#% {(,>#2¼þ.ÅëöBC02:¾nLO\^ž>v“•>xÖ~yù>|t‡n;gipq‡o¡qè°‡qùýtZ‡tfv†‡{?Pzù Ka‹°¾É×’šypÅÂBnÂo§ÂsJ+ C+qï«qÿ†ˆ+t^+{/0´    2244EFFOORRRUUXXq´nB´u€4w¹4yì´z":µn?eqþfqôætmÏ HJÏ.±¼ÆÇÑÒÓÔÕèíîïðñòóøùûýþÿ%&')+-./013679;<=>?GHIJKLMN[\^_`abcijklmnpqrstuwxyz{|~€ƒ„…†‡ˆ˜™š›žŸ ¢£¤§©ª«¬®¯°±¸¹»½ÄÅÆÇÈÉÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàæçèé "#$%&'(*,>?@‚ƒ„…†ˆŠ‹¬®°±³Ïo¨ÏpÔþÏtkXp¼iqØz#!qî¡r&¡xÞ!}‹—ŠwÆŠz“qù“xÝ“}´|r!üwÐüz'*E!   00224CCEOOTTU¥´¶¼¾;ŠŠE}––® 24ORUX´¶¼¾Áùú®sH7oq7r·sI€D  ,F;<€n:D€qørup€uz€vŸFJ|ccddeeffgghhiijjppppqqqqrrss€|z}€}±iDéo«épßâ¦rn9Eòo«òpâruz|ryùÛ# F¦<[n,.[rÛtlÛxã[{9$$rl$xÔ¤yú$|rt F<G6T}~ ok–Ôú– ,on–pÊÌ.­r–s@xÒyèé–yú–{@V|qsÿo¬ÿsXwÅÈ !¦¬­®¯°±²³´ÈnMPÈ{PUwÑ ââ6¦¦Ñëö02Ñ,OU¶¾:s69ƒBƒFlSbõq Þ ]rêõú (8A)Þuƒ^z^|v§o¤§r'+§sF§|ƒ0Š0!`c¢³µ°TG—0p±0s50xÕ°xß0z0}’’ "Õ CEMNT`cx{|…ˆ¢¤³µ¸¹»½ÈÉÛÜÝÞßàçé:; 0‘íîøùûý&')+12345679;<=>?HIJKLMNORTUXZ[\^_`abcdeijklmnpqrwxy{|~€ƒ„…†ˆ©ª«¬­®¯°±³´µ¶¸¹»¼½¾ÁÄÅÆÇÈÉÊËÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèéùú "#$%&'(*,­q–íîøùûý&')+.12345679;<=>?HIJKLMNORTUXZ[\^_`abcdeijklmnpqrstuwxyz{|~€ƒ„…†ˆ©ª«¬­®¯°±³´µ¶¸¹»¼½¾ÁÄÅÆÇÈÉÊËÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèéùú "#$%&'(*,­™r&)b<=>?â?ó1133MMNNyy||……ˆˆÝÝààççéé…‘‘brbtcâwÎâz$&â|‡“KtaT  ššT#$%&T+F<Tn,ÔpÕTqó‘ÔqjkTrÔsLMÔ|†’½ V»¼ÄÅÆÒÔÕíîïñòóôöøùûýþÿ$,0GHI^apqrstu˜šœž ¢£©ª®¯ÄÆÔÕÖרÙ12>?@z{‚„…†‡ˆ‰Š‹²³½pÓ®=r={12†fw±o,RÁorïr/ïwÏo{<o|wxG45øo¬cøu†ˆxzx{>QÁAqòÁuAw»¼ÁzªMPªpÏc³@“³q“3vŽœ LORU[\ƒ„†‡¥´¶¼¾Áæèw´µ¶ùe9Þ ¢en4euxνÎ&úÎ@¼ïðGš›žŸ ?@‹±³Nv™Nw¼½¾ÎxâN|u×r-Wtb×wÍ oŸFKluw p¯ tg‰v V yæ‰yú‰}²p®’r%´t[}Š–{Ýä ¡¨ûni{o“–ûpâ¦ÄýÄ@AÕÕ1<<==>>??LLMN[[\\``ccxx{{ƒƒ„„…††‡‡ˆ»½ÈÈÉÉÛÛÜÜÞÞßßææçèèé##$$%%&&Ä|…‘-#QWÀø-opŸ6sD‚»¼¿ÁÄÅÆÊÌÏÐÑÒÔÕØÚéëíîïñòóôôööøùûýþÿ$,0@BGHI^apqrstu“•˜šœž ¢£©ª®¯ÄÆÔÕÖרÙ./011228>?@z{‚ƒ„…†‡ˆ‰Š‹­¯²³¶>Eùý'+7;=?ijklmnpqrstuwxy{|~€ƒ„…†‡ˆÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèé"$&(,6pµ¶pÑ6t_¶v©¶|„v¼ÁÊÌÏÐÕØÚïðòòóóóþÿÿ -.001123<=>?CGLMMNNORT[\`cfxy{|ƒ„……†‡ˆˆ• ¢¤³µ¸¹»»¼½½¾ÁÈÉÛÜÝÞßàæççèéé#$%&.:@„„………††ˆˆŠŠ‹­¯±³CòòóóRR¼¾ÁÁ„„……ŠŠ‘‘rhlŸv¤¥Ø Dÿÿ@BXZlnRyT`ht"z0`kN Ó !.9FOR^frc ,46DL\dpxzCT`ht“xh<T`ht,'?WkÄw`¤y ;?@HJhkltvz6 z,z02HJ`btv››G‚@ÿÿAšš;‚@ÿÿE™™2‚@ÿÿH˜˜&‚@ÿÿL——‚@ÿÿO––‚@ÿÿS••‚@ÿÿV””ü@ÿÿZ““ó@ÿÿ]’’æ@ÿÿa‘‘Ü@ÿÿdÐ@ÿÿhÇ@ÿÿkŽŽ»@ÿÿo²@ÿÿrŒŒ¦@ÿÿv‹‹@ÿÿyŠŠ‘@ÿÿ}‰‰ˆ@ÿÿ€ˆˆo@ÿÿƒ~~e@ÿÿ†}}[@ÿÿ‰||Q@ÿÿŒ{{F@ÿÿzz=@ÿÿ“yy2@ÿÿ—xx)@ÿÿšww!@ÿÿvv@ÿÿ uu@ÿÿ¤tt@ÿÿ§ssû€@ÿÿ«rró€@ÿÿ®qqè€@ÿÿ²ppà€@ÿÿµooÕ€@ÿÿ¹nnÍ€@ÿÿ¼mm€@ÿÿÀllº€@ÿÿÃkk¯€@ÿÿÇjj§€@ÿÿÊii›€@ÿÿÎhh’€@ÿÿÑgg‡€@ÿÿÕffÊT@ÿÿØee|€@ÿÿÜddt€@ÿÿßcci€@ÿÿãbba€@ÿÿæaaV€@ÿÿê``N€@ÿÿí__C€@ÿÿò^^4€@ÿÿö]]±@ÿÿ÷<<¢@ÿÿù::š@ÿÿú77l@ÿÿû,,t@ÿÿý**¹ƒ @ÿÿþvv±ƒ @ÿÿÿuu©ƒ @ÿÿtt¡ƒ @ÿÿssó‚ @ÿÿddÝ‚ @ÿÿcc—ƒ @ÿÿ bbŒƒ @ÿÿ aaé‚ @ÿÿ__Ò‚ @ÿÿ^^o @ÿÿ]]e @ÿÿ\\]ƒ @ÿÿWW[ @ÿÿQ @ÿÿ= @ÿÿ) @ÿÿ @ÿÿ!û€ @ÿÿ$è€ @ÿÿ'Õ€ @ÿÿ*€ @ÿÿ-¯€ @ÿÿ0›€ @ÿÿ3‡€ @ÿÿ6|€ @ÿÿ9i€ @ÿÿ<  V€ @ÿÿ?  Kƒ @ÿÿC  1ƒ @ÿÿGƒ @ÿÿJÓÓx @ÿÿK°°%€ @ÿÿL€ @ÿÿMVV€ @ÿÿNUUÿ @ÿÿOSSô @ÿÿPRRç @ÿÿQQQÜ @ÿÿRPPÒ @ÿÿSNNÈ @ÿÿTMMÁ @ÿÿULLº @ÿÿVKK‚ @ÿÿW44^ @ÿÿX&&1 @ÿÿY& @ÿÿZ*[¦e¦t¦*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦e¦ÄT»¦*[¦e¦t¦z•[¦ÄT–¦z•[¦Šfz•[¦ÄT–¦z•[¦Šf*^ŒÄTð¦*^ŒgE*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*^ŒgE*^ŒgE*^ŒgE*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒgE*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^Œ §ÄT§*^Œ §(f3§3§nED§›*›*nE]§f§p§z§„§%£«§®§%£«§Õ§%£«§û§%£«§!¨%£A¨%£a¨%£€¨%£7Ÿ¨¯¨µ¨¯¨Ï¨¯¨à¨¯¨ñ¨¯¨©©¯¨©E©¯¨©x©¯¨©©¯¨©»©¯¨©Ù©¯¨©õ©¯¨©ª¯¨©1ª¯¨©Oª¯¨©mª¯¨âª©èª¯¨âª©8«âläl77U«l«s«x«}«‚«‡«‹«°l´l7«77žG"‡€fÇŽ&?G‚š,EÐ3LP‚›9R¹ƒqv‚34€lkÙ"{ël]^_`abcdefghijklmnopqrstuvwxyz{|}~ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¢£¤¥¦§©ª«¬æèêìîðòô÷úý<=>?@ABCDEFGIJKLMNOPQRSUnopqt&*.ô Rââøù+8DQ4€]ÚÛÜÝÞßàáâãäçéëíïñóõøûþt€cÜêtƒ":KŠ$=‚–*C_Ý‚ªc]ƒW&3 &¦‹1Jæ‘4M&‚—7PdÏ IJKLMNOPQRSÏM¯€jo~]qv8>Ð8v€%VÚÚááââããççõöøùûü #*+,0789<CDEIPQRx‚°A- a-.^`bdfhjlnprtxz‰‹‘“•—™› £¥§ª¬É IJKLMNOPQRSÁ LVÜÜëë%2>Ka€aÛè!v¡ƒnsÊTeÝì3vó€qãúó’(A“‚¢ó‚¬d\9ÜPààââããóóøùûü)+,689BDEOQR|€dÜ'@ü“5N\‚œ-Fœ‚£%€[me}\pue‚:S…‚ Eƒ   N®Ž>ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œž¢¢££¤¤¥¥¦§©ª«¬®<=>?@ABCDEFGIJKLMNOPQRSÎ@ÐN€_Úæ\tw ÷9É—ƒb€ _aceimuvwyÀ{gÚÚÚÛÛÛÜÜÜÝÝÝÞÞÞßßßàààáááâââãããäää##$$%%&&''(())**++,,--..00112233445566778899::\\\]]]^^^___aaabbbcccdddà€oâ÷i+6;Â"i€b )wé‚«_‰ƒ00112233445566778899::aabbccdd©ƒot:ÑÑÓÓ²:LÒ Nßßññ(5AN€U’€gÞî2x²Œ%>2‚˜+DÒ‚©^{Ï»9»¾ÀÚÛÜÝÞßàáâãäçéëíïñóõøûþûR›€hû€r[|ot»2K;‚™8QdS*,7:<]^_`abcdefghijklmnopqrstuvwxyz{|}~ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¢£¤¥¦§©ª«¬®ÄÈÉÐnopq$. ä{#½Ø€S.GÍ€máô]¶>U^`bdfhjlnprtxz‰‹‘“•—™› £¥§ª¬         IIJJKKLLMMNNOOPPQQRRSSV€` au]]^^_`abcdefghijklmnopqrstuvwxyz{|}~ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¢£¤¥¦¦§§©ª«¬®®ÐÐæèêìîðòô÷úý<=>?@ABCDEFGIJKLMNOPQRSnopqÿ SÞÞïï'4@M€V?ƒ&       ¨ +^`bdfhjlnprtxz‰‹‘“•—™› £¥§ª¬IJKLMNOPQRSÈnopqèi›]^_`abcdefghijklmnopqrstuvwxyz{|}~ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¢£¤¥¦§©ª«¬®æççèééêëëìííîïïðññòóóôõö÷øùúûüýþÿ<<==>>??@@AABBCCDDEEFFGGIIJJKKLLMMNNOOPPQQRRSSUUnopqH 5CµÈ%MÝÝááââããííõöøùûü&*+,3789?CDELPQR€UUè€pˆˆ#<^‚”)B¨‚¤ƒÐÑ1±<>Q{ns‘‰0Ic‚•6Oq‚ž.G±‚¥1ƒ ±ƒpuš7º KVÛÛéé $1=Jº€kàòz‚ŸUãPC€^ l#½Øl$,.Œƒa•:<¦§®Õ€nbƒÑÓÚÛÜÝÞßàáâãäçéëíïñóöùüÿ^"$&ÓUþ‚®ç Qääþÿ-:FS§€ißððQÙ9¾ÄÆÙNuYƒ¢:>"ƒKƒ   Tii:ÑÑÓÓ=€]^¦§®=y½‚¦®#$%&'()*+,-<=>?@ABCDEF†.Æ9ÀÆÈsäýFzÆ‚§0123456789:IJKLMNOPQRS««’@ÿÿ<ªªz @ÿÿ=§§o @ÿÿ>¤¤h @ÿÿ?¡¡R @ÿÿ@ŸŸ; @ÿÿAžžÛ @ÿÿ A+Ah @1 B+ggû @1 C+ffö @1 D+eeè @1 E+ddØ @1 F+ccÐ @1 G+bbÌ @1 H+aaÆ @1 I+``Á @1 J+__µ @1 K+^^¬ @1 L+]]£ @1 M+\\Ÿ @1 N+[[œ @1 O+ZZ” @1 P+YY @1 Q+XX… @1 R+WW @1 S+VVz @1 T+UUr @1 U+TTc @1 V+SS\ @1 W+RRY @1 X+QQR @1 Y+PPJ @1 Z+OO> @1 [+NN6 @1 \+MM, @1 ]+LL( @1 ^+KK @1 _+JJ @1 `+II @1 a+HH  @1 b+GG @1 c+FFü @1 d+EEñ @1 e+DDí @1 f+CCç @1 g+BBàM @ÿÿi+ee°O @ÿÿj+¤O @ÿÿk+O @ÿÿm+KO @ÿÿp+ÇN @ÿÿu+¸N @ÿÿw+ÿÿ¢N @ÿÿx+__`N @ÿÿ{+UUN @ÿÿ+66 N @ÿÿ‚+44N @ÿÿƒ+--ùM @ÿÿ„+,,ºM @ÿÿ‡+­M @ÿÿˆ+M @ÿÿ‰+ŠM @ÿÿŠ+wM @ÿÿ‹+]M @ÿÿŒ+  WM @ÿÿ+  OM @ÿÿŽ+  EM @ÿÿ+  1M @ÿÿ+ M @ÿÿ‘+ÀÀòL @ÿÿ’+šš‹L @ÿÿ”+ÀÀL @ÿÿ•+¾¾vL @ÿÿ–+½½lL @ÿÿ—+ººcL @ÿÿ˜+¸¸\L @ÿÿ™+¶¶RL @ÿÿš+´´KL @ÿÿ›+±±CL @ÿÿœ+¯¯ÑK @ÿÿ +‘‘ÁK @ÿÿ¢+††§K @ÿÿ£+‚‚À4 @ÿÿ¤+ll·4 @ÿÿ¥+ee4 @ÿÿ¦+aa¡4 @ÿÿ§+ZZ4 @ÿÿ¨+XX4 @ÿÿ©+WW÷3 @ÿÿ«+  ï3 @ÿÿ­+®3 @ÿÿ¯+Ÿ3 @ÿÿ°+  ¶ @ÿÿ±+ @ÿÿ²+ÑÑá @ÿÿ³+ÐÐ @ÿÿ´+ÏÏË @ÿÿµ+ÁÁ» @ÿÿ¶+¼¼³ @ÿÿ·+´´ @ÿÿ¸+û @ÿÿ¹+ö @ÿÿº+ŽŽè @ÿÿ»+Ø @ÿÿ¼+ŒŒÐ @ÿÿ½+‹‹Ì @ÿÿ¾+ŠŠÆ @ÿÿ¿+‰‰Á @ÿÿÀ+ˆˆµ @ÿÿÁ+‡‡¬ @ÿÿÂ+††£ @ÿÿÃ+……Ÿ @ÿÿÄ+„„œ @ÿÿÅ+ƒƒ” @ÿÿÆ+‚‚ @ÿÿÇ+… @ÿÿÈ+€€ @ÿÿÉ+z @ÿÿÊ+~~r @ÿÿË+}}c @ÿÿÌ+||\ @ÿÿÍ+{{Y @ÿÿÎ+zzR @ÿÿÏ+yyJ @ÿÿÐ+xx> @ÿÿÑ+ww6 @ÿÿÒ+vv, @ÿÿÓ+uu( @ÿÿÔ+tt @ÿÿÕ+ss @ÿÿÖ+rr @ÿÿ×+qq  @ÿÿØ+pp @ÿÿÙ+ooü @ÿÿÚ+nnñ @ÿÿÛ+mmí @ÿÿÜ+llç @ÿÿÝ+kkÏ @ÿÿÞ+>>¹ @ÿÿß+99£ @ÿÿà+88 @ÿÿá+77{ @ÿÿâ+66e @ÿÿã+55S @ÿÿä+44= @ÿÿå+330 @ÿÿæ+00) @ÿÿç+-- @ÿÿè+** @ÿÿé+'' @ÿÿê+$$#$%23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW*7mQmlmƒmšmÎmÛmñmƒm,µH-nƒm7nFnTn*dn**nE*nEHln~n‰n›n»nÒnÒnÒnÒnÒn»n»n»n»néndnönû*üno*û·.o*nE*nE*9oAo*9oAoKoXoû·T.oÎmaoholopotoxo|o€o„oˆoŒoo”o˜oœo o¤o¨o¬o°o´o¸o¼oÀoÄoÈoÌoÐoÔoØoÜoàoäoèoìoðoÀlôoøoüopp#p7'p7,p3p77p=pBpHp7QpVp_pjpopspéqñqpõqñqr¼l CrÝrBpãrórss!s C2s7sJs\s_scs¥shoºl©s­s°s³s©szG¶sttt"tplt‰tŽt C•t¤t«t´t¨)¹tÇtÉtÌtÒtÁ+ C Cdn C C Cholopotoxo|o€o„oˆoŒoo”o˜oœo o¤o¨o¬o°o´o¸o¼oÀoÄoÈoÌoÐoÔoØoÜoàoäoèoìoðoÀlôoøo7âtðtþt uu&u2u C C@uIu C Ç4^lmo‹ Œ ÇNpñ PêGO¾ÁÃÇGR¢Ðb‹3 ¹9$vo9M Gum—Ç‚6ÎÊ899:;;<<>rsxyz„„……Š‹‘’——œœ±²·¸½½ÂÂÇÇÌÍÒ×Üáââçìíîïôùþ     %*++01277<<==BGHHMNNSXY^_``eejjoottyy~~ƒƒˆˆ’’——œ¡¡¦¦§§¨¨ë„ @ÿÿddä„ @ÿÿ``Ï„ @ÿÿWWÈ„ @ÿÿSS³„ @ÿÿJJ¬„ @ÿÿFFÕ„ @ÿÿgg¹„ @ÿÿZZ„ @ÿÿ MMm„ @ÿÿ kXkX**û*û*7777$wG#ˆ( /<0 :@x„$È„S¹„QZ*Â)4 ##/»<> 37³„Jë„dTHHUUbbD$Œ„%¬„Fä„`% 5>m„„DMÕ„^gFž"&*;ö.0„%Ï„W$ Dÿÿ°ˆ Dÿÿ‰ Dÿÿ  e‡@ÿÿ!!ˉ@ÿÿ‰@ÿÿ¹‰@ÿÿÒ‰ @ šˆ @ÿÿ1 šˆ@ÿÿ¦ˆ@ÿÿˆ@ÿÿýýå‰ @ üü„ˆ @ÿÿ1üü„ˆ@ÿÿûûzˆ@ÿÿ"ùùø‰ @%øønˆ @ÿÿ1'øønˆ@ÿÿ+÷÷bˆ@ÿÿ2õõYˆ@ÿÿ8ôô Š @<òòCˆ @ÿÿ1>òòCˆ@ÿÿCññOˆ@ÿÿFððŠ @Jîî-ˆ @ÿÿ1Lîî-ˆ@ÿÿQíí9ˆ@ÿÿTììˆ@ÿÿXààï‡@ÿÿ[ßßÚ‡@ÿÿ^ÛÛ·@ÿÿaÚÚć@ÿÿdÙÙ¨‡@ÿÿh××·‡@ÿÿkÖÖ’‡@ÿÿoÔÔž‡@ÿÿrÓÓ1Š @'vÑÑ~‡ @ÿÿ1xÑÑ~‡@ÿÿ}ÐЉ‡@ÿÿ€ÏÏr‡@ÿÿ„ÎÎk‡@ÿÿ†ÊÊY‡@ÿÿ‰ÅÅO‡@ÿÿŒÄÄG‡@ÿÿÃÃ>‡@ÿÿ’ÁÁCŠ @1•ÀÀ3‡ @ÿÿ1—ÀÀ3‡@ÿÿ›¿¿*‡@ÿÿž½½UŠ @5¡¼¼‡ @ÿÿ1£¼¼‡@ÿÿ§»» ‡@ÿÿ®¹¹‡@ÿÿ´¸¸ä†@ÿÿ¸¶¶ó†@ÿÿ»µµÎ†@ÿÿ¿³³Ú†@ÿÿ²²´†@ÿÿư°®†@ÿÿȯ¯gŠ @@Ì­­š† @ÿÿ1Î ­­š†@ÿÿÓ ¬¬¥†@ÿÿÖ ««yŠ @DÚ ©©w† @ÿÿ1Ü ©©w†@ÿÿá §§†@ÿÿä ¥¥†@ÿÿê ¡¡ø…@ÿÿí   Ø…@ÿÿð ŸŸµ…@ÿÿó žž'†@ÿÿõ ››†@ÿÿ÷ ——å…@ÿÿù ““Ã…@ÿÿû ]… @ÿÿûv€ŠŠ@0Oüww•Š@0Oýxx Š@0Oþyy¬Š@0Oÿzz¸Š@0O{{Ê@0O||ÏŠ@0O}}ÛŠ@0O~~çŠ@0OI… @ÿÿ^^±‰ @ÿÿˆ @ÿÿ  0† @ÿÿœœ† @ÿÿ ˜˜ï… @ÿÿ ””Î… @ÿÿ ¦… @ÿÿ ‡‡Q… @ÿÿ 8… @ÿÿ__.… @ÿÿ &04?CPQRSTUVWXHnE´­kX*?E«‰¿­×­7%M?ElŠ2M¿­¬D*¿­¹¬D* ŠÚ†?E«‰$‰7%M?ElŠ2M:‰D* ŠÚ†?E«‰$‰7%M?ElŠ2M:‰Á+lŠ2MÞ‘þ­ÄT ®Á+lŠ2MÞ‘þ­W®?E«‰®§®7%M?ElŠ2M®Ë®D*®ô®?E«‰¯¯7%M?ElŠ2Mþ­6¯D*þ­]¯*-­k¯‚¯*-­5­™+˜¯ ­™+-­5­™+-­5­?E-­¿­=­V­¿­¹¬?E-­¿­=­V­¿­¹¬?EòŽ¿­ª¯7%M?E3+R¿­[­Ô(¿­¹¬pXί௠­HnEò¯-­5­ò¯-­5­ò¯ý¯°Ô(?ŸAo?EòŽ¡7%M?E3+R´Ô(?ŸAo?EòŽ¡7%M?E3+R´Á+3°î“þ­ÄT*°Á+3+Rî“þ­o°?E-­®¡°V­®ô®?E-­®¡°V­®ô®pX·°É°dÛ°nE?EòŽ®ã°7%M?E3+R®±Ô(®ô®?Eòޝ*±7%M?E3+Rþ­I±Ô(þ­]¯?Em±?Ÿ+R‚±±?Eº±°?Eʱ°?Eç±SE;jnEö±nEö±nEN*nE*********kXý±7 ²²)²8²H²777£Gcdž°ÎG‡ÈýùÇ9ˆ칉ÂNÍÿB†ŸÂ‰k%m&ë“—›¥¯²ÎkCEë ¼Àøük‡Ê!´ ©­¼½½ÀÁÁÑ´†°]…v¥§©²³µ¶¸¹ÄÅÓÔÖ×ÙÚßàìíîôõ…&3lnp¦…‡¦ˆO‡ÄOˆð8…]_Ø…“Ÿø…— 8†žÁ"a-¹õ†¥* bhãå*‡½Ó" MQó†µ3‡¿À<¸¹ôõœÑ ¹% OXÎÎÏÐÑÓÔÖ×ÙÚÛÛE! ©­¼ÀÑîòøü……|å…“”¥†«e‡È!Î"+®©­ÑîòNßà ¡§©¬­³¶»¼¿ÀÐÑÔ×íîñò÷øûünA îòøùùüýý.…n…yÎ…®†¯Î†²³Î‡Únˆ÷øw+?*w†¥§©·‡Ö€D¡©­¼½ÀÁÑîòøùüý`…wÀ†°Î‡¸iI…^¯‰†¥§³¶¸¹ÄÅÔ×ÙÚßàìíôõ ‡¹‰‡Ï2 ÃÛr‡Î’‡ÓÔ»VXÛ#½Áùý†›¡û‡àd:468“—›žŸ ¡¥§«¬¯°²³µ¶¸¹»½¿ÁÃÄÅÈÊÎÏÐÓÔÖ×ÙÚÛìíðñôõ÷ùûý!¤“—›Ä 䆵¶Ä‡Ù„ˆûüÍdf¡¡§¬¸¸¹¹»¿Ðäíñôôõõ÷û…}†©î-ˆìíî–žŸ ¡¶Ô×ß¶§©¬­»¼¿Àíîñò÷øûüöHJ¶>¹õv…z4¡¡¥§§©«¬¬­°°²³³µ¶¸¸¹¹»¿ÎÎÏÐÐÑÓÔÖ×àìííîðññòôôõõ÷û‡»¼ˆ+ ¨ ¹õ(+È! IV«¬­°°²³µ¶ÃÃÄÅðñò¨‡Ö׈àq6Q…u†˜±‰zg§¬¸¹»¿Ðíñôõ÷ûš†«¬­Ú†²Ú‡Ûzˆùšˆ##*,.Ifc+C ¥«²µÏÓÖìðÃ…c†¡Cˆðñòl5•…~µ…ž‡¹Þ¦žUþ.§³»¿~…{>‡Á~‡ÏÐÑž‡Óˆè g…x'†›œ0 TZ0†œp†¡ ¡¸½ÁÐôõùý›¸¹ôõY!©­ÑîòYAííññôôõõ÷÷ûûq¸¹ôõY† Y‡ÅYˆôâ‡ßbˆõ ‹B¡¡§§¬¬¸¸»»¿¿ÐÐˉTT+½Áùý”†©«¬­²³µ¶ÃÏÐÑÓÔÖ×ÛîðñòˆའÄÅÙÚF+†—˜ï…”ï‡ß—˜ï…”ï‡ß‰ @@ÿÿ58ÿˆ @@ÿÿ-3ðˆ @ÿÿ ?E Š2My¬¬D*y¬¹¬7w Ï  (-5Oˆ$ÿˆ -‰(5€D(*57ðˆÍ(5i%# "#%/02;-##0YA(*57žî(5šˆ7¦ˆ1 Ó"/c%2;» (-5Cˆ*Ä”† $(*-157¬‰ @@ÿÿ„‡¢‰ @@ÿÿ€ƒ›‰ @@ÿÿ |…‰ @@ÿÿ x{‘‰ @@ÿÿqwu‰ @@ÿÿlo~‰ @@ÿÿdjg‰ @@ÿÿ_bo‰ @@ÿÿW]^‰ @@ÿÿ#SVP‰ @ÿÿ$ ­­ ­ ­-­5­ ­-­5­?E-­y¬=­V­y¬¹¬?E-­y¬=­V­y¬¹¬?E?Ÿ+Ry¬[­Ô(y¬¹¬pX„­’­ ­75w džSUG‡P·‡ug‰!)W_€D)+_aÀ†SUP‰i‰†68BDFHJLlnxz|~€‚Y‡L‰‡[r‡U’‡n¢‰J€»!).6;BFJNNSSW_dlqx|€„„‹B)+_a›‰F|Ä”†!%)+.268;?BDNPW[_adhlnquxz„†´†ä†Dć~Í)_%##$&013=>@YZ\fgistv-#$1>Zgt]… .6;BFJdlqx|€¥†%u‰.6dl…‰;BqxÞ(5^kžî)6B_lxΆ8~‡až‡h·‚^‰S~‰.dÏ !).6;BFJNSW_dlqx|€„O‡Ho‰!W¨‡z‘‰;qš†+Ú†2Ú‡† Ó#0=Yfsc&3@\ivC!.;Wdqó†?¬‰N„pd @ÿÿvŒ @ÿÿiŒ @ÿÿed @ÿÿXd @ÿÿ!Z @ÿÿ÷Y @ÿÿIŒ @ÿÿ¶¶¶‰tŽt¶"¶7Ç4ÿBC÷Y OŒD XdpdQ4 !Z edIŒiŒö f4vŒëi[Œ­­²²³³´´¹¹¾¾ÃÃÈÈÉÉÎÏÏÔÕÕÚÛÛÜÜáââçèèíîîïïôõõúÿ    !!&&++00116778=>L˜ª)FN-O„‡²‚Oåëï‚P’“¦¹‚V : B E \ ] d d m o o p ké#B\gnw‚¢¼Ø 8ñ.8kM óëM"ÑÖëNtuwÆÈÉèíîñrÈÏåìôM$?tQ˜¢§]è"Afm¡»×7ð-7]  ]4;]M äÝNpv&3› ž ¨ ² » ï  < = @ G k y ” &P2Zjkpq‡‰‰¬¬¯·DÜÝö÷÷÷ùùúüüþþ&34P]]_cËÌÎÏÏÏÑÑÒãêì¦TD S \ k 7  …wãæéëðtˆœŸ¦ ÑxxOõ3QÞøRÂCT? Z i o s v z | Ir. O „‡ˆ‘“¤§¨®°²³áÄÐá3aOÌÏJOx0 Ê3JN<<ABSÊS¦ÊT{ S4]_ÓV > d g m o p { } ~ <æç¼L0®°Ž³ÀÁFo. …W€4 M³_…NPQUW§ îO2wé#<Bgn‚¢¼Ø 8ñ.8÷‚‡‡§¨÷3 %(N˜ª)8FnyÐù÷K’¢7wMÌ Ù÷P°¶÷Q<âí +HN`¨´ÏÕÜâèïõ 7wR±·÷Rí ÷T— ™ À4X^kl@O¾ÁÂÇÇÈÀP¢¥¨ÀSœÀUí E )-©öø}‡›³Áؾ¾ÂÃZ[\™µ©PŸ´ÄÄ©Q/8rxб·ÌÒ×Üáçìíôùþ %*0BGMSX^œÎÔÚáçíôúÿ 6=©Uæ ²3  2N::AR²Nf2R…=É1›LÁÄN56Uš ð H W¨ dS*^ÚíÍþÿZÍUü S VTP¿üý¿3 L¡ªº»P:=?CQóö÷þÿMz{|}ˆ‰  ‘SMzU~1 z §H O O U U ` w £ © úK”•••––æëëëíîïÖÙÛúO3zQ™¡¦µ¾¿CL¯ãÃMCS,Lu/ ¬]†2 ¬TG \ _ k µ^‡2 žRÇHçBk. çQ ;…=§³ÉÛî1çVˆ pV: Y4®= YQz0 ÙÄÅÎÏ~‡„ФªÚàóù!_`ak˜ÙT—  • ÙV^ f "àá¢K~`˜§»Å"MØ·÷`Ï¢N]_æ"Rsz‹’²¸Íî 2Y_"V ‹LÀ ð”Y‚1 RrxŠ0ýSÔÚýT — › › ž Ÿ   ¡ ¢ £ ¤ ¨ © ª « ¬ ­ ­ ® ² ³ ´ µ ¶ · » » á   ; ” • Æ`‰3 FQZ[¾ ÆUø O o¤E d ¡ « õ L © /áãÄWfwñï3“ü¯P ÈÉ×ÙÜáoS%*ïSÎ/Túÿ/U ­ ¸NjÿrÈÏåì¸Q88Tÿ¸V = { } ~  ƒ „ ‰ Œ $Á9Á_ˆ2 A/UÁK†·L¾ÁP:=>BSîï§³SBGAU¡ « ­ ª «Ÿ ¡ © « ³ ê B ¨ j3£ © *47*L¥¦¨¨¶¸*MñÝê *N 6:;<=AACC*P [^ejÕ×ÙÛÛàjPÁÂÃÉÊ˪V < m o p q u v ‰ ‹ ³³´æ-c³@ɳP¡¤´½\R{0 œZƒ2 œõö47;@LW·|\9ÁÉ\L¶\T¬ÀÆe5&q‰ eOÚÞøåO13:=y´Ä¥P ”¶¶¶···ÀÁeR¬ŽðòéKŽNQgíñÎO2PBEHTáUš ó ú  J Q Y NU± —LÀÁÁWM é뜟 ×NptQWR§Tçí—T ? z z z { | ƒ ƒ ƒ „ „ àKŽ‘•àM!eR¼Þ  `NNPU PVijopvyy Qÿ$àVo } ' 445‰4CÉMpv‰OçéÉQ9:y‘ï 1¾ 8>IT Hq. RPy0 RŸp ð ó ú    H J Q W Y • — ¬ ­ ’ª¶ Ò3RL´­°°_c’M²¸ÒM)***,p&0RS¼½ PCERQ_`ÒT„ { 6!ñ ¥æ ~ ‡ ûf4 ; žD S T \ k u í ï ø E G O » ¸¹º¼0-Jp ;48»K‚{OÛÞâåçéî»O"%wÉ„§É@ o ­ D9=CfÄLH‘ÄO2ÄV > \ ^ ^ _ ` c f f g h m5­£ íCl m4>­M­RÌÒ×6Mv/ öeŽ4 6ž„ˆ¤¨¶ûýÿ h”¤!$)U„ŽNg‘twvL½ÁJs/ Ÿ[„2 _¡Ê_ÁÉŸ3 ZÎL¤§¨ßLwŸOõøßO "%&*VX[wyŸP“³ÀÛŸT @ i s v w { ~ „ ‡ ŸV; y ƒ „ (Kt/ èd4 h¡>ã ü þ   @ S U W ˆ èLc¨N egmtw®°³ÆÈÉè(O„‡Š‘¤§ª²óöùühUà ñDmˆ 1M1O¾ÁÏ1QLMNz‚ 1SþÚLfå&MÁùaÑZOÌÏZP…‡CtŒÏÜ_```aactˆ¿ËÝßìÚP¨ÄÅ£8lrÎ÷ýcS|0 £\…2 cL¸ãP¬¶#Q ,034#TôãUþ U ÌaŠ3 ÌLK‘ N4:;<=BDÌP£§ÅLQ\e~‰ŒŽ‘¡ÄËT_`¾¿Øßà   •K {‚¶·wxxy|~ÕLWP]N 446:;<=BD>Nw1 þAÉDDIINOOTTYY^^cchhmmssyzz‹‹‘’’²²¸¸ÍÍîîï   122YY__¾ 8>~ ‡ þ30v“ þ þK•þL›‡ÜËþP±¹»ÀÙ~T. „ ÏX1 4NX¿{  SôV V: k u v ùM,·ÎÏyUà ê í ùU W ÂNjmÿBP…tˆ«8´Lç4NK}[~Ž‘™¦µºÄËT¾Øà    MSùþæ36f4 =]efhm u { ƒ æKfM "fTêÏ=>ÏK †‡68<=eeeOM  w㦠ÏM8ØcŒ3 Ø3X4:ØKŽ‘–ØM Iëðñö÷ ¥ ØOsz‹’²¸Íî 2Y_¡ « ­ d n u | ƒ XQ–k089<>DINOTY^chmrsxyz„Š‹‘’—œ¢§¬±²·¸½ÂÇÌÍÒ×Üáâçìíîïôùþ    %*+0127<BGHMNSXY^_`ejoty~ƒˆ’—œ¡¦§¨­²³´¹¾ÃÈÎÏÔÕÚÜáâçèíïôõúÿ   !&+0678=>CHPVØQ9¡4OTYZuxy!O„‡‰‘•¤§©­®°²Ž³óöø¡SS 6=ŠM'ŠNPRRSSUüEn. / ü3%(),E3EŸß EM ÅR×®3 &™š›œÈ q ®Løî.Pbfs·4W]de7L §gޤ®°±²·ÉË·Tp § ¬ €ïð€Q«¯¹ €RÂǦ²¹iQ†eíéRì rT}1 òLš‰ÝÌrNOOòNu¤§îrP‘ÂÊÍÛAÛKŽ‘–¤Mýk¤OZ_g Gp. MÀü RO  ¢ £ ¤ ª ¬ ® ´ µ ¶ · q  T*? D D D E G L L L L M M M M N N O P R S T \ \ ] ^ _ d i k k k k l l l l m m m m s u Uà å è –7–N\]PMVŽÁÛV1 4ADE\`afmMúHçêìøQ49>@ÑKŒŽ‘¥QP…ÐÕEôû  ÑP¤´½ÈÑRÜáçìQSºM:QNuu~‚†ºRÒg4 ƒUà lLºìP¯°°lTõü õÈ8¢§¬·CHõ3u4AuO‘ÚÞàïøae¢Å089:;;<DIOTY^chmssyzz„……‹‹‘’’—œ²²·¸¸½ÂÇÍÍâîîï    +1227<==HNYY__`ejoty~ƒˆ’—¡¦§¨­²³´¹¾¾ÃÈÉÉÏÕÛÛÜâèîîïõ  !&+01178>VÝæê uT' ƒ „ ^Q‹ÞRáGM§K‚ˆ§§Léî'Sù000L¥¼ÁÂÃÉÊËå‘¡¢ÄÅtuwx††Ž°O®±²°SX^°TT u *L¡¥¥¦¦§N44™Qñ ™T? Y ] ] ^ ™Uã å è âNpbP޼âS¹ËÀÁ-KL±‰¯÷`ÏKOÌT¾à ËV> ] ` c { } } ~ Tè"Afm¡»×7ð-7TN==CDSÔS²TV  ‘ = 303:=ö M =N;;CR=V Qóö¤Ü  RDINTY^chmH ` w ~ ‡ Ÿ © ³ v „ $ DÿÿV3@ÿÿ,,K3@ÿÿ++>3@ÿÿ((a3 @ÿÿ 55E3 @ÿÿ ))+3 @ÿÿ ''&3 @ÿÿ @ÿÿ?EGESE?E\EgEN*nErE³EµE·E7 C7w+G2:w3B3Ea3;a335;=j33355;;==k0I+3&'K3+{3CDd(CE´5l33355;;==Í35;=5E3)–,NE®5†+,î+,&3 >3()V3,n35†3Dw Dÿÿ::Ø Dÿÿ••¨. @ÿÿÓÓi.@ÿÿÌÌ×, @ÿÿ»Ó×,@ÿÿ¥¥F/@0¼¼g/@0½½‹/@0¾¾±/@0¿¿Ó/@0ÀÀñ/@ ÁÆ0@0 ÂÂK0@0 ÃÃ}0@0  Äİ0@0  ÅÅä0@0 ÆÆ1@0 ÇÇ)1@0 ÈÈL1@0ÉÉx1@0ÊÊ£1@0ËËÎ1@0ÌÌì1@0ÍÍ2@0ÎÎ32@0ÏÏR2@0ÐÐq2@0ÑÑ2@0ÒÒ©- @ÿÿ¶¶£- @ÿÿ¶¶}- @ÿÿ²¶µ2@0³³É2@0´´Ü2@0µµa- @ÿÿ¯¯Q- @ÿÿ¯¯/- @ÿÿ«¯ð2@0%­­ 3@0% ®® -@ÿÿ ©©- @ÿÿ!¨¨- @ÿÿ"§§î,@ÿÿ"¦¦» @ÿÿ#% @ÿÿ$ @ÿÿ%î @ÿÿ&þþæ @ÿÿ'ùù• @ÿÿ(ÝÝŽ @ÿÿ)ÜÜa @ÿÿ*ÑÑE @ÿÿ+¿¿+ @ÿÿ,¶¶5/ @ÿÿ.õõ/ @ÿÿ0êêþ. Dÿÿ1ääÏ. Dÿÿ2ÞÞ±- @ÿÿ3ÔÔk- @ÿÿ4··+ @ÿÿAŸŸ¡* @ÿÿLœœo, @ÿÿY˜˜>, @ÿÿe””?* @ÿÿqâ) @ÿÿ}) @ÿÿ‰ŠŠ8) @ÿÿ™‡‡ã( @ÿÿ§„„Ž( @ÿÿ´9( @ÿÿ¾~~£, @ÿÿÅ{{ä' @ÿÿÍxx‹' @ÿÿÚuu.' @ÿÿårrÎ& @ÿÿónnk& @ÿÿÿjj& @ÿÿ gg½% @ÿÿddj% @ÿÿ'aa% @ÿÿ5^^Ä$ @ÿÿB[[q$ @ÿÿLXX­+ @ÿÿRUU$ @ÿÿZRR}+ Dÿÿ[PPh+ @ÿÿ]OOT+ @ÿÿ_NN1+ @ÿÿaMMÒ* @ÿÿlBBs* @ÿÿu??* @ÿÿ<<¹) @ÿÿŠ99d) @ÿÿ•66) @ÿÿ¤33º( @ÿÿ±00e( @ÿÿ¼--( @ÿÿÅ**»' @ÿÿÌ''^' @ÿÿ×##' @ÿÿà  ž& @ÿÿì;& @ÿÿöè% @ÿÿ•% @ÿÿ B% @ÿÿï$ @ÿÿ(œ$ @ÿÿ3  I$ @ÿÿ<Û# @ÿÿCl# @ÿÿHèè># @ÿÿRØØã" @ÿÿZÈÈ®" @ÿÿc½½ˆ" @ÿÿp²²b" @ÿÿ{§§-" @ÿÿ„œœø! @ÿÿ‘‘‘Ã! @ÿÿœ††Ž! @ÿÿ¥{{Y! @ÿÿ¬ppë @ÿÿ±eeá @ÿÿ²^^Ù @ÿÿ³ZZÏ @ÿÿ´UU¹ @ÿÿµ==¥ @ÿÿ¶99† @ÿÿ·33u @ÿÿ¹++k @ÿÿº##N @ÿÿ»@ @ÿÿ¼0 @ÿÿ½ @ÿÿ¾  ö @ÿÿ¿Õ @ÿÿÀöö| @ÿÿÁÞÞN @ÿÿÂÓÓ3 @ÿÿÃÁÁ @ÿÿÄ··  @ÿÿű±È @ÿÿǧ§å @ÿÿÈ——· @ÿÿÉŒŒ @ÿÿÊ€ @ÿÿËzzN @ÿÿÍoo+ @ÿÿÎffð @ÿÿÏ``¤ @ÿÿÑPPh @ÿÿÓBBC @ÿÿÕ;; @ÿÿ×11Þ @ÿÿØ((Ë @ÿÿÙ$$· @ÿÿÚ!!— @ÿÿÛv @ÿÿÜ  i @ÿÿÝN @ÿÿÞùù4 Dÿÿßññ+ @ÿÿàéé" @ÿÿáßß @ÿÿâÕÕÓ @ÿÿãÎλ @ÿÿä¿¿¬ @ÿÿåµµ @ÿÿ磣— @ÿÿ颢g @ÿÿëžžv @ÿÿíÁ @ÿÿî{ @ÿÿïd @ÿÿð      !"&'÷)***&*9*Ô(D*N*N*T***N*N*N*‚*N*Š*›*²*²*È*Ù*ë*û*û*û* +%+>+M+\+y+™+¤+¬+**û*û*·+·+Á+È+Ñ+7é7777Ó+",,,6,F,U,^,c,k,r,z,,‰,,",,,6,F,U,^,c,k,r,z,Ø,x-„-",,,’-F,U,^,c,k,r,z,-x-„-",,,’-U,^,c,k,r,z,=.x-„-",,,6,’-Ë.U,^,c,k,Ü.x-„-",,,6, /(///7/U,^,>/x-„-",,,6, /(/U,^,c,k,‚/x-„-",,,6,U,^,c,k,r,z,,‰,Ô/Ü/ã/x-„-",,,6,U,^,c,k,r,z,,‰,.0x-„-",,,6,F,U,^,c,k,r,z,r0x-„-",,,6,U,^,c,k,¯0x-„-",,,U,^,ç0x-„-",,,6,U,^,Ó+",,,6,F,U,^,c,k,r,z,,‰,,",,,6,F,U,^,c,k,r,z,1x-„-",,,’-Ë.F,U,^,c,k,r,z,=.x-„-",,,6,’-Ë.U,^,c,k,Ü.x-„-",,,6, /(///7/U,^,>/x-„-",,,6, /(/U,^,c,k,‚/x-„-",,,6,U,^,c,k,r,z,,‰,Ô/Ü/ã/x-„-",,,6,U,^,c,k,r,z,,‰,.0x-„-",,,6,F,U,^,c,k,r,z,r0x-„-",,,6,U,^,c,k,»1x-",,,U,^,ç0x-„-",,,6,U,^,77ó17ó17ó12",,,U,^,c,k,r,z,,‰,d2",,,U,^,c,k,r,z,¿2x-„-",,,’-U,^,c,k,#3x-„-",,, /(///7/U,^,}3x-„-",,, /(/U,^,c,k,×3x-„-",,,U,^,c,k,r,z,,‰,Ô/Ü/A4x-„-",,,U,^,c,k,r,z,,‰,£4x-„-",,,U,^,c,k,r,z,5x-„-",,,U,^,c,k,S5x-„-",,,U,^,5",,,U,^,c,k,r,z,,‰,ÿ5",,,U,^,c,k,r,z,Y6x-„-",,,’-U,^,c,k,r,z,Â6x-„-",,,’-U,^,c,k,%7x-„-",,, /(///7/U,^,~7x-„-",,, /(/U,^,c,k,×7x-„-",,,U,^,c,k,r,z,,‰,Ô/Ü/@8x-„-",,,U,^,c,k,r,z,,‰,¡8x-„-",,,U,^,c,k,r,z,þ8x-„-",,,U,^,c,k,O9x-„-",,,U,^,˜9x-,,U,J;O;x-,,’-U,^,c,k,r,z,a<x-,,’-U,^,c,k,h=x-,, /(///7/U,^,é=x-,, /(/U,^,c,k,r,z,,‰,€>x-,, /(/U,^,c,k,r,z, ?x-,, /(/U,^,c,k,?x-,,U,^,c,k,r,z,,‰,Ô/Ü/$@x-,,U,^,c,k,r,z,,‰,°@x-,,U,^,c,k,r,z,1Ax-,,U,^,c,k,§Ax-,,U,^,BB#B+B@B7TBÑ+77jB777777777pBC C C C7CÂCËC7ÐCìC7ìCùCìC«DÆD CÌDàD77èD#B777ðD77èDEEEE!E5EEGLNSUY[`b./ab‡ˆ‘–˜ù349;>EGLNSUY[`b./ab‡ˆ‘–˜ù349;>EGLNSUY[`b./ab‡ˆ!€ƒG!€ƒG!€ƒG)333,ùùù.ÆÆÆ'''˜# èíïèíïèíïa ùUSVY\_behklopsvy|‚…ˆ‹Ž‘’•–™š aÏÑÏÑÏÑá ]^]^]^a-¯¯¯á.áááJ-4-4-4ÊOOOOOOJfffÓ!’ËÛÉßìø2HUa’ËÛÉßìø2HUa’ËÛÉßìø2HUaÓ ÅÈÊÎÅÈÊÎÅÈÊÎS"œœ¡§¬²·½Âúûüý679:fhjry€†“•—Ÿ¦­³º   1245deghŠ‹Žœ¡§¬²·½Âúûüý679:fhjry€†“•—Ÿ¦­³º   1245deghŠ‹Žœ¡§¬²·½Âúûüý679:fhjry€†“•—Ÿ¦­³º   1245deghŠ‹Ž< ííííííííííííEGLNSUY[`b)+.7:;@CDMPQY\]fijqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ {€‚†‹‘–˜§¬®²·¹Øßâã÷øùûüÿ   !#$-.0134?@BCßáäëíòôùûÿ !&(,.359;>EGLNSUY[`b)+.7:;@CDMPQY\]fijqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ {€‚†‹‘–˜§¬®²·¹Øßâã÷øùûüÿ   !#$-.0134?@BCßáäëíòôùûÿ !&(,.359;>EGLNSUY[`b)+.7:;@CDMPQY\]fijqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ .ÅÅÅîOOOîþžþžþžî,¦¨¦¨¦¨wލ7Møލ7Møލ7Mø÷ ,-8,-8,-8w moomoomooÀ „„„@ ©-¶¶¶²DGDGDG2 113113113² „„„$ N÷RN÷RN÷R.ÇÇÇ›.ÒÒÒ5••dµÊµÊµÊ¤ IKNPIKNPIKNPä' (öx(öx(öxd)666$.ÈÈÈÍ´­¯¶^hs~‰”ŸªµÀÍÝëëëël™žžÐý*W„±îWƒ”–ž¥¬°²´»½ÅÇÏÖÝáãåìîDGsv ­¯¶^hs~‰”ŸªµÀÍÝëëëël™žžÐý*W„±îWƒ”–ž¥¬°²´»½ÅÇÏÖÝáãåìîDGsv ­¯¶^hs~‰”ŸªµÀÍÝëëëël™žžÐý*W„±îWƒ”–ž¥¬°²´»½ÅÇÏÖÝáãåìîDGsv ¡£¡£¡£) 71Š71Š71Š.ÐÐÐVW]io{W]io{W]io{Ö#íïíïíïV.ËËË!¯pu{€†‹‘–œ¡§¬²·ÈÏØßö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†ÀÂÄÎ×äðý#)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ pu{€†‹‘–œ¡§¬²·ÈÏØßö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†ÀÂÄÎ×äðý#)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ pu{€†‹‘–œ¡§¬²·ÈÏØßö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†ÀÂÄÎ×äðý#)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ ?* =7=7=7.ÎÎΈ¨ø(çí¨ø(çí¨ø(çíˆlãåÑáÂÄÐÙæòÿ#+-9BO[hqx…Œ9=Alp’–šãåÑáÂÄÐÙæòÿ#+-9BO[hqx…Œ9=Alp’–šãåÑáÂÄÐÙæòÿ#+-9BO[hqx…Œ9=Alp’–šZvZvZvÈ £¥§£¥§£¥§ ˆ"²ü²ü²ü‘ èèêèèêèèê!ýejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíõö÷øùúûüýþÿ   '(*+-.0134679:<=NPRZahnu{}‡Ž•›¥¬²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†“•—Ÿ¦­³ºÀÂÄÎ×äðý#)+-7@MYfqx…Œö÷ùúüýÿ    "#%&()+,./1245789;<=?@ARSUVXY[\^_abdeghjklnopxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíõö÷øùúûüýþÿ   '(*+-.0134679:<=NPRZahnu{}‡Ž•›¥¬²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†“•—Ÿ¦­³ºÀÂÄÎ×äðý#)+-7@MYfqx…Œö÷ùúüýÿ    "#%&()+,./1245789;<=?@ARSUVXY[\^_abdeghjklnopxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíõö÷øùúûüýþÿ   '(*+-.0134679:<=NPRZahnu{}‡Ž•›¥¬²´¶¾ÅÌÒÙßáãëòùÿ &,39;=ELSY`fhjry€†“•—Ÿ¦­³ºÀÂÄÎ×äðý#)+-7@MYfqx…Œö÷ùúüýÿ    "#%&()+,./1245789;<=?@ARSUVXY[\^_abdeghjklnopxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™š#ØÈÓØãþÿ<==ÀÂÄÅÒÛè #)+-.;DQqsxz…Œ79;==?AAjlnp’”––˜ššÈÓØãþÿ<==ÀÂÄÅÒÛè #)+-.;DQqsxz…Œ79;==?AAjlnp’”––˜ššÈÓØãþÿ<==ÀÂÄÅÒÛè #)+-.;DQqsxz…Œ79;==?AAjlnp’”––˜šš$    !#$'(*+-.0134679:<=?@BCNR{²¶ßã 9=fj“—ÀÄ)-’–ÃÇö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ     !#$'(*+-.0134679:<=?@BCNR{²¶ßã 9=fj“—ÀÄ)-’–ÃÇö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ     !#$'(*+-.0134679:<=?@BCNR{²¶ßã 9=fj“—ÀÄ)-’–ÃÇö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ Ñ,9=Alp’–š9=Alp’–š9=Alp’–š-¨®¨®¨®Q-¯¯¯º(000CD79;DPY`gt†”¤«½ÄËØêñø%2DKR_qxŒž¥¬¹ÍÖãü"6?Lepw~‹¤«ºÎÕÜë #&),/2589<=@ADGSVY\_behklopsvy|‚…ˆ‹Ž‘’•–™š 79;DPY`gt†”¤«½ÄËØêñø%2DKR_qxŒž¥¬¹ÍÖãü"6?Lepw~‹¤«ºÎÕÜë #&),/2589<=@ADGSVY\_behklopsvy|‚…ˆ‹Ž‘’•–™š 79;DPY`gt†”¤«½ÄËØêñø%2DKR_qxŒž¥¬¹ÍÖãü"6?Lepw~‹¤«ºÎÕÜë #&),/2589<=@ADGSVY\_behklopsvy|‚…ˆ‹Ž‘’•–™š Ã!†ø†ø†ø$\   '(*+-.0134679:<=Npw²ÔÛß .59[bfˆ“µ¼Àô%)]j‡Žö÷üýÿ   "%(+.147;?RX[^adgjnx{~„‡Š”˜   '(*+-.0134679:<=Npw²ÔÛß .59[bfˆ“µ¼Àô%)]j‡Žö÷üýÿ   "%(+.147;?RX[^adgjnx{~„‡Š”˜   '(*+-.0134679:<=Npw²ÔÛß .59[bfˆ“µ¼Àô%)]j‡Žö÷üýÿ   "%(+.147;?RX[^adgjnx{~„‡Š”˜Ã-¼Ä¼Ä¼ÄC.ÊÊÊl<¼ÆÛæ<¼ÆÛæ<¼ÆÛæ,$ÒâÑÚçó:CP\iÒâÑÚçó:CP\iÒâÑÚçó:CP\i¬ ±³µ±³µ±³µl#èèèuãããu ')+')+')+5! fq|‡’¨³¾ÉÙé5#´ÑÒÓáâãÂÅÐÑÒÙÚÛæçèòóôÿ #%+.9:;BCDOPQ[\]hijqsxz…‡ŒŽÑÒÓáâãÂÅÐÑÒÙÚÛæçèòóôÿ #%+.9:;BCDOPQ[\]hijqsxz…‡ŒŽÑÒÓáâãÂÅÐÑÒÙÚÛæçèòóôÿ #%+.9:;BCDOPQ[\]hijqsxz…‡ŒŽ5/ôõôõôõ^./././Þ ÛáçÛáçÛáçÞ!'(,ƒ„Ž–œ´'(,ƒ„Ž–œ´'(,ƒ„Ž–œ´13;o§ù13;o§ù13;o§ùžêìíñêìíñêìíñ"E‘–ù349;=ELSY`./ab‡ˆ‘–ù349;=ELSY`./ab‡ˆ‘–ù349;=ELSY`./ab‡ˆž&^'###ž+¨P\cj}‰—§®´ÀÇÎáíôû!(;GNUht{‚•¡¨¯ÂÒÛè +;DQsz” §®ÅÑØßP\cj}‰—§®´ÀÇÎáíôû!(;GNUht{‚•¡¨¯ÂÒÛè +;DQsz” §®ÅÑØßP\cj}‰—§®´ÀÇÎáíôû!(;GNUht{‚•¡¨¯ÂÒÛè +;DQsz” §®ÅÑØßçOOOgœžœžœžçÇÇǧ „ì„ì„ì'!ejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíííííõö÷øùúûüýþÿ     !!#$$'(*+-..0134679:<=?@@BCCNPR\chnu{}‰•›Ÿ¥§¬®²´¶ÀÇÌÒÙßáãíôù !&,39;=GNSY`fhjt{€†“•—¡¨­³ºÀÂÄÒÛäðý #)+-;DMfszŒ’”– §¬»ÃÅÇÑØÝìö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíííííõö÷øùúûüýþÿ     !!#$$'(*+-..0134679:<=?@@BCCNPR\chnu{}‰•›Ÿ¥§¬®²´¶ÀÇÌÒÙßáãíôù !&,39;=GNSY`fhjt{€†“•—¡¨­³ºÀÂÄÒÛäðý #)+-;DMfszŒ’”– §¬»ÃÅÇÑØÝìö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ejpu{€†‹‘–œ¡§¬²·½ÂÈÏØßèíííííõö÷øùúûüýþÿ     !!#$$'(*+-..0134679:<=?@@BCCNPR\chnu{}‰•›Ÿ¥§¬®²´¶ÀÇÌÒÙßáãíôù !&,39;=GNSY`fhjt{€†“•—¡¨­³ºÀÂÄÒÛäðý #)+-;DMfszŒ’”– §¬»ÃÅÇÑØÝìö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ° fv fv fv ð VX[`VX[`VX[`°ììì0    0!¼ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏÓØßãõö÷øùúûüýþÿ    !#$'(*+-.0134679:<=?@BCIJJKNPSZ\achjnppuww{}€‡‰Ž•—›žžžŸ ¥§¬®²´·¾ÀÅÇÌÎÒÔÔÙÛÛßáäëíòôùûÿ !&(,..3559;>EGLNSUY[[`bbfhkrty{€‚†ˆˆ“•˜Ÿ¡¦¨­¯³µµº¼¼ÀÂÅÎÒ×Ûäèðôôý #%%)+.7;@DMQY]]fjjqsxz…‡‡ŒŽŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏÓØßãõö÷øùúûüýþÿ    !#$'(*+-.0134679:<=?@BCIJJKNPSZ\achjnppuww{}€‡‰Ž•—›žžžŸ ¥§¬®²´·¾ÀÅÇÌÎÒÔÔÙÛÛßáäëíòôùûÿ !&(,..3559;>EGLNSUY[[`bbfhkrty{€‚†ˆˆ“•˜Ÿ¡¦¨­¯³µµº¼¼ÀÂÅÎÒ×Ûäèðôôý #%%)+.7;@DMQY]]fjjqsxz…‡‡ŒŽŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏÓØßãõö÷øùúûüýþÿ    !#$'(*+-.0134679:<=?@BCIJJKNPSZ\achjnppuww{}€‡‰Ž•—›žžžŸ ¥§¬®²´·¾ÀÅÇÌÎÒÔÔÙÛÛßáäëíòôùûÿ !&(,..3559;>EGLNSUY[[`bbfhkrty{€‚†ˆˆ“•˜Ÿ¡¦¨­¯³µµº¼¼ÀÂÅÎÒ×Ûäèðôôý #%%)+.7;@DMQY]]fjjqsxz…‡‡ŒŽŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïö÷ùúüýÿ    "#%&()+,./1245789;<=?@ACDFGRSUVXY[\^_abdeghjklnoprsuvxy{|~‚„…‡ˆŠ‹Ž‘’”•–˜™šœŸ ð-ÀÀÀÙ ZZZY!pöpöpö™-µµµ¢ ¢¢££¢¢££¢¢££" ÙÜßÙÜßÙÜßb"§û§û§ûâ) : 4: 4: 4 &&&ËÕ1+9= OOOË$$$K! itŠ• «¶ÁÎÞìË#íïíïíï‹' $Ãu$Ãu$Ãu”[ams…[ams…[ams…Ô"E½Âý9:“•—Ÿ¦­³º  45gh޽Âý9:“•—Ÿ¦­³º  45gh޽Âý9:“•—Ÿ¦­³º  45ghŽT+JNJNJN”.ÑÑÑýOOOOOO½% f df df d}+LPLPLP}-²²²ý-ÃÃÃÆOìOìOìOOOFT¨T¨T¨† žžžžžž† 237237237Æ ===F$Š  !$(+.147:==@C†”ž¤«6?Le#<=@AVo|•–™š  !$(+.147:==@C†”ž¤«6?Le#<=@AVo|•–™š  !$(+.147:==@C†”ž¤«6?Le#<=@AVo|•–™šF+IIJJKKMNOIIJJKKMNOIIJJKKMNO†-³³³†.ÏÏÏï$o, ?˜?˜?˜/-«««/.ÉÉÉo.ÍÍÍ8131313ø!‘ù‘ù‘ù8) 4.‡4.‡4.‡OOOÁ’’’ ¥§§¥§§¥§§'   A-­­­A/õ*'''ª¢!¢!¢!ªj% 9a9a9aª+¨WZ^a„‡‹Ž»¾ÂÅèëïòBEILorvyœŸ£¦ËÎÔ× 47=@nqux›ž¢¥ÌÏÓÖWZ^a„‡‹Ž»¾ÂÅèëïòBEILorvyœŸ£¦ËÎÔ× 47=@nqux›ž¢¥ÌÏÓÖWZ^a„‡‹Ž»¾ÂÅèëïòBEILorvyœŸ£¦ËÎÔ× 47=@nqux›ž¢¥ÌÏÓÖê+Wßÿ)Y…’²Ããÿ(?CF[nru˜œŸßÿ)Y…’²Ããÿ(?CF[nru˜œŸßÿ)Y…’²Ããÿ(?CF[nru˜œŸ3»Á»Á»Ás*???\lllÜ"W½ÂÄý9:“•˜Ÿ¡¦¨­¯³µº¼  45gh޽ÂÄý9:“•˜Ÿ¡¦¨­¯³µº¼  45gh޽ÂÄý9:“•˜Ÿ¡¦¨­¯³µº¼  45ghŽ#ËÌÕÛÜåœ$   å #•—™œc #•—™œc #•—™œc%OOO% ¥ 89BC89BC89BC%#ZËÌÕÛÜåÉÊÝßàêìíöøù23FHISUV_ablËÌÕÛÜåÉÊÝßàêìíöøù23FHISUV_ablËÌÕÛÜåÉÊÝßàêìíöøù23FHISUV_able(---å+ž ž ž NW]io{W]io{W]io{Î’ù’ù’ùNÆÈÆÈÆÈN õ÷ùõ÷ùõ÷ùN kmokmokmoNÍÓÍÓÍÓŽÜÜÜN Ž!{÷{÷{÷Î& )n)n)nŽ( .ÿ(.ÿ(.ÿ(*<<<Ž+¼NY`gptw²½ÄËÔØÛßêñø %.259DKR[_bfqxˆŒ“ž¥¬µ¹¼ÀÍÖãü’¤«µº¾ÃÎÕÜæëïö÷üýÿ    %&()+,./124578CDFGRSXY[\^_abdeghjkrsuvxy~‚„…‡ˆŠ‹Ž‘œŸ NY`gptw²½ÄËÔØÛßêñø %.259DKR[_bfqxˆŒ“ž¥¬µ¹¼ÀÍÖãü’¤«µº¾ÃÎÕÜæëïö÷üýÿ    %&()+,./124578CDFGRSXY[\^_abdeghjkrsuvxy~‚„…‡ˆŠ‹Ž‘œŸ NY`gptw²½ÄËÔØÛßêñø %.259DKR[_bfqxˆŒ“ž¥¬µ¹¼ÀÍÖãü’¤«µº¾ÃÎÕÜæëïö÷üýÿ    %&()+,./124578CDFGRSXY[\^_abdeghjkrsuvxy~‚„…‡ˆŠ‹Ž‘œŸ — BHNBHNBHN—¢£¢£¢£— %  ^ ^ ^×, ¥§»¥§»¥§»5::   „„„ -©Ò©Ò©ÒI$I-®®®'''R! lw‚˜£®¹ÄÓãïÒ*BBB{{@OOOVhz@OOOVhz@OOOVhz;RRR» »½¿»½¿»½¿» ììì»# ëííïëííïëííï;&»''''DR:R•:R•Ä ¼Ûþ¼Ûþ¼ÛþÄJ‰”bFôJ‰”bFôJ‰”bFôÄ#íïíïíïÄ$ ß[ ß[ ß[-"œúœúœú-#ÌÜÊàíù3IVbÌÜÊàíù3IVbÌÜÊàíù3IVb­+ {úU{úU{úUö)++õõ)++õõ)++õõv žèžèžèv       ¶ „„„öö-¶.ÛÛÛíííßOOOߤ¤¤(OOO(¨¨¨h @BD@BD@BD¨# ëííïëííïëííïè%h+KOKOKO¨.ÓÓÓ(/ïðïðïðq½ÕÜç½ÕÜç½ÕÜç± 999ñ!†‹‘–˜²·¹øùü#$0134BC !&(,.359;>EGLNSUY[`bÃÅÈÏÑÖØÝßãæìï+,./FG^_abuv„…‡ˆŸ †‹‘–˜²·¹øùü#$0134BC !&(,.359;>EGLNSUY[`bÃÅÈÏÑÖØÝßãæìï+,./FG^_abuv„…‡ˆŸ †‹‘–˜²·¹øùü#$0134BC !&(,.359;>EGLNSUY[`bÃÅÈÏÑÖØÝßãæìï+,./FG^_abuv„…‡ˆŸ ±# ëííïëííïëííïq$ ²ýX ²ýX ²ýX1+IMIMIM±-ºÔºÔºÔOOOÔÕÔÕÔÕµ·µ·µ·/èêèêèê#'''#§©«¯¿Èѧ©«¯¿Èѧ©«¯¿ÈÑc!ÕåÝêöFS_lùÕåÝêöFS_lùÕåÝêöFS_lùã"ÈþÈþÈþã( 1+„1+„1+„£,"{"{"{£-¶À¶À¶À WWWÌ-½½½•ÝÝÝÕõöõöõö•%~Y_kq}ƒY_kq}ƒY_kq}ƒ>#ØÿØÿØÿ>, ;”;”;”þ.âäâäâä‡AAA‡!puw{€‚†‹‘–˜œ¡£§¬®²·¹ÈÏÒÓØßãö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´·¾ÀÅÇÌÎÒÔÙÛßáäëíòôùûÿ !&(,.359;>EGLNSUY[`bfhkrty{€‚†ˆÀÂÅÎÑÒ×ÚÛäçèðóôý #%)+.7;@DMQY]fjqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ puw{€‚†‹‘–˜œ¡£§¬®²·¹ÈÏÒÓØßãö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´·¾ÀÅÇÌÎÒÔÙÛßáäëíòôùûÿ !&(,.359;>EGLNSUY[`bfhkrty{€‚†ˆÀÂÅÎÑÒ×ÚÛäçèðóôý #%)+.7;@DMQY]fjqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ puw{€‚†‹‘–˜œ¡£§¬®²·¹ÈÏÒÓØßãö÷øùúûüþÿ    !#$*+-.013467<=?@BC²´·¾ÀÅÇÌÎÒÔÙÛßáäëíòôùûÿ !&(,.359;>EGLNSUY[`bfhkrty{€‚†ˆÀÂÅÎÑÒ×ÚÛäçèðóôý #%)+.7;@DMQY]fjqsxz…‡ŒŽ’”—ž ¥§¬®²µ»¾ÃÅÈÏÑÖØÝßãæìïüýÿ %&()+,./12789;<=?@ACDFGXY[\^_abdejklnoprsuv~‚„…‡ˆŠ‹‘’”•–˜™šœŸ OOO010101& “ g“ g“ g(***-´´´/çççùOOOù¤¤¤ù+TÀô"%)]jpw~‡‹Ž79jlnp’Àô"%)]jpw~‡‹Ž79jlnp’Àô"%)]jpw~‡‹Ž79jlnp’ÂðððB%+ åçéåçéåçé+fff« „„„+¶¶¶4 +5>+5>+5>4ÄÊÄÊÄÊ4 íïñíïñíïñ´!È{€†‹‘–§¬²·Øß÷øùûüÿ   !#$-.0134?@BCßáãëòùÿ &,39;=ELSY`)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ {€†‹‘–§¬²·Øß÷øùûüÿ   !#$-.0134?@BCßáãëòùÿ &,39;=ELSY`)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ {€†‹‘–§¬²·Øß÷øùûüÿ   !#$-.0134?@BCßáãëòùÿ &,39;=ELSY`)+-7@MYfqx…Œ’”–ž¥¬²»ÃÅÇÏÖÝãìÿ()+,./;<=?@ACDFG[\^_abnoprsuv‚„…‡ˆ”•–˜™šœŸ '''!Aejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏØßèíïõö÷øùúûüýþÿ      !!#$$'((*++-..0113446779::<==?@@BCCNPRSZ\achjnu{}€†‡‰Ž”•—›ž¤¥§«¬®²´¶·¾ÀÅÇÌÎÒÙßáãäëíòôùûÿ !&(,39;=>EGLNSUY`fhjkrty{€‚†“•—˜Ÿ¡¦¨­¯³ºÀÎ×äðý)67?@LMYef’”–—ž ¥§¬®²»ÃÅÇÈÏÑÖØÝßãìö÷ùúüýÿ    "##%&()+,./124578;<<?@@CDFGRSUVVXY[\^_abdeghjknoorsuvxy{||~‚„…‡ˆŠ‹Ž‘”••˜™™œŸ ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏØßèíïõö÷øùúûüýþÿ      !!#$$'((*++-..0113446779::<==?@@BCCNPRSZ\achjnu{}€†‡‰Ž”•—›ž¤¥§«¬®²´¶·¾ÀÅÇÌÎÒÙßáãäëíòôùûÿ !&(,39;=>EGLNSUY`fhjkrty{€‚†“•—˜Ÿ¡¦¨­¯³ºÀÎ×äðý)67?@LMYef’”–—ž ¥§¬®²»ÃÅÇÈÏÑÖØÝßãìö÷ùúüýÿ    "##%&()+,./124578;<<?@@CDFGRSUVVXY[\^_abdeghjknoorsuvxy{||~‚„…‡ˆŠ‹Ž‘”••˜™™œŸ ejlpuw{€‚†‹‘–˜œ¡£§¬®²·¹½ÂÄÈÏØßèíïõö÷øùúûüýþÿ      !!#$$'((*++-..0113446779::<==?@@BCCNPRSZ\achjnu{}€†‡‰Ž”•—›ž¤¥§«¬®²´¶·¾ÀÅÇÌÎÒÙßáãäëíòôùûÿ !&(,39;=>EGLNSUY`fhjkrty{€‚†“•—˜Ÿ¡¦¨­¯³ºÀÎ×äðý)67?@LMYef’”–—ž ¥§¬®²»ÃÅÇÈÏÑÖØÝßãìö÷ùúüýÿ    "##%&()+,./124578;<<?@@CDFGRSUVVXY[\^_abdeghjknoorsuvxy{||~‚„…‡ˆŠ‹Ž‘”••˜™™œŸ # ëííïëííïëííïf444æùûùûùûæ-¿¿¿ÏOOOÏMMMÏ &QSUju€‹–¡¬·ÂÏßíPZahnu}‡Ž•›¥¬´¾ÅÌÒÙáëòùÿ&,3;ELSY`hry€†•Ÿ¦­³ºÂÎ×äðý#+7@MYfqx…Œ”ž¥¬²»ÅÏÖÝãìQSUju€‹–¡¬·ÂÏßíPZahnu}‡Ž•›¥¬´¾ÅÌÒÙáëòùÿ&,3;ELSY`hry€†•Ÿ¦­³ºÂÎ×äðý#+7@MYfqx…Œ”ž¥¬²»ÅÏÖÝãìQSUju€‹–¡¬·ÂÏßíPZahnu}‡Ž•›¥¬´¾ÅÌÒÙáëòùÿ&,3;ELSY`hry€†•Ÿ¦­³ºÂÎ×äðý#+7@MYfqx…Œ”ž¥¬²»ÅÏÖÝãìÏ.ÜÞÜÞÜÞØOOOOOOXáçáçáçØ-¾¾¾!OOO¡* @Cœ@Cœ@Cœ «±«±«± ,<´µ¶¶¶½¾¿¿¿åæçççîïððð´µ¶¶¶½¾¿¿¿åæçççîïððð´µ¶¶¶½¾¿¿¿åæçççîïððð“xxx    |ããã|ÛÞÛÞÛÞÅ „„„E½¿½¿½¿E!ähjlsuw~€‚‰‹”–˜Ÿ¡£ª¬®µ·¹ÀÂÄÍÏÓÝßãlnp™›žžÐÒÔýÿ*,.WY[„†ˆ±³µîðôWY]ƒ…‡°²µáãæhjlsuw~€‚‰‹”–˜Ÿ¡£ª¬®µ·¹ÀÂÄÍÏÓÝßãlnp™›žžÐÒÔýÿ*,.WY[„†ˆ±³µîðôWY]ƒ…‡°²µáãæhjlsuw~€‚‰‹”–˜Ÿ¡£ª¬®µ·¹ÀÂÄÍÏÓÝßãlnp™›žžÐÒÔýÿ*,.WY[„†ˆ±³µîðôWY]ƒ…‡°²µáãæ.OOO®í®"½ý½ý½ý.' !’r!’r!’r·"ŠŒŽô"ŠŒŽô"ŠŒŽô·!$!$!$·ìììËËË€ uxzuxzuxz€ ++++ CFŸCFŸCFŸiîöþâRîöþâRîöþâRi ýÿýÿýÿé!φ‹‘–²·øùü#$0134BC &,39;=ELSY`ÃÅÇÏÖÝãì+,./FG^_abuv„…‡ˆŸ †‹‘–²·øùü#$0134BC &,39;=ELSY`ÃÅÇÏÖÝãì+,./FG^_abuv„…‡ˆŸ †‹‘–²·øùü#$0134BC &,39;=ELSY`ÃÅÇÏÖÝãì+,./FG^_abuv„…‡ˆŸ i.ÌÌÌÌÌÌ[9;;BDDKNPP9;;BDDKNPP9;;BDDKNPP["Æœ¡£§¬®²·¹½ÂÄúûüý679:fhkrty{€‚†ˆ“•˜Ÿ¡¦¨­¯³µº¼   1245deghŠ‹Žœ¡£§¬®²·¹½ÂÄúûüý679:fhkrty{€‚†ˆ“•˜Ÿ¡¦¨­¯³µº¼   1245deghŠ‹Žœ¡£§¬®²·¹½ÂÄúûüý679:fhkrty{€‚†ˆ“•˜Ÿ¡¦¨­¯³µº¼   1245deghŠ‹ŽÛ#Û+ žŸžŸžŸ8j%Of  ¶E?@”5#ãU ˜5¾ENi @ÿÿÐÐ[ @ÿÿÉÉI @ÿÿÅÅ4 @ÿÿÄÄ) @ÿÿ Ãà Dÿÿ  @ÿÿ ÁÁ @ÿÿ ÀÀù @ÿÿ¿¿ë @ÿÿ¾¾à @ÿÿ½½Ë Dÿÿ¼¼C @ÿÿ»»¸ @ÿÿºº˜ @ÿÿ®®x @ÿÿ­­_ @ÿÿ¬¬@ @ÿÿ««! @ÿÿªª  @ÿÿ©©ç @ÿÿ ¨¨Å @ÿÿ"§§£ @ÿÿ%¦¦ @ÿÿ(¥¥d @ÿÿ*¤¤G @ÿÿ,££1 @ÿÿ-¢¢ @ÿÿ/¡¡õ @ÿÿ1  Þ @ÿÿ2ŸŸÁ @ÿÿ4žž¤ @ÿÿ6Ž @ÿÿ7œœn @ÿÿ9››N @ÿÿ;šš. @ÿÿ>™™ @ÿÿA˜˜ó @ÿÿC——Ø @ÿÿE––Ä @ÿÿF••­ @ÿÿH””– @ÿÿJ““z @ÿÿL’’^ @ÿÿN‘‘I @ÿÿO. @ÿÿQ @ÿÿSŽŽÿ @ÿÿTá @ÿÿVŒŒÃ @ÿÿX‹‹¥ @ÿÿ[ŠŠ‡ @ÿÿ^‰‰n @ÿÿ`ˆˆU @ÿÿb‡‡C @ÿÿc††' @ÿÿe……  @ÿÿg„„ï @ÿÿjƒƒÓ @ÿÿm‚‚¼ @ÿÿo¥ @ÿÿq€€“ @ÿÿrƒ @ÿÿs~~p @ÿÿu}}] @ÿÿw||A @ÿÿy{{% @ÿÿ{zz @ÿÿ|yyõ @ÿÿ~xxÚ @ÿÿ€wwÆ @ÿÿvv¨ @ÿÿƒuuŠ @ÿÿ…ttl @ÿÿˆssN @ÿÿ‹rr5 @ÿÿqq @ÿÿpp  @ÿÿooð @ÿÿ’nnÖ @ÿÿ”mmà @ÿÿ•llª @ÿÿ—kk‘ @ÿÿ™jj @ÿÿšiic @ÿÿœhhG @ÿÿžgg+ @ÿÿ¡ff @ÿÿ¤eeø @ÿÿ¦ddá @ÿÿ¨ccÑ @ÿÿ©bb¾ @ÿÿ«aa« @ÿÿ­``“ @ÿÿ¯__{ @ÿÿ±^^j @ÿÿ²]]S @ÿÿ´\\< @ÿÿ¶[[" @ÿÿ¸YY @ÿÿºXXî @ÿÿ½WWÔ @ÿÿÀVV¿ @ÿÿÂUUª @ÿÿÄTTš @ÿÿÅSSŒ @ÿÿÆRRv @ÿÿÈQQ` @ÿÿÊPPQ @ÿÿËOO< @ÿÿÍNN' @ÿÿÏMM @ÿÿÐLL @ÿÿÒKKé @ÿÿÔJJÑ @ÿÿ×II¹ @ÿÿÚHH¦ @ÿÿÜGG“ @ÿÿÞFF‡ @ÿÿßEEx @ÿÿáDDi @ÿÿãCCS @ÿÿåBB= @ÿÿçAA. @ÿÿè@@ @ÿÿê?? @ÿÿì==ö @ÿÿí<<Þ @ÿÿï;;Æ @ÿÿñ::® @ÿÿô99– @ÿÿ÷88ƒ @ÿÿù77p @ÿÿû66d @ÿÿü55P @ÿÿþ44< @ÿÿ33$ @ÿÿ22 @ÿÿ11ô @ÿÿ00Ü @ÿÿ //É @ÿÿ ..¶ @ÿÿ--  @ÿÿ,,Š @ÿÿ++t @ÿÿ**^ @ÿÿ))M @ÿÿ((< @ÿÿ''2 @ÿÿ&& @ÿÿ%% @ÿÿ!$$ @ÿÿ"##î @ÿÿ$""Ü @ÿÿ&!!Ñ @ÿÿ'  Á @ÿÿ)± @ÿÿ+¨ @ÿÿ,› @ÿÿ.Ž @ÿÿ0| @ÿÿ2j @ÿÿ4_ @ÿÿ5N @ÿÿ7= @ÿÿ93 @ÿÿ: @ÿÿ< @ÿÿ>÷ @ÿÿAã @ÿÿDÔ @ÿÿFÅ @ÿÿH½ @ÿÿI­ @ÿÿK   @ÿÿM   @ÿÿN  ‡ @ÿÿO  s @ÿÿQ  _ @ÿÿSK @ÿÿV7 @ÿÿY( @ÿÿ[ @ÿÿ] @ÿÿ^ @ÿÿ_ó @ÿÿaá @ÿÿcÏ @ÿÿfÿÿ¶ @ÿÿiþþ© @ÿÿkýýœ @ÿÿmüü– @ÿÿnûû‡ @ÿÿpúúx @ÿÿrùùp @ÿÿsøøb @ÿÿu÷÷T @ÿÿwöö< @ÿÿxõõ0 @ÿÿzôô$ @ÿÿ|óó @ÿÿ}òò @ÿÿññ  @ÿÿððE @ÿÿƒãã! @ÿÿ…ââ Dÿÿ†ááù Dÿÿ‡ààÓ Dÿÿˆßß¹ @ÿÿŠÞÞ¨ Dÿÿ‹ÝÝ— DÿÿŒÜÜ @ÿÿŽÛÛm DÿÿÚÚ] @ÿÿ‘ÙÙ Dÿÿ’ØØû Dÿÿ“××ð @ÿÿ•ÖÖá @ÿÿ—ÕÕÚ Dÿÿ˜ÔÔÔ Dÿÿ™ÓÓÌ DÿÿšÒÒº @ÿÿœÑѨ @ÿÿžÐЛ @ÿÿ Ïω @ÿÿ¢ÎÎr @ÿÿ¤ÍÍ^ @ÿÿ¦ÌÌQ Dÿÿ§ËËF Dÿÿ¨ÊÊ> Dÿÿ©ÉÉ. DÿÿªÈÈ  Dÿÿ«ÇÇ Dÿÿ¬ÆÆ  Dÿÿ­ÅÅÿ Dÿÿ®ÄÄø Dÿÿ¯ÃÃÁ @ÿÿ°ßß³ Dÿÿ±ÛÛ78=Qmvm•ª7³ÄÕéï7*8>_d_…›_û_[°_ë_&_dk_d©_ß_@___~’_Ñ_º_ó_, _dh _d¤ _Ø _ 5 _e _• _² _Ï á _= _™ ê _! _X _d’ _dÌ _þ _0 W _Œ _Á _dù _d1_a_‘Áæ__>_[_xŠ_æ_B“__m_dÝ_dM_µ_z_•_°À_û_6’_Ö__da_d¨_ç_&Z_•_Ð_Ð_é÷_÷_O_p_‘_dó_dU_¬_P§_§_¾Ê_Ê_C_b__d½_dù_._c—_ý_c_z_‘c__ã_O_€_d´_dè__@a_Ž_»_í__dT_da_Ž_‰_¸_ç_d _dK _u _Ÿ ¾ _Ò _æ ï _!_E!e!_Ž!_·!Õ!_û!_!"_4"_G"O"_‘"_Ó" #_%#_@#_dƒ#_dÆ#_å#_$,$_S$_z$´$Õ$_%_1%_db%_d“%_Ò%_&\&Ž&_§&_À&_dî&_d,$_S$_'B'_R'_b'g'_Ž'_µ'Ñ'_ò'_(:(_Z(_7m7m7777ª777é7787778787777_7_7_7_7_7z(777777777(7ÿ‡ú‡  ‡ EOb~Ggš‡‰G£ª­  P 4y¹¾ÞÃùÀàɹ HJe‚ù¿Â»kÝÔk77Ìë ‡¹¹ÕÖÙººÎÎÐë¿À«`“+f™ë¾t *0ô 04Ä]¹Ùº  ]|¦ GIdÏÿ*e˜Ø– ˜®áÕ!²âÄá+ácjm–áŒ!ªÊ¾¾ÞÃÊ +1 ovy¢Št§ÙÓ¿ßÈS B“ FHMNPQc€S\“_“Ó‚Ž¡< ²²··âãÄÄÅÅ<õ| < '-3< 3<N<[¼E·ãÅ Å 6ŧ.Èî "® 9. @îWYsŠnˆ’..™n›7 ÷ 9 #@«©ýÿ(i CEF`|é Jg„)ÃiÌÎÐr @ÍóþCDHRVV2 &›QÏ› [ÇÉ$óöù$ 2d 5<@¤d¤«® ðûü CD M (.4Öߣáûüý    EFGLRiœñý –û&– 8Öm–“ÿ ÄðñCDR¿UWqˆiÿˆ÷›ØiÈ<þþÿÿ))**//008899HHIIVVVWWWeeffrrss‚‚ƒƒ‰‰ŠŠ˜˜™™¥¥¦¦Xt‹Q,Ë‘»»Û¿¿Ñ  Ñ IKfƒQOÑbl•‘jº_ÑñDUUz’CGõö÷  !"-./01234<<==>>LMNSSZZ[[\\ijkvvwwxxŽŽœž©©ªª««»ƒ 7?BÃlƒ~C†Ã‹Àls¦5qx{¤õxõ Þ÷Í^7Ì»^ )/Þ ;^‘ÞŸ'M'…ç¨ð‡Ö0ô÷úpøp 6=>Aðnp}  ?LÂb÷"YuŒËßK  : „˼Ô5pÓòòóôõö÷ !"<=>RSTUVWZ[\opqrstuvwxŽœ©ª«½TöÔ 7ÔVXr‰½ 5= = AF+ÊÆ :Ævïƒø ýxùx DGa}ødkn—x­¸ºÁÞßãä¿»Û¿Á "%Kh…A{Áž¥j ªTV[\^_p‡j]ªk³Ûó ,s  3 ó—ž¡œüþ'Ü !Ü /pwz£%z¥€¥ŠN Ž Nr¥˜NšŽœÁ—¼ÜÀ £Ç  ,2`PའR Å &'()*+,56789:;`abcdefghiooppqqrrssttuu|}~€‚ƒ„…†‡ˆ‰Š‹Œ“”•–—˜™š›œœœ¢£¤¥¦§¨‰GÎôÿIWWÉ .I ©IÅûRš›× &'()*+,56789:;`abcdefghooppqqrrssttuu|}~€‚ƒ„…†‡ˆ‰Š‹Œ“”•–—˜™š›œœœ¢£¤¥¦§¨{^„C@@GGQQXX__ÍÎÏÐÑððññóóôôöö÷÷ùùúúüüýýþþÿÿ      !!""$$%%''(())**++,,--..//001122334466778899::;;==>>??AABBCCDDFFGGHHIIJJJKKKMMNNPPQQTTTUUUVVWWXXXYYY[[\\^^__``aaccddeeffgghhjjkkmmnnppqqrrssttuuwwxxzz{{||}}€€‚‚ƒƒ„„……‡‡ˆˆ‰‰ŠŠ‹‹ŒŒŽŽ‘‘’’““””––——˜˜™™šš››žž  ¡¡££¤¤¥¥¦¦§§¨¨ªª««­­®® =>Ä•ŸmºÚ¾­  ­”ö¶þ)¶ -ö <vQòóôõø_  ;_  %_¬è 7@GQX_²·¹»¾¨XÐðCTT¨½ÝÁ( ¨  #¨u¨± !$1¢©¬Údw‡Ôûüýþÿ       -./01234<=>CCCDDDEFGHILLMNRSTUVWZ[\`abcdefghiijkopqrstuvwxŽœœœž©ª«šSZÚwã 8ch›£¦ÌWi£ÒòCCDDEFGHILLMNRRSSTTUUVVWWZZ[[\\`abcdefghiijkooppqqrrssttuuvvwwxxŽŽœœœœž©©ªª«« $ 1ŒRSTUZ]o†ÆòU‡Ž‘>*Éòûüý    EFGLRRiœ¾a” …xGHch•°ˆÓô7“xFnh”JX  %H‘8¸ —Òä'H{h“2H ¡xEƒh`X 8Ë °xD¨ÑŒh‘@HjX EH ˆ @ÿÿ<<N @ÿÿ33F @ÿÿhh: @ÿÿgg, @ÿÿ ffR @ÿÿ ddî @ÿÿSSà @ÿÿRR @ÿÿBBX @ÿÿ>>4 @ÿÿ55# @ÿÿ))Á @ÿÿ @ÿÿÔ(Û(î())):)<))n)p)¨)ª):))º):)Ç)n)77ï)õ)76w (•G0÷Rddd°y BD\]fnoq‹¹Gji9G¹HIIâMORdfgg‰‹ŒŒk"Al‘ ›BBDD\\\]]fffnnnoqqq‹‹‹ë)MMNOOS\\^^_``ffgghhnnqqtttww~~‚ƒƒ‹‹ŒŒ4/5´Bu:B]dd‰‰ö~~F(bΖ.)N13O®BîOS_tþSF`hwƒÏ IIOORRSS^^^__ggggttttu€€€‚ŒŒŒŒX\mn|~_ddˆ(((X8>ˆ:<XYZfhmqw|ƒ‹VÁÑKMM*Y^:^gtŒ #Ó#')+3ÃIR\^nqtu#Z`c–|:,\fnq~‹>Õh…†ŠH g8H ùΔHáhƒ y?s8™H)__žH?ëh‚|8£Hy< Ê _4ÏX ªH…8$ Dÿÿ"5 Dÿÿ½H@ÿÿ99¯H@ÿÿ77ªH@ÿÿ 66£H@ÿÿ55žH@ÿÿ44™H@ÿÿ33”H@ÿÿ22H@ÿÿ%11ŠH@ÿÿ+00fH@ÿÿ.EH@ÿÿ22H@ÿÿ5ÄH @<ÄG @ÿÿ1AÄG@ÿÿLÒG@ÿÿS  ¸G@ÿÿX  úH @]  ªG @ÿÿ1_  ªG@ÿÿe  ŸG@ÿÿi  –G@ÿÿlmG@ÿÿsI @z`G @ÿÿ1|`G@ÿÿ„UG@ÿÿ‰úú1G@ÿÿŽïï#I @•íí G @ÿÿ1šíí G@ÿÿ¥èìG@ÿÿ¬ççG@ÿÿ±ååXI @$¶ääßF @ÿÿ1¸ääßF@ÿÿ¾ãã×F@ÿÿÂááÑF@ÿÿÆßßÉF@ÿÿÊÝÝÃF@ÿÿÎÛÛ¹F@ÿÿÒÚÚ¦F@ÿÿÕÙÙ{F@ÿÿØÒÒSF@ÿÿß··lI @/æ¶¶1F @ÿÿ1è¶¶1F@ÿÿð´µ*F@ÿÿô³³F@ÿÿø²²F@ÿÿý±±F@ÿÿ°°ýE@ÿÿ¯¯õE@ÿÿ ®®ìE@ÿÿ­­ÜE@ÿÿ¬¬ÖE@ÿÿªªI @;©©ÎE @ÿÿ1©©ÎE@ÿÿ%¨¨ÈE@ÿÿ+§§ŽI @?2¦¦¶E @ÿÿ14¦¦¶E@ÿÿ<¥¥°E@ÿÿB¤¤I @CI££xE @ÿÿ1K ££xE@ÿÿS ¢¢^E@ÿÿX œœ3E@ÿÿ^ ‰‰(E@ÿÿc ˆˆE@ÿÿi ‡‡E@ÿÿn ††E@ÿÿr ……E@ÿÿu „„÷D@ÿÿz ƒƒìD@ÿÿ€ ‚‚äD@ÿÿ… ÐD@ÿÿ‹ €€ÈD@ÿÿ }}ÂD@ÿÿ’ ||ºD@ÿÿ– {{´D@ÿÿ™ zz¬D@ÿÿ yy¦D@ÿÿ  xxD@ÿÿ£ vv>D@ÿÿ¨ ss¬I @Y­ rrRD @ÿÿ1¯ rrRD@ÿÿµ qqID@ÿÿ¸ pp3D@ÿÿ¾ oo+D@ÿÿà nn!D@ÿÿÉ mmD@ÿÿÎ llD@ÿÿÓ kk D@ÿÿ× jjD@ÿÿÜ ii¾I @dá hhùC @ÿÿ1ã hhùC@ÿÿé ggóC@ÿÿî ffÎI @hó eeëC @ÿÿ1õ eeëC@ÿÿû ddåC@ÿÿ ccÝI @l bbÝC @ÿÿ1 bbÝC@ÿÿ  aa³C@ÿÿ ZZ›C@ÿÿ YY‰C@ÿÿ  XXxC@ÿÿ% WWYC@ÿÿ* VV>C@ÿÿ. UU0C@ÿÿ1 TT&C@ÿÿ6 SSC@ÿÿ: RRf4@ÿÿ= QQÇ4@ÿÿ@ PPÿB@ÿÿD OOÛB@ÿÿJ 44ìI @|Q 33ÍB @ÿÿ1S33ÍB@ÿÿ[22ÄB@ÿÿ`11J @€f00˜B @ÿÿ1h00˜B@ÿÿo//fB@ÿÿv..KB@ÿÿ|,,rB@ÿÿ**TB@ÿÿ…))DB@ÿÿŠ((J @ˆ'';B @ÿÿ1‘'';B@ÿÿ—&&+B@ÿÿš$$ B@ÿÿ !!B@ÿÿ¥  úA@ÿÿ«óA@ÿÿ°éA@ÿÿµâA@ÿÿ¹ÖA@ÿÿ¼ÆA@ÿÿ¿¡A@ÿÿÁ•A@ÿÿÇ#J @–·A @ÿÿ1ЇA@ÿÿØ~A@ÿÿÝ8J @šã  8A @ÿÿ1å  8A@ÿÿì  .A@ÿÿò   A@ÿÿ÷  ü@@ÿÿü  ñ@@ÿÿå@@ÿÿÛ@@ÿÿÒ@@ÿÿ ¾@@ÿÿ¸@@ÿÿJJ @¦«@ @ÿÿ1«@@ÿÿ"—? @@ÿÿ&ûþž@@ÿÿ*÷÷‘@@ÿÿ0õõ†@@ÿÿ5ôôz@@ÿÿ;óóh@@ÿÿ@òò^@@ÿÿDññV@@ÿÿGððM@@ÿÿLïïB@@ÿÿRîî:@@ÿÿWíí+@@ÿÿ]ìì%@@ÿÿbêêYJ @¶géé@ @ÿÿ1iéé@@ÿÿoèè³?@ÿÿtççhJ @ºyææÍ? @ÿÿ1{ææÍ?@ÿÿää½?@ÿÿ„ââ—?@ÿÿˆáá?@ÿÿ‹ßßi?@ÿÿŽÝÝQ?@ÿÿ‘ÜÜK?@ÿÿ—ØÚC?@ÿÿžÔÖ;?@ÿÿ¥ÏÑï>@ÿÿ­ËÍÕ>@ÿÿ±ÇÇÐ>@ÿÿ´ÆÆÈ>@ÿÿ¸Åž>@ÿÿ»ÄÄ®>@ÿÿ¿Â©>@ÿÿÂÁÁ[>@ÿÿÅ££V>@ÿÿÈŸŸO>@ÿÿËžž>@ÿÿÏšš>@ÿÿÑ——>@ÿÿÔ––>@ÿÿו•xJÓÚ‹‹Õ= @ÿÿ1Ý‹‹P=@ÿÿà8=@ÿÿ $=@ÿÿæ=@ÿÿé~~é<@ÿÿì}}^=@ÿÿíjjF=@ÿÿîii0=@ÿÿïhh=@ÿÿðgg=@ÿÿñff´<@ÿÿô^^Ñ<@ÿÿ÷]]¿<@ÿÿøWWž<@ÿÿûSSŠ<@ÿÿþRR«<@ÿÿÿAA–<@ÿÿ@@€<@ÿÿ==w<@ÿÿ<<g<@ÿÿ..`<@ÿÿ--Y<@ÿÿ,,î;@ÿÿÓ;@ÿÿ ¼;@ÿÿ ®;@ÿÿ™;@ÿÿS;@ÿÿòò4;@ÿÿññ; @ÿÿîîï:@ÿÿÖÖÐ:@ÿÿÕÕ¾: @ÿÿÒÒ÷9@ÿÿ ««Æ9@ÿÿ"ªªÙ9@ÿÿ#¥¥¤9 @ÿÿ$¤J Dÿÿ$޵J@0ù%“9 @ÿÿ&‰‰ÌJ Dÿÿ&„‰ÝJ@0ü'ˆˆˆ9 @ÿÿ(~~ñJ Dÿÿ(|~K@0ÿ)}}z9 @ÿÿ*zzK Dÿÿ*xz'K@0+yyK9 @ÿÿ,gg;K Dÿÿ,egLK@0-ff&9 @ÿÿ.VV9 @ÿÿ.SVaK@0/TToK@00UU9 @ÿÿ1QQ9 @ÿÿ1NQ|K@0 2OO‰K@0 3PPÚ8 @ÿÿ477o< @ÿÿ5,,H @ÿÿ6++uH @ÿÿ7**CG @ÿÿ8@E @ÿÿ9••ÌC @ÿÿ:ŒŒˆD @ÿÿ;uuçB @ÿÿ<NNB @ÿÿ=##Ý> @ÿÿ>ÉÉ—> @ÿÿ?ÀÀ>> @ÿÿ@æ= @ÿÿA””«= @ÿÿCŒŒù; @ÿÿDá; @ÿÿE¤; @ÿÿFµ: @ÿÿGÎΠ: @ÿÿHÉÉŒ: @ÿÿIÈÈ|: @ÿÿJÃÃm: @ÿÿKÂÂ^: @ÿÿLÁÁN: @ÿÿMÀÀE: @ÿÿN»»:: @ÿÿOºº1: @ÿÿP¹¹&: @ÿÿQ¸¸: @ÿÿR··: @ÿÿU±± : @ÿÿX°°»9 @ÿÿY¢¢¬9 @ÿÿZ˜˜-9 @ÿÿ[““T9 @ÿÿ]jjù8 @ÿÿ^XXÈ8 @ÿÿ_FFð8 @ÿÿ`CC»8 @ÿÿa11®8 @ÿÿb00 5 @ÿÿc#.:>BXcgk{‡•™¥µ¹Òúý    GªGgEÔ(ºGÍGÛGæGH HH!H2H*IH`HÔ(pHzHÛGˆHÔ(HzHÛG¦HÔ(ºHÆHzH×HÔ(ºHîHüHIIÔ(ºHÆHüHIIH2IJIH[IsIŠIH¨IgE?E²IÇIåIÿIJ5J7§J¹JÉJÚJ?EêJKK,K:KQKdK€KŽK¥KHêJK,KQK€KLH[LtL‹L L?E[LtLÏLíL7%M?E[LtL‹L2MFM?EƒM˜M®M*ÒMìMH‹LN,N[L@NTN?EÏLN,N[L@N¥N7%M?EÿN2MN,N[L@NOD*sO²I2M†OH HH!H2H?E²OÄOßOöOP&P7§J¹JÉJÚJ?E‰PŸP§J¬P¹J·PÇPÜPÚJçPH‰PŸP¬P·PÜPOQHQ•Q©Q»Q?EQ•QáQüQ7%M?EQ•Q©Q+R?RsR„RšR¥R*¾RšRÐRsR„RšR¥R*¾RšRÐR?EåR÷R S*IH`H GªGgEHÆÐD€¹ OQRSUVWXYZ¹5)¹A¹FÚDik !'Ùõ…ø6%?ëT¦¨ªÄÅÆÇËÏÜÝßáâðñòóôõ÷  !>AOQRSUVWXYZjklmnopxyz{|}„…†‡ˆ‰œ¤§¬­®¯²³ÙÛÝßáú015k ‹ë?äèìíîï &adgq€‚ƒ¢¥¨ª234ëCdet ,/2ôFãäå   Ý>ÈÉÝCab]Dqq]FºÀÎ&3&(*&9V÷û&:¸¦?á÷¦A&CS¦Dx¦FÙ59OT;û=qwH1˜#/29Qá˜B/0Gça-"«ÂÅÇñóõ  !*.234kmoy{}…‡‰¯°±á;*aB)*,.Ê;Ób.Ó´èS;òÓ;S>žŸSF·<ZÁÂÄÅÆÇâäæçðñòóôõ  )*,./01234jklmnopqrsxyz{|}„…†‡ˆ‰œ¬­®¯°±ÙÚÚããääååçèú         5< 3¼; êíï  (cfiƒª·å 2347;Þãååî   îB RS]^}~€äæçèéìî  &',./023abdeghqrs€‚¢£¥¦¨©´¶Úãäèí   î;nA% 0134bcceffhiirr      w¥6¹D÷Œw3Ÿ÷9«w<<K,÷Dƒ@<%HM@E•@H©>Á2 ç  ,./023s²:É2<$GL2?ÍÖ?F²A2B$v2H› OQRSUVWXYZ›?á÷›CYdÅ¥§ª«ÕÖñò  !"#$%&,-.012<=@AFGHIWY]^fghijnopqr•–—šÁÂÄÅÆÇËÏÔØáâäçèêìíîïðñòóôõ÷     !$&()*,./124OPQRSTUVWXYZacdfgijklmnopqsvxyz{|}€‚ƒ„…†‡ˆ‰œ¢¤¥§¨ª¬­®¯°±·×ÙÚãåçïú    01234567d PTä8:>ºº¼¼¾äDäE¬­®¯°±ÍeŠÐÐÙÙäæçèìî         &.///001222334AAHHOOQRSSUUVVVWWXXXYYYZZZZadgqqrs€‚œ¢¥¨´ãéêëìú M 0Í?äæM@ïÍB234Ö# µ¶·çì V3V>ŸÖ?äæqrV@ðÖAÖEª2VH¿<WZ¥6¹ˆ"39Nˆ9~®±ˆDtuE…‘çs>–‘@õz9z¬¯z@óúACfghijnopqrâíï)*pƒ¤§ªç 012347Ã>&ÄÅÆÇ  !jklmnoxyz{|}„…†‡ˆ‰¬­®¯°±C?ÔECA   //0223ÃFÛCGñ¬9˜¬Dyµ9˜µ:Î5@ìíîï&adg€‚ƒ¢¤¥§¨ª²³ÛÝßá012347µH79Sž<AIS@-èéêìíîïòóôõ !&'(abcdefghilmno€‚ƒ†‡ˆ‰347ž@÷ýžFמH4g<.5çBMNð8C99p9r‹ŸýpCVYZðGÙ9¢¥¨Y<,4YA  aaddgg€€‚‚úú  YCV¢ÁÂðñòóôõ ïï 5 >•–‹B,,..œœããïïï666 Gçèí9PU: °°°±±±&&&'''”E¢£¤¥¦§01”H2ý=•–ýE¯FÆ9 ªÆ<YZF=iwÆA¯H78=iq€8>š¸@48A  ¸G H+s*1ó?æéê '(0134bcefhir£¦©íóAóCf\9j'(hiÜ<]ÜAÜE¬¥ OPQRSTUVWXYZ%#bc{./8%<#FK%@ê3%HŽ!©<!13CRR>——>¿À—?áûA    B"#CR—F×`<-3`G`HÉ ).IDpIF´¶·ãäåçë    ÉFÝÒ@RDqrÒG »#ìì»81»9ž ¢»=Š‹;?ÏA;B&'7B m:ÂmDssmGmH&öjjttyˆv>¦¨Ò9vA 0134_ééêê'(bbccefhi£££¦¦¦©ßFãä¨ 4Õßåñû¦¨ªÂÅÇñóõ  !*.234RSWXYZkmoy{}…‡‰¯°±´Ò9¨#êê(Eˆ1:¹1>š1F´¶1Gï6ßåçûDlc{8EL<&INÌC]ŒLE—žõü•%ê(cfiÕ=‹ŒÕ>Ç•AUG÷úHþ.,./2adgqs€‚¢¥´Úè >3  ¾: ÒÕÕÖÝÞßßç>>œ¾>Äþ>ËÌÏÐÔÕØÙ>>AAEEHHOO¾@~A>CU>Dps¾E¥§1‡AF°>´½?ßA  Dkù9!ù8LXù;+ù<fghijnopqr}~€ù>ËÏ>Ay?Ýù?ççùCgh¢ÞëÜàB%·B@îïÂD|+ ÌÌÕÕä,>>EE+3 «<AN«=„†Œ+@ìí«@4+B$+Dn´)jææéêê '((01344£¦©¶¶¶¶¶·····äääåååí4;ñû´<W^´=†††‹ŒŒ´Dz#éé:È=gu=rx>š?ËÏÔØ>AEHDvf4Qæ9§¨æ:Õßåçñæ=“”fA fB*.fHÏ. äçèìî &O>ž¡A!DmŠ<@HRŠH0“òóôõ !jklmno†‡ˆ‰“9‰|:Ã|>¨ªü@ |B,,.E!7æèèéììîî &&'034QQSSUUVVWWXXYYZZbehr¢¢£¥¥¦¨¨©´´¶ä E3 E:»EH®"æ 0134r¶¶¶¶····ääåå    ®"ä ®80®;®>Â.A ®FÙ57Gï6€ÄOQ+4€<=L€DsE„€E¢GåHi 6¤ÐÜìø+8Ve°Åé<fn}i?ÝéAr;úÿr@òóôõ !jklmno†‡ˆ‰rB*rEœ¶·ú[>£Û@[B)*,.ÛB4¤@AHIW¤9¤;$=hp *14çççç     ?ËÌÏÐÔÕØÙ>>AAEEHHOO @çE¢£¤¥¦§01G–#^}~€äæqr¢¢££¤¤¥¥¦¦§§¬­®¯°±0011:±–<@M@èé3–G?ßÿBOÈ01234567È84FH9fjÈ=Š‹‹È>ÅÈD}ÈE§1Ñ $v´´´µ¶¶¶¶····×Ñ<]Q?ÜÑFß::º:@íºD{< 04ƒ=pvƒFÕÖll#íìD‚ƒìE­ìFãäå   õE®uH*^  ÞÊÓã+=D^:Á^=jx^@ñ^E™œÞG§@ûý'A  0ËÏ>A0!/20=hv0CT°E¤0 äèìî &adgq€‚¢¥¨´ã RS; îññòùúûû™;<"25™H3b b" 0â<^b>¦¬¹b?Üâ?ääâAË# ´¶·çê K3 K9gq­°K?ØHKB),KHTAAT Ô ÔØEHT+ê(cfiT9jtTB)=9b½?â=F´=Gï6½H9† RS}~€èéê'(bcefhi£¦©Ú †9}=ft>•†> ª¬¶¹º¼¾ÀËΆ@ôCPRSTWXYZï:Öo<:,ï>Ë>ø!£¦¶x=ouxCWxE¢£¤0xGÁA/·å ª=âþ§»*F³ªG  ªH6³?âç³@'(efhi³B/2³CZ3Do3E‰œæé'behr£¦©¶ä :·E‡œE£¦©F²e9o˜öå@åCcN 66Îdh‘ENîùÿNfghijnopqr}~€N:ÀÎ@NCUVWXYZÎE¨©ª×Fá :É A ‰CX Dj: °°°±±±&&&'''=go~E†F±{—žõü{FÉÒÄ# ´¶·çé Ä?âäæçpqrsÄ@     0134DB(7ÄB1ÄG -"æé'behr-#c/-9`“¶ 4œéêëìú¶>!ÂÅÇñóõ  !*.234kmoy{}…‡‰¯°±¶E¥¦§12êç ]•–ššžŸËÌÌÍÏÐÐÑÕÕÖÙÙÚÜÝááäèèèééêêìììííîîîïïòóôõ÷÷ûû       !&&&''((,.//012234>>>?AAABEEFHHIOOQRSSUUVVVWWXXXYYYZZZZaaabbccdddeeffggghhiiq€€€‚‚‚ƒƒ†‡ˆ‰œ¢¢¢££¤¤¥¥¥¦¦§§¨¨¨©©ªª²²³³ÛÛÝÝßßááãéêëìú 0011223344677Ÿ9CSSXXZZŸG è%å h+·å h=nth@òhEœçèú ñ@qF¼¾qH'Ú8 79:C¾ÉËÒÒÚD#?ÍÑÖÚ?BFI£@ûý£B//22£E£¤¦¨©ª02#F²³ÛÝßá#Gëë£H5 :°Œ:È B!FI£@ûý£B//22£E£¤¦¨©ª02#F²³ÛÝßá#Gëë£H5 :°Œ:È B!$ ˆe_–<ä¼Lä\ NŸç\0}ž<á?ÄL8}m@ÌLó\ @}«<ãø\ a< ‡ÕLE}ý\$m$ DÿÿU7 @ÿÿddL7 @ÿÿ[[÷6 @ÿÿKKî6 @ÿÿIIå6 @ÿÿGGÍ6 @ÿÿBBÄ6 @ÿÿAA·6 @ÿÿ@@£6 @ÿÿ <<š6 @ÿÿ ;;6 @ÿÿ ::}6 @ÿÿ 66u6 @ÿÿ 55j6 @ÿÿ44I6 @ÿÿ11?6 @ÿÿ0016 @ÿÿ//6 @ÿÿ..6 @ÿÿ-- 6 @ÿÿ,,ö5 @ÿÿ++î5 @ÿÿ**æ5 @ÿÿ))Ö5 @ÿÿ((Í5 @ÿÿ''Ä5 @ÿÿ&&¹5 @ÿÿ%%°5 @ÿÿ§5 @ÿÿŠ5 @ÿÿ€5 @ÿÿv5 @ÿÿ m5 @ÿÿ!a5 @ÿÿ"AFJFSFjFFŸF®F¼FÑFÜFåFõFýFGSFFjFGG)GAKMXYefrs‘’”•±²µ¶ÅÆÑãt\B./12345:BFHILNQRRSSVWZZ\__bbde{Œ‘’“¡¥§¨««¬®²³µµº½¾¾¿¿ÂÂÄÇÇÊÊÌÍSÞFýS½íW`jk¡¤¥¦§ª¼½¾¿Îß%((‚…… "5„‘¥¥±]Yn\›ÝZ¬®²ËÐÓÖÙÜàâåèëîñ]\ ..uw{ŒŒý\ò$7&312LW’®÷<lm®Á**,/13ObcˆˆŠ‘˜»ÊË÷ "'5:GR_l~¯°¿Rù†[ÙRkªoSäQïS¼íx/Tù¾T^ïüXnpt—²³µ#88;>>@BJNQQRSSZ\z€–˜˜šœœž¡©«¬²³µº½½¾¿¿ÂÄòû #/06?BLNZ[ghtuz“–™Ÿ´·ºÇÈÐÑáÏX/24557î(;HS`mÀZ$[nopqstò+-/0VXZ[ceghprtu“”–—™´µ·¸ºÃÇo\ ,245{Š’“ØO5®°±²ö{ xZ€Zaghhiijklm}}™¢£¤¥¦§ª®¶ÁÆÆ'((((**-CC|„…………††ˆˆ‹¢¢ðý  ""'(++/55:;?GHLRSVVZ_`ccglmppt}~ƒ†‘’£¤¤¥¥¥¥¦§§««¯°±²¿ÀÃÃÇÑÔ×××ÛÛÛÞÞ\îø\òü 2DO\ivy‡Ššž¨¬®»ÉÌÌÐÔÖØÚÜÞSêk¡SÛ4AUµzŸáYðýþ!Z!TdÀÌÁZ›¬ÀËa\'BNQRRRSSSZZZ\v¡«««¬®®²³µµµº½¾¾¾¿¿¿ÂÂÂÄ\!8:VXÊS`¡ŠZD[lnpppq8;>?@zœžò+,-/0>?ABKLMNVWXZ[cdeghpqrtu’’“–––—¯±²²´···¸ÃÄÅÇÈ*\ñJ\’j\2bwʪ\s²óAl¯SYkpryz{{³Y´#ãó\ò{|} ¢£œY§L\ZXÑüZ ¦ÐÓÖÙÜàâåèëîñE¦ìW–ìóeR¥EYk¬®ËÐÓÖÙÜàâåèëîñåZ¥e\14I^_bw’¨ÆÇÊ…\8˜T¾ð%x‘U¶%ƒ8˜åîYò WR§wRj¤ó(…„¥÷R(…¥T¿ð‚±—TGQSVXYYYmxz}~~~ï     ~±±±²²³³÷Yö.NŒº×[å7\ý×\íöÀSÏàV”±Cq²QRS½¾¿/Zgt—¸ÇàX4€Y’“”•@[®¿îñÀ\z°²³µ¶¸ÉQm¶éYñ   ]ó?@@LÑ)] yŠž¬®ÌÜÞòYò2])<ITanÁ›X#Y ELLWXYkrw~ÛYðþÿB®ÁZ÷@¤Z—$[¨d[Ó\ëä\ðƒ„„„„…†$]üÌÐÔÖmH~¬®± Rú-Z)D­[àí[è ]÷6Z7V[Ж\>œ+VcpÃ_ /XZ—™s|ðY EMVYks}~ß\íô¨WEJLRSTT>@z˜šœžíùáèX6ˆYBŽ’“”§®±í8<ABCDXppq—²8>QRRSs˜œ²²³³½¾¾¿ô /?LZgt’––—²··¸ÇÑÑRÕ!QSç^‘SØ!±WghÆ(*C…†ˆ¢„¥¦§ÛÛqY[§Q],WdqÄzZ [^uxyšŸ«¸»ÂÊš[Üz\IKLRSWXZ^^{¨ª«®µ¾¿ÂÆÆ#TöƒUíY7CZ7=>¬WlíöìWö,YHñŒYŽ•§¬²´íô#8E8>s–˜œ,] 2DO\iv‡š¨»ÉÌØÚÕYï  ,33Fbce{Š‘‘¥ÊËÍu[Öþ ”§®°±±²íöù7CÞW«Þ¾[â'Sß§X /(;HS`mÀ'Y*HSYnz~ðö÷ùúý!\nq›µ¶ NOQST}º»½¿Àñz{}“—Ÿ £´¸ç\ò#6ÐÙVþZp–·™Zj¤¼½¾¿Î%((‚……„‘¥¥±"R}£°¢W$®Á:LLVWWX "'+/5:?GLRVZ_cglpt¯¿ÃÇ Y E“®An“´KZ:=@ACDEÔS "5”Y“”•©®°±²ï:ABCDETZ:>??BD”Zi}TNÆ~)|^  1>£nÍU@ÿÿ;;ùU@ÿÿ99ãU@ÿÿ 77=V@ÿÿ 55"V@ÿÿ33ìW@ÿÿ11ÞW@ÿÿ//AU@ÿÿ--TV@ÿÿ++V@ÿÿ))ÌW@ÿÿ!&'€R@ÿÿ%#$S@ÿÿ( !ØQ@ÿÿ+÷Q@ÿÿ/2R@ÿÿ2·W@ÿÿ5çQ@ÿÿ9ÉQ@ÿÿ="R@ÿÿB ©Q@ÿÿE W @ÿÿFÎm†u•uÎm†u•uÎm†u•uÎm†u•uÎm†u•u.o¢u´uÅu.oáuðuÔ(þuvvHnEHnEHáuðu.oáuv2v.oáuðuÔ(áuðu.oáuNv]v.oáuðu.oáuðu.oáuwv]v.oáu´uÅu.oáu‡v¢v³v.oæv­\7#çQ÷Q·WÇWØQ€R$V)¨W ©Q ÉQS!AU-ùU9±W !$'/3579;"R 2R"V3¢W $›-ƒU3579;ãU7TV+¬W1ÌW'ìW1üW1E3579;ÍU;=V5W þ-ÞW/_  !#$'//11WV.ñn¨N†>Õ^ ûn[ o²N&zi.>¸N^oZo.J—>'nN’ oYÂN1y ë^ ÇN]oX.\yX@ÿÿ JX@ÿÿ 0X@ÿÿ%X @ÿÿHáuwwƒ¸ÎmFwXwqw„wwÎmáu{´7 _ ¨W¬W 0X`XE%XyX ‘X  ¢WJXjX¶>ÝN”.-oVâN¾>È›.QlÃ>wëNN _ È>Ç7oU^x€‘òN¨.?oTÐ>Æ`klJÕ>Å'b Dÿÿb DÿÿrW Dÿÿd Dÿÿ`] Dÿÿ X Dÿÿ!!Ì` @ÿÿo×q` @ÿÿ ©R6` @ÿÿ¡Û_ @ÿÿ<~x_ @ÿÿ|U_ @ÿÿ#;`_ @ÿÿ(ã7Õ^ @ÿÿ+´ß©^ @ÿÿ1#±˜^ @ÿÿ9 e^ @ÿÿ@Ö÷R^ @ÿÿGÄÒ.^ @ÿÿO¨¾…\@ÿÿToq–\ @ÿÿY:^^ @ÿÿ]$-Ö_ @ÿÿ^É_ @ÿÿ_½_ @ÿÿ`·_ @ÿÿaÎmÞzôz{{Ÿ²ÎmÞzôzá²Îmºw„{•{{¶{Á{³Îm||„{•{ƒmI³Îmôz„{•{ƒm‡³Îm•|„w®|Îm•|áu„wF¹*áu{´*áu•|3xú|y¹*•|3xú|!y8}E}R}H•|3xú|!y8}”}*•|3xú|!y8}”}*•|3xú|!y8}Ï}R}*•|3xÜ}ì}kX•|3x„w~Háu×w¹@~¸lºl CºGR4ÇW-0Éʪ°×ÙÝÞèíôy’¸…‹²´¸¹ÃÈϧÅ!"ÓÙêF„„¾Îßî:;G]ª^% äS~úÐZ(HUdg_ãCEIyX),%)$/0PQRSeoz‹µ¹»¿ÍÒã '/0‡‰‹’?HJQs¤«­¯³¹½ë^ ½¬¸‡“ÛÕÝòSŠ5+WW/23458PQRSeoz‹½‹–¬¬­¸ÅÅÏÖî÷÷ÿ{¹¹Ø Qy‡‡ˆ“  ª±ÉÒÒÚÛÞî‘ÆÆì;¹ÂÕÕÖÝéñòõGH`‡º¼¿Ôæðñûˆ’“Ÿ&39uuÉàDU¹¾ÍÓ  ˜¿ÇíùZ[—¢ºÊÌãåL{š¢ÈÔßãIij¤¬ÇÛÝùû±ÄäÕç>F‹R8T#'-99;=>>A__apquuw¦®¯åèðô÷÷øüþ14=ADFFGMMOQRRVY]šš¡¦®®²²ÈØÙÙúýý!&&()*..266>BCEIIKLMQQSTU]^^cfnnpr˜›£ªª¬¯ÁÁÃÅÅÇÑÔØÝÞêíòòóBq|‰‰£³´´ÕØØêð÷û  ##(--::?CEILPPSTX\\_`dllps}}ƒƒ…‡¥­¶¶¸¼¼¾ÀÐÐÒÕÕâèìñò   x¥»ÆÆÉÍÒ××ÚÚçëëìïïü  !%%'++-22499:@@BCCDMMNSSUXX\`efinno}ÏX%())+Z{'>?åìðñ"$,.01=RY&()*BCEIKLMQSTUnoqrxª«­®¯ÅÇÊËÑÔB #%:<CEILPSTX\_`d}~ƒ„†‡Ž¶·¸¼½¿ÀÕÛÜâè¥ !%'+-235@ACEX\­tª­O_æ"#‚ËÌÑÒÓäåêëìCÜÝâãäúûaÊÔØO)/;s°Wa3ˆÁ%2FITgn\ž˜^ ¡S ‡-Ôæðˆ’!Z(Óìäa\¢µ}!` AWX%&FIJgÊS/Øì`ŠZ×'9;=>A_auw¦®å  "#$,-.01=MOQRSTY˜™¡¦®²ÇÈÙùúúý&'()*.26>IJKLMQRSTUZ\fnpŽ›£ª¬ÁÃÅÅÇÉÊËÑÔÝÞãäêíB{|‰¢£´ÔÕØê #$%(-:;<?PQSTX\]_`diks}ƒ…¤¥­¶¸¼¾ÐÒÕÕÙÛÜâèñòùú¥ÄÅÍÒ×Úëïü  %&'+,-24@BSUXX\efi­tª«­Š^éêñòŠ_/°±²´´|~?‹Œ’”¤ÙÚ®ÇÉÎÎÏÐÐÑÑÔÔÕרØÚßßáââããææçøÓV @@BCFGacdghüZ4|‚…ˆŒ””˜›ž¢|^è<_åë  'E â:{; ¨¬ns…\p9_uMÁÐSTR¡Xg0U9•½Ñ9_ru°Þ5M^”³·Üýþ7DÁßvŽ’·ØÙí.KÐó}¶¿Üïðÿ Sg~¬ø s›¨¯µîY Ûæêìîîïòó.^©WR5wR2o{¹‘ÆG÷R¹ÆHTS¡‹¢>—T >JLNÙíííïð÷Y ËäÜú×[•þ7\®+S¹×\|‡Œ§Àäï 8_g¤Íàæö¡«©±·=Eoy|„÷]À·_^i,DR^ÉÚø$/?Q`kÀS{ïàV¸Í"àX(€Y ª±³¶·¸ÇÊËËÍÎÏ@[CSf”ž¢êÉQ©ITñû“Ÿ ]Gs{€ƒ„„…ŒŽ””®²³·ÙÛÜãúýýþCDDÞßáBv‰Ž’´¶·¾ÕØØÙíEIKKòóõ¥¿×ÚÜëïïðÿ  fgh)]•œ£ÍYŒþ  x~¨h£Z]ÁÈÏ1?w‰‹)^>KNNQ[s„‰’I^ ª·ÅË×Þèéêñò ©^ $®²Ùý‰´Ø×ÚëïÉ_d|µ5Wq)`+A^bdimõ ,7DFRV^bx|²µÉÚæø$/35?QUW`koqÒT].PjÐâø›òYÛåæè2]‚ŒR^Å6-’_ „679E-.0¬öø !s™›§¨­¯´µ»ÀÅY=MOQQRX\Û_<„@A«««õrrBDUÄV @@AABabbcZÎçßý$[6d[\›ä\·¾ÀÁÁÄ—˜›¢ªª«¬¬­®°¸¹½½¿ÆÇÊÑÞßèéøùyz{|}~¸¹¹¹¹º»?z{}……†‡‡ˆ‰‹“”˜˜š¡¢¥¬¹ºÃÄÓÔ‘’“”——ÅÆÆÆÆÇȤÃÄÇÎÓÓÔÕÕÖ×ÙÝÞââäFGHHHI®¾¿¿ÀÀÂÐâîïðñóùùûûüüþ++.u‘’“–ŸŸ  ¢¥ÐÐÔ$]‘v‡þrŒ ¼6wƒD_åìíññöü=AHIU„ÙÛñEíï ¨acmd`¤¯±³çì|¤`®  u§©­±²¶ºav„…ˆ‹› R '(Jµó•–¤¥U ©±´îöoy”™£§­[Œí[˜ ] ¹‰JN­±Ž²z~€†‰_ ÅÆÇÈÉÊËÑÒãäêëBÕÖØÙÛÜâãùú¥XY[\V[|–\&;±Êá>ì,R&IQnªÅ #:P\}ƒ¶¼Õ %+2@XªÖ_õ 7FVbx²æ6`¡_ %$&µ·ã?¤ß\|…=F¡©¿^)3456CSTÿ_ <L]ah.2PTjn¨Wh;@E[quz’Ùáããíöãìô,.4;DMOR]|®²ØÙý&(.6BIKQS]nªÁÃÅÇÝ=‰³´Ø #-:CPS\_}ƒ¶¼ÐÒÕñx¡µ×Úëï %+2@SUXe­õöt˜™èX*¯wˆY“;CFJQpuwx{„©±¸ÅÊÍ×áåæïð $9>_uãêì÷÷þ",0;FFMR…šš®²Ùý!&).6CILQT^^nªÁÅÑØÞêòòF‰´Øðû #-:EIPT\`ll}ƒ¶¼ÐÕâìò  ©ÆÆ×Úëï %+299@CCMMSX`fnn¨`ö™ÑR%  QS—HO$‘S„%  ±W6ZÎÎÖ×´½ÉÊÝÞ|““žž¹º  ˜¤¥¸¹’—¨¨ÆÇ<=âHˆˆÀÑãùü +AAIJ ±ÐqYÑêâ[5Q]lu‡Š´ÉÌ:<@`bvx|‚…ˆŒ•˜›Ÿ£©îôþ-.DNPS¨ÁÛð'(JKRS`bho¥«ÂÄÆÇ÷ƒœ¶Ëòý$;QS]_nu~„¯·½ÑÓÖzÒä &,3ATVYq«Q`¢¯q`©zZ'-BLOV^š[ˆú^3ÃŒ§ÀÏßäéï 8_g}¤ÍàæöMRZ‚›ªº¿ÄÊæñü/mt“®Þôü+Ly´ºú` v|}©ªª­±²´#T­Öˆ±ÖéƒU |<¡©©®oouvY+CZ £_ ãå¾ÀÃÊÛè&/¬W&VWX%(IJ«´ÐÐÐâââòóóöÿr””•––™££¤¥¥§©ìW¯|„ŒY;ANpu‰©®±ÅÉÊ×àáãã $+9;>_auw,]:Ë#+3?FNVkƒ”Ÿ¾ûþ ¦Üàø )@MYey€™©¹8;óö "(.5;Ptw|…‡Œ`«´µòÿÌ`ou[‚Õ^µvU_;Þòfõ_<HMRVWXZ_j‚›¿Êæñü/mt®Þôü+Lvy`@X]aag''(.22@FFJPTTaggjnnþª¸ÅÉÍÎ×ÞÞàèéêñò ÞWÁÑ—Æø z¡Ó^ËÇרD¾[^`¢´çìçQ  ±²'S‹'Y)Úèêòæ  '(€../166;=rsu¯°³@--35‡ˆ‹ÀÁÄ'_å"$0X‘œº¦Ç0_å™U‰?J­®±±uvvyy}…¶ÙVAb™Z!2PQRSeoz­Ö{¹¹ˆ±î‘ÆÆÖéGHº¿Ôæðˆ’™_ –¬ y‡;ÂÕ‡"R"'0!")1=LT[u†—¢³¶Òëß5T`j‹œ¬ÄãâS‹ÅÏî÷ÿQ ªÉÒÚ¹ñ¢WDU˜ÇùZ{¢Ôi¤Ä«¼Õçöøør‹˜™››ª­ Y ÊãÛùKZ  `?_jõ 7FVbx²æ0RlR¿ÔSÅ÷ ÒÞõ”Y¬±¶¸ÇÊÍÏÙáãåæïðö ýSQ‹¢>ýT } =ãä¯ w®½_bm3UoRX´òÿ”£†[…Æ^ EIhkú ÕçùoSe“ABïSPXg0/T¥ÀÏR»o\ORƒ…ŒŽ/`a2Tnï`p„8T¼xZ&0123458DUZZ·»¼½¿ÀÁÃÄÇÉÊÊÍÍÎÎÎÑÑÒÓÖ××’–—›¢¹ÅÅÆÉÊÏÏÑÖ×ÙÝÞèíîôô÷÷øýÿ !")1=CLTZ[uy†‘’’“““—œžžž¢³¶¸º»ÒØë      ?syz}”  ¡¤¥ªª¬±²´¸¹ÃÈÉÏÏÒÒÓØÚÛÞßäîõ 57EFTV`bijx‹œ¤¦§§¨¨¨¬²ÄÅÇÈãæì!""%(0;<==IJR^^l¤½ÂÃÇÎÞçéêêëìïñòõFI`|„„„‡ˆˆˆ‹‹®·¸º¼¼¾Ç×  :;;=>AAADDEFIJJø\d‘•œ£ËÍ#+3?FNVYkvƒ‡Œ”Ÿ¾ûþþ   Brx~¦¨Üàø )@MYehy€Œ™£©¹ 8;Z]¥¼ÁÈÏóö "(.156;?Ptww|ƒ…‡‰‹x_|­¸`§SšP[*AUèêòr¯‡ÀÁZ)HTdfg\q””(9DH_dgu|‚…ˆŒ•˜›ž¢>MƒÁDЧSA^ ª¶ÅÏ×Ýö $q¯*\¢óA ˜ÇùZ{¢Ôi¤Ä³Yº[,Mó\/01;<=stu°²³B345ˆŠ‹ÁÃÄœ`¬ÃÊÛè!&/Qs»ÀÅÊÔÖeR3åZ3e^×.å`p|÷]@ÿÿã]@ÿÿ¼]@ÿÿ š]@ÿÿ çV@ÿÿ |] @ÿÿ.oáu{´.oæv­\.oZzizž·.oz{´Îm¢u—z®z!¹7_ çV ×]ã]÷]¸V üW |]°] ¼]E W‰] š] Ò] Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\libtasn1\c:\libtasn1\lib\asn1.cc:\program files\microsoft visual studio 8\vc\include\stddef.hc:\program files\microsoft visual studio 8\vc\include\crtdefs.hc:\program files\microsoft visual studio 8\vc\include\sal.hexpr__inner_fallthrough__inner_data_entrypoint()category__inner_control_entrypoint()__inner_blocksOn()resource__inner_callback__inner_override__inner_typefix()ctype__inner_check'b Dÿÿb DÿÿrW Dÿÿd Dÿÿ `] Dÿÿ!!Þa @ÿÿö?¨` @ÿÿ hßWa @ÿÿ0X @ÿÿy“JX @ÿÿKvyX @ÿÿ #9Åa @ÿÿ$·a @ÿÿ(‘a @ÿÿ-  ÎmZz´u\~j~n²Îm¤~´u³~„w´Îmê~´uþ~•{G´*áu{´ÎmFwXwqw„wwHáuwwƒ¸?¦ª³¸¦ª³€¦ª³c€ŠGRÇW€‚$-@oyšçêì~—­ºÒýG]§ÇËÏÖS!|yX$ya 9:<DEGQRSW[^_abhŒ“[$)z€€‚  #$&'),-/02?@Zinoxy™š¡¤¿ÂÍØãçêìûjoprsttux}}~†ŽŽ—§§«­¹¹º¿ÃÇÇËËÏÏÒÖÖØøúûý$"R&')/02i¡¿ÂÍØãûâS¢WcKRn "+88<CGSqqu|€–———œœ¡¡¥§¨ª­­®±±³¶¶¸¸º¿¿ÂÂÂÇÌÒ×Ýâéúÿmuz}ƒ†‡ŠŽ‘‘‘’’š››§§¬°°²·¹¼¼¿¿ÃÃÇÇËËÏÏÒÖØØ YdÈÓÞöôM RB{™¯ÔS#,n™t}޹]~Š‹S£Â#ýSþ/W/ƒƒ #%&,./?BZnpx{™›¤rsttx}€Ž™«¯¹»$=a Piiijj ‹‹‹ŒŒ&3)-.RˆŠ  &/:EMRdfs~†ÈÊÓÕÞàöøpu}޹ûR†[ ÏM RoSÅÅ)ïS//TõÔ5ZkÕÖØa4?M[x†˜¥§ª®±³·¸ºÿØO –¡¥¨¿ÂÇÒÝ·xZg&)-.155|‚ƒƒƒƒ„………†ˆŠ $%%%&-.../@ABCCGKKMopppqqu|š›››œçèéìññój~€‘‘‘’𭮝°±µµº»»»¼øý  \0˜^ÏSÛÍ-¡S•ª!AU!Z[k‘“ÎÙäüÊSÊT 8q—§­­³¶¶º‘JXK<Gu€’›jXKeŠZ& dehiu€Š‹ÈÉÌÍÓÔרÞßâãö÷úûk¦§ÆÇÊËÎÏÖר*\2Š^23óARгY g”§ÇËÏÓalzƒ‡Š’›§°²¼¿ÃÇËÏÒØüZ|^/18ˆEJgõeRÅR/åZÅa°²T1U u’“œ§ÇËÏÞ=îYNUX\]`aj.^§ÇËWRwRƒ3÷RƒTþ1—T8PTTTUU[[[\]`aaceijooopp ]]]^_abbdehhŠŒ–––———¦¦¦§²²²³¹¹¹º÷Y 9DQer}ÉÔß÷×[*7\€Wa·a zƒ‡Š¼¿ÃÒÀSryàVS`XKjp@amb ø ÉQITt«R!ÒT"+C|œéÿš2]½vÒ]hoöúra hmWnpq›a "BZ :ERfs~ÊÕàø$[d[\.ä\|„† yz{||€„„†êëìììííj—˜™šš›¡¡$a'//3„a rsu}~€Œ‘ R"­R%.p›»­[%í[, ]ópÛû-aMXY\]`a WXZ^_ab­a   6ZâV[–\Ö6aORU_$&z| jöøŸa  ¨W0Kcn7<GQS]dehŠÆÇÈÉÌÑÒÓÔ×ÜÝÞßâö÷ú hl’›§·ÇËϨ`hha¨a "ÑR6QSÐÉ+‘S6Z±Wƒ……%.Kp„›íñ¡±µ» ‘X$1238qYhÌ×ú[Q]בa غR&€š["š]„ú^ì#TæsÑ4ƒUh¬W$+./112388ˆŠCC||éhoššÒöúìWoú,YNTU[ceio9<DGru}€ìaö "%'*,.02u[õaöžRÞR?xÞW5¾['ÞaöçQ†'S¤$'Y }ˆˆŒ efhikÉÊÌÍÎÔÕרÙßàâãä÷øúûü0Xz™Zƒƒ %.BZp{›rsx™¯»_out_ecount_opt()__deref_out_opt__deref_out_bcount_opt() __post __deref __nullterminated_'b Dÿÿb DÿÿW @ÿÿ~€hc @ÿÿclTc @ÿÿ LVÜb @ÿÿ &:Àb @ÿÿ  #§c@0 !!Âc@0 ""6c @ÿÿ@@"c @ÿÿ<<«b @ÿÿHœ¬°KoÅgEHÅgEèKo*‚âlD‚älœ‚§‚6÷Ri·T6÷TALc7\-—b—cvÀb $$&= cw©U8‰cruvw:@A2],"c<AëNyU(WTq~«b'()*+,-./012345678D:<>Z4¤bTcLdcNQTehkELc ])Õb"Aíb0þsvy®=&3>NeþK>ŽNyU'NU*Æ^/^bs6c@QhNcAŽcuÏMA/U2a.ÿb5ˆrxZ=>>>ARihccQ]+c7zcp³Y3£_1“bquv~¬W!>RiÜb&>__pre __deref __elem_readableTo() __post __deref __elem_readableTo()__deref_inout __pre __deref __byte_writableTo() __post __deref __byte_writableTo()__deref_inout __pre __deref __elem_writableTo() __post __deref __elem_writableTo()__deref_inout __pre __deref __nullterminated __post __deref __nullterminated__notnull __elem_readableTo(1) __pre __deref __valid __post __deref __valid __refparam__deref_out_ecount()__deref_out__deref_out_ecount() __post __deref __nullterminated__post __deref __valid __refparam __post __deref __nullterminated__deref_out_bcount_part(,)__deref_out_ecount_part(,)__deref_out_bcount() __post __deref __byte_readableTo()__deref_out_ecount() __post __deref __elem_readableTo()__deref_bcount() __post __deref __valid __refparam__deref_ecount() __post __deref __valid __refparam__deref_ecount(1) __post __deref __valid __refparam__ecount(1) __post __elem_readableTo(1) __post __deref __notnull __post __deref __byte_writableTo()„Œ DÿÿŸŒ Dÿÿ¹Œ Dÿÿ##‡b @ÿÿnn|b @ÿÿmmIT @ÿÿkk™_ @ÿÿjjë^ @ÿÿii'S @ÿÿee1S @ÿÿdd8T @ÿÿbbdS @ÿÿ ``CS @ÿÿ ^^éR @ÿÿ \\ÞR @ÿÿ [[ÅR @ÿÿ YYºR @ÿÿXXÔS @ÿÿWWâS @ÿÿVVÊS @ÿÿUUžR @ÿÿSSR @ÿÿRReR @ÿÿQQWR @ÿÿPPGR @ÿÿOOQS @ÿÿHH‘S @ÿÿGGÀS @ÿÿFFob @ÿÿEE#T @ÿÿDDS @ÿÿCC¸Q @ÿÿBBT @ÿÿAAT @ÿÿ@@/T @ÿÿ ??¡S @ÿÿ!>>ýS @ÿÿ"==÷R @ÿÿ#<<­R @ÿÿ$;;wR @ÿÿ%::oS @ÿÿ&99S @ÿÿ'88ïS @ÿÿ(77S @ÿÿ)66ÑR @ÿÿ*55°S @ÿÿ+44R @ÿÿ,33™Z @ÿÿ.00$] @ÿÿ/**,] @ÿÿ0)))] @ÿÿ1((^b @ÿÿ2%%=b @ÿÿ3µ€½€Å€Í€Õ€Ý€å€í€õ€ý€ %-5=EMU\cfilor zux{~„‡õ)‰‹zG@~¸lºl CÑ+¸lºl C—78GROOWRPPwR::÷R<<'SeeTAA‡bnnS66°S44ÀSFFàŒ#éR\\ITkk™Z00)]((™_jjâSVVë^iikb00D#R33dS``ÔSWW$]**eRQQ­R;;ÅRYYSCCýS===bö0000žRSSÞR[[T@@^b%%RRRoS99ïS77/T??obEEÏŒ¸QBB8TbbØŒÑR551SddQSHHS88‘SGG¡S>>ºRXXÊSUUCS^^#TDD,]))|bmm_valid __refparam__post __valid __refparam __post __exceptthat __maybenull__post __valid __refparam __post__out_bcount_full() __post __nullterminated__out_ecount_full() __post __nullterminated__out_bcount_part(,) __post __nullterminated__out_ecount_part(,) __post __nullterminated__bcount() __post __valid __refparam __post __nullterminated__ecount() __post __valid __refparam __post __nullterminated__post __valid __refparam __post __nullterminated __exceptthat __maybenull__post __valid __refparam __post __nullterminated__out_bcount_part(,)__out_ecount_part(,)__out_bcount() __post __byte_readableTo()__out_ecount() __post __elem_readableTo()__ecount(1) __post __valid __refparam__in_bcount()__in_ecount()__in__in_bcount() __pre __nullterminated__in_ecount() __pre __nullterminated__in __pre __nullterminated__in __pre __byte_readableTo()__in __preßf DÿÿÌ4 Dÿÿn Dÿÿè~ Dÿÿ Àf @ÿÿ7 σ#׃& „--D#'+.ÀfØfÀƒ"èƒ'ìƒ'„.Êfòƒ**„+*)(( += _INTSIZEOF()) - _INTSIZEOF()) )t(  = (va_list)_ADDRESSOF() + _INTSIZEOF() )v( (sizeof() + sizeof(int) - 1) & ~(sizeof(int) - 1) )n(__alignof())(sizeof())( &reinterpret_cast() )__w648struct threadlocaleinfostructintunsigned intunsigned long [6]LC_ID [6]wchar_t *int *threadlocaleinfostruct::__unnamed_0002_1 [6]lconv *unsigned short *const unsigned short *const unsigned char *__lc_time_data *struct tagLC_ID *struct tagLC_IDunsigned shortstruct localeinfo_struct *struct localeinfo_structpthreadlocinfopthreadmbcinfostruct threadmbcinfostruct *struct threadlocaleinfostruct *__time64_t__int64__w64 long__w64 intsize_t(void)x_CRT_INSECURE_DEPRECATE()  size_t __cpd @ÿÿvŒ @ÿÿiŒ @ÿÿed @ÿÿXd @ÿÿ!Z @ÿÿ÷Y @ÿÿIŒ @ÿÿ¶¶¶‰tŽt¶"¶7Ç4ÿBC÷Y OŒD XdpdQ4 !Z edIŒiŒö f4vŒëi[ŒT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , ...); _CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , va_list _Args);_CRT_INSECURE_DEPRECATE()   __cdecl ( * ,   , ...); _CRT_INSECURE_DEPRECATE()   __cdecl ( * ,   , va_list _Args);_SecureVFuncName_CRT_INSECURE_DEPRECATE()   __cdecl ( ,   ,  * );_HType1_HArg1_HType2_HArg2_CRT_INSECURE_DEPRECATE()   __cdecl ( ,  * ,   );_CRT_INSECURE_DEPRECATE()   __cdecl ( *,   ,   ,   ,  );_TType4_TArg4_CRT_INSECURE_DEPRECATE('b DÿÿW@ÿÿb @ÿÿHœ¬°7Wb“bURE_DEPRECATE()   __cdecl ( *,   );_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *);_CRT_INSECURE_DEPRECATE()   __cdecl ( *);_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( * ,   ,   , ...); _CRT_INSECURE_DEPRECATE()   __cdecl ( * ,   ,   , va_list _Args);_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *);_FunctionCall__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(, , _s, , , , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE_EX(, , _s, , , , , , , )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST_EX(, , , , _s, , _s, , , ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_'b Dÿÿ|^ @ÿÿ,7Š^ @ÿÿ *HÂ΂ã‚ó‚HÂ΂ã‚ó‚ ßc  #&',034ØO -|^,äc "%&',/234d&d3Í ,- R#I^"-/R0Š^òc#&,-03öc "%&, _s, , , , )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_EX(, , , , _s, , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE_EX(, , _s, , , , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE_EX(, , _s, , , , , , , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX(, , , , , _s, , , , ,  ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX(, , , , _s, , _s, , , ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0'b Dÿÿb DÿÿrW Dÿÿd Dÿÿ`] Dÿÿ X DÿÿÞd @ÿÿz—·d @ÿÿ [j¢d @ÿÿ JWÍU @ÿÿ"FùU @ÿÿÉãU @ÿÿ‘¸=V @ÿÿƒ"V @ÿÿÑûAU @ÿÿ ©ÃTV @ÿÿ"›¦V @ÿÿ$Š”ÞW @ÿÿ'wƒÌW @ÿÿ*dn€R @ÿÿ.TZØQ @ÿÿ1BGS @ÿÿ449÷Q @ÿÿ8#*2R @ÿÿ;·W @ÿÿ>çQ @ÿÿBð÷ÉQ @ÿÿFÒå"R @ÿÿKµÆìW @ÿÿO`¨©Q @ÿÿR6Q?d @ÿÿS++5d @ÿÿT'')d @ÿÿT$'Xe@0 U%%je@0 V&&’ @ÿÿW!"Ko¯ƒ`HKoǃՃàƒëƒöƒKoǃ„'„Îm†u@·Îm†u@·Îm†u@·Îm†u@·Îm†u@·Ô(þuvvHnEHnE.oáu{´Háu{´.oáuvS·Ô(áu{´.oáu{´.oáuNvv·.oáu{´.oáu{´.oáuwvv·.oáu´už·.oáu‡v¢vÁ·.o¢u´už·.oæv­\>„J„.o]„û·xçQñ-12ÇWM”–$''((8äå$-BBZbuužªªÞîÿ23'Y­»ÀG]½Â‡dÕßà°SÒV‹pdàPe€ˆŠ“ùUÉÙVoˆ™ZÜ&X[`e ÒÜßåìïö&+™_¡g%E¶¹¹º»¼½¿ÀÁÂÄÅÓÕÕרÙÜàáãäñóóôõö$&&'()578CEFUWWXYegijklmx|~£ÑØÚèíFSV_y‘–˜›®ÉÎÐÓÖàäñõ"&&).9"R¶à+m"VÑ¢WL¶º»¼ÀÁÄÄUXklÝÞ)+^gÕØâãððóô¢dK^bfë^¡R&'eïÔSYÝTVœ”ZIõ(€€€‚] dqrww|Š‹š =VW'7KKXÜÜ &XY[`ae ¡ÒÜÝßåæìíïö÷&+,-../}d¬¹º½ýd}ƒ…”&3F+==@BIJLMNggiinx€€‘””››££¹¼ÁÁÕÙÜááãó&77EEWgik||€Øèî–Î×&:PV`dh‡‹–RØãôR,..d '(+-.124ØOÞ)k¸Q&ØQCxZ›ckn{||}}€„”––›œœœŸ  ¡¡£§z~€€€€€‚ÓÚÛÜÜÝÞàäååèèéééììíîñòò !#,-.BBBFIIILLSVXYZuuuy|||“˜›žªªª®±±±´´ËÐÑÒÕØÜÝÞìíîÿ   $)*+,-./233555889:=>>ø\$ 8=?ACFHJLTVWprtvy{}”™›œ¥§©«®°²´Xd<?ÀØd\fS5¡SX`ÜåìöAUªáYeloqqrstwxƒ‡ˆŠŠ‹Œ‘d®·»¼ÀÀÁe}j3KOOQQSV\^^__abbcceffgiÊTðOQJXÞŠ^ ]^fgÔÕáâòóŠ_  $_``abó\ )*+klmüWagk|^w\Óàñœd- \\]]^^_cfffggkmÌÓÓÔÔÕÕÖààááââäññòòóóõEÐÈ!e\&F‘¢ÕbKU5d'+9??žedA»Øjlm’¤þª±ÀÁžR-/TUú‚·ENUÙçøÞWxìL´8îY ÔÞÞßMRSUV^`®²µ»ÀÀÁÞd{÷Q$!.wR +—T®ÀÀÀÀÀ·W·d\…ˆ€RUàVqŠÄ©Q7ÉQÓ(ITÜ aæí÷)]FJLVWy}›œ®²´)^ :<=AEIJKLMNP)d$&’Øãéôú2RÒT|š “’d \Òd\be~…Ž‘›ª°³³¹º½¾ÛY dopqrsˆ‰Š‹Œe~…Ž‘„d  Ìä\1 !"#,124Z[[^m“žŸ ¡¢¢ËÖ×Þßßâãäååæîïïððóôõöö÷$] 8=ATpt™¥©$e~…’­R[ßÍU" ]Ø a–Î'-eˆŽ‘6eˆŽ‘_%%6:<<`acµ¶ÒÓðññ#$$45CTUewxzÓ “Ë$?d +FG‘‘ ¡¢¢d¬º»?e‰’¨W ¶¿ÀÂÄÖÞßßàHe€…†“ÑRܱW%N}œœ¡ñôôõõ€ééñò!16IIi||¢±±  55=>qYßñd{‚ˆƒUÑ‘É"ãU‘ã]'¬WJailn||  ÓרÙÜÞààáãFij(ÓàñÌWe£"ìWa_Öäõ,YÔÕ,] ?CHrv{§«°Ld 9?@EFG’ž¡£¤Œd $%&()+66bdegiiÌd\^Pathwchar_t (&_Drive)[_DriveSize]wchar_t (&_Dir)[_DirSize]wchar_t (&_Name)[_NameSize]wchar_t (&_Ext)[_ExtSize] (const wchar_t *, wchar_t (&)[_DriveSize], wchar_t (&)[_DirSize], wchar_t (&)[_NameSize], wchar_t (&)[_ExtSize])size_t _DriveSizesize_t _DirSizesize_t _NameSizesize_t _ExtSizeconst wchar_t *_FullPathwchar_t *_Drivesize_t _DriveSizeInWordswchar_t *_Dirsize_t _DirSizeInWordswchar_t *_Filenamesize_t _FilenameSizeInWordswchar_t *_Extsize_t _ExtSizeInWords (const wchar_t *, wchar_t *, unsigned int, wchar_t *, unsigned int, wchar_t *, unsigneŠ^@ÿÿ|^@ÿÿ Y @ÿÿ àX @ÿÿHÂ΂ã‚ó‚HÂ΂ã‚ó‚MƒÑ+}ƒƒÑ+}ƒ Yßc'döàXèX|^Š^äcòcÍe_t _Sizesize_t _SizeInWords (const wchar_t *, const wchar_t *, wchar_t *, unsigned int)const wchar_t *_Nameconst wchar_t *_Value (const wchar_t *, const wchar_t *)const wchar_t *_EnvString (const wchar_t *)const wchar_t *_ErrMsgconst wchar_t *_Driveconst wchar_t *_Dirconst wchar_t *_Ext (wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *) (wchar_t (&)[_Size], const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *)wchar_t *_PathResult (wchar_t *, unsigned int, const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *)wchar_t *_FullPath (wchar_t *, const wchar_t *, unsigned int)const char *_Destchar (&_Drive)[_DriveSize]char (&_Dir)[_DirSize]char ('b Dÿÿb Dÿÿ`] Dÿÿ rW Dÿÿ!!d Dÿÿ""šf @ÿÿ È~f @ÿÿ ~‘f @ÿÿig¸` @ÿÿHZf @ÿÿç1êe @ÿÿ§ã¼] @ÿÿš£š] @ÿÿ"U—®e @ÿÿ&>Rú^ @ÿÿ)+e @ÿÿ.§ôçV @ÿÿ3VŽ÷] @ÿÿ6KRã] @ÿÿ90@’@ÿÿ:%%KoÞz‡„M²Îmºw´u·„ï³Hâ„ì„´u…Ä´ÎmÞzizôz´ÎmY…Zz7¸Îmáu{´.oZzizž·.oz{´Îmì„„…M²Îm|{´Îm¬…ñmƒmô´Îmù…—z®z`¸.oáu{´.oæv­\XošGR*ÇW<Oltu|}µÀÉÕÕ##OP‰²G]lÙâôÿ‡bmÄÍÎS¢ëVñùUØLNNOOQ§¬®±Ùçíïò'€†‡‰Âe>Bë^<4fMjoxyz{„…†‡’•—™›Ÿ¡£¥§©«­¯±³µ·¹ÄÈÌÏÐÑÔÚÜãåéíî÷ø  )*+,-./0123456789:;<=BKS èW@1::k¶·ÃÄÍÎ]h‹³´·¸»¼ÈÌô~ŒÁÐÑ(*+,-./0123456789:;<=E´µÝe X`fnt~€Š‹Œ’’&3&6689;<=NNO^~ª¼Ëâ$M[[m¬íù PosT\‚‡ª«¾¿ÇR®¶ÆU‹ÏZklmoR-oSi¨üïS¤/T°ZmÏe X]`–KNPRTUWØOºq½¸Q¸8T8¸VVaxZÏYcehhklmqqtuuwxx||}~‚‚ª·¸¹¼¾¿Á  #$©®±³´µÈÉÕÕÕÙÜÜÜßßéïòô÷üýþÿÿ ###'***--luvzz~††ŒÁÄÄÈÈÌÌÏÏÐÑÔÔ×ÙÙÜàââåééìíîòôô÷øýÿÿ (*+,-./0123456789:;<=EOPPSTWWWZZ[\`aa€‰‹ŒŒ¦²³´µ·½½¾ÁÄÄø\*¬³¾¿ÃÄÏYbewy{‚‡Žª¯±²ÐÒÔÖÙÛÝßëðòó "$')+-¸`HXd58f jw‹Ž‘”¿ÀÃÇË'ASi¦ñ¡S®´e§¡e §¶¶¶·¸¸¹¹ºÃÄáeX~€ŠŒÊS´¸È/ŠZYklnmØÙÜáâåóô÷øþÿ Š^ö÷Š_)"@GHIJKO©¹º»¼½¿ÃÃËÍé   êe§Uó\Yqstª½¾¿Sf‹üWVc}¼]›øN|^õ|bl·Ãœdêõõöö÷÷ø|e X\^`afhioqr‰‹E U¦­=¦æG}¨eR,ÅRÑ2ŽNT`afhioqr‰xyz{„…†‡’•—™›Ÿ¡£¥§©«­¯±³µ·¹ÄÈÌÏÐÑÔÚÜãåéíî÷ø  )*+,-./0123456789:;<=BKT²UÙì*â0¼NUãú®e>÷Q¾K€Á WR+wR·»Ì€ÆG÷R“ÊHT´—T-«µ¶¶¶·¸¸¹¹ºÃÄÔmxxx„„„ÜÜÜÜååååøøøø    7\‚×\IW~†×]›ŸHN÷]LG¹Ã·f¢ª¼ÀS˜ ÀU\àXä©Q·ÉQ¸füRéR4IT=µ©U±)]³eޱ²ÙÝßòó'+-‰]V\)^ 35689:;<=?’%åÒT¼Ò] ›ŸçõølqsuS[’_ ­ØÙßãì󨺼U^fLTY„ꤤ¥¹dS7ä\-"@FKO©µ¶·¸¹ÀÁÆÆÉÊËÌÌÍéøùüýþÿ  $] ¾Ãbw{¯ÐÔð"Df wŽ‘”ÀÃÇË'A R¯·­R–ÎU§°¼¼ÇרÚÛîHNT¡ª®²º ] D¬íP‡6Xj–\lÙâôÿ–f~‚„Œ_0355KLYª@UVXš›§©ççéKl€fj¨WYlmnmÙÛÜâäåôõ÷øÿ  §¹º¨`ºÑRjœÖ1S9QSiª‘Sžß±W!=mwx‚FMMˆ‰ÆËÜÜýýÿÿ**WW`a½Äcß‘e§ºRÐ1š]V¡ú^QÌšf¡CS6#T³¶ƒU V§>HIj~¡¦Yåæã]1]‹¼fçTcf¿¬W9hh¶¸¸ffõüjqzz††~†ŒŒ¤®¶··ºÁÌW#ìWBŸq†,] ¿ÄÏy‚‡ÒÖÛ $)Œ`¤®¯¶Œd©¼¿ÀÁõ_   )>BjqžR.ÞR3ÞW |ÉI‘’ß -Z~f~çQ¿"OŒÀ'S:çVV§e ª¾¿ÁÇÉÉËÍÎ×°SôšÓ°]@BDFGIMMQV[]_…”Ÿ¡™U°î )Dª™Z h³·»Ìô~ŒÁE´™_;ÙeX_ffghllnqt|}}…ˆ‰‰‹‘‘”"R¹nt¿âS5"VÚ¢W6;qq¶¹¹ºglnqt½¿÷ÄÄÈÈÌÌÏÏÔÔ×ÙÜàâåééìíîòô÷øýÿ ¥º¼RÂFÔS0TVí”Z 8NOQMþþÿ ýS¬ýT¨âäåæé=VÛ=fmx„Q_stChconst char *_SrcChsize_t _SrcSizeInBytes (const char *, unsigned int, localeinfo_struct) (const char *, unsigned int) (const char *, localeinfo_struct)const char *_Ch (long, char (&)[_Size], int) (long, char *, unsigned int, int)ldiv_tn Dÿÿ!!ßf Dÿÿ""Ì4 Dÿÿ##„Œ Dÿÿ$$Á˜ Dÿÿ&&¨Ž @ÿÿ“ÅŽ @ÿÿI“Ž @ÿÿFFúŽ Dÿÿ@F @0AA$@0BB;@0 CCR@0 DDi@0 EE^Ž @ÿÿ ==RŽ @ÿÿ <<EŽ @ÿÿ;;1Ž @ÿÿ::!Ž @ÿÿ99 Ž @ÿÿ88ú @ÿÿ77å @ÿÿ66Î @ÿÿ55· @ÿÿ44¦ @ÿÿ33‘ @ÿÿ22‚ @ÿÿ11t @ÿÿ00g @ÿÿ//Z @ÿÿ..P @ÿÿ--G @ÿÿ,,= @ÿÿ++2 @ÿÿ**' @ÿÿ )) @ÿÿ!((     *żμۼì¼ú¼*Ô(Ü}**filor zux{~„‡õ)‰‹zG@~¸lºl C C^Ç\ñö')NT\{‡™¥¯ºÇäïÿ"(28[ns{ƒÐ*G ,±ÀÁq†ßŒg/U|¦»å#3t„ù0‡ŽE5:?DKPW\cdeinu}„œ¢P-Vu}ƒ•«Ãæû$,4?CGKOSWpwˆ.™U—˜¢Wâê—©‚12‚ŽDÝáð9CLQX]optv~ƒ…’’’“£¤âŽžáâåæéê"LS‘§¨ ³ëŽ¡ cdejTc¶4f š¼¾ÀÆÇ¿¿t0Sy¡¸â  0>BFJNRVfim1½?¢ýT ™±³·ò÷ûÿF=R+O]^_`abcdefghijklmnopqrstˆ‰š›œžŸ²³´ÂÈÉÊËÌÍÎÏÐÑÒÓÔ)*+9:@DHLPT\]^_`acd|}Ù-}ŽCÚÚÝ 9Ceiopv~…—¥ŽIÊ&3‰°ÕÖרÙÚÛÜÝ+ar‡¡­®Àæöcd>¸ÂÄÆU¿¦3v3afÆr1§¨©ª®·Á78:;ABDEFNOPRZ[\^ghijrsuw‚„† ¡¢¥¦©ª·¸hU±èX™ˆYÛñúþx_ú¨`âæê¸`Ñhc:;DEPR\^iuw„†¢¦xŽBÑ×ÛÝâæêíñöþ  "8BO[hs‚¡¨Ž”a\ px\ží~‡‘q`e³‘2o…ý>!Ž9°ÕÖרÙÚÛÜÝr‡äJ1Ž:PvŠµß -;j~ôVqŽ AÌÏ)8BO[hs‚¡ñŽ¢¤¥ª±ú^Ô¼šf Z#.QRwx‹Œ ¶·àá  ./<=AEIMQUeghkl€ï/ú7ðñòóôõö÷øùúì|ƒU—˜³Y$PQvwŠ‹°µ¶ÕÖרÙÚÛÜÝßà  -.;<gjkr~‡“ŽFI›ŒYœÛðñõöúþX_üZòøúÌ` E–u[ñå6 èEŽ;ÞàŽŽNÇUþNORSTUVWY\]^_`abcdefghijklmnopqrstuxyz{|}~€‚ƒ„‡ˆ‰ŒŽ‘’“”•–™š›œžŸ ¡£¤¥¦§¨©ª«¬¯±²³´·¸¹º»¼½¾¿ÀÁÂÃÄÇÈÉÊËÌÍÎÏÐÑÒÓÔÞáâãäåæçìïñòóôõö÷øùúûüÿ    !"#$%()*+,/01234589:=>?@ABCDEFGHIJKLMNOPQRSTUVWX[\]^_`abcdefhilmnopqstuvwx{|}€‚ƒ„…†ˆ‰µcde^` oxÞaíÞd­®®e×~f"(ŽÌÎ5‘’“”§¨©ª¼½¾¿um^Ž =WX~€‚Ö,—TŸ–––——˜ž¤¤¤¥¨¨¨©WaÛÝ·4b!I·Ž˜ÑÔ×ÛÝâæíñöúþ "ÀU¾àV o¼¿ÉŽœ67@AMNYZfgqr€Ÿ ¸ÁÒTÚeop~’_'–±³µ¶ÑÔ×ÛÝâæêíñöúþ "5;?EKRW^nw}†œ¦2*KYz„Ž–¤¬¹Äãçü!%15Xx‚‰Ó+RŽ<¢4²Ž”Û_þ$[ôöDfVu}ƒ•«Ãæû$,4?CGKOSWpwˆÆÄŽd›ÊÌÏÑ×ÚÚÛÝÝÝáâæêíðñöþ   ")58899:?BBCCDKLOOPQWX[[\]cdeehhiinooppsstuvv}~~‚‚ƒ„……’’’“—œ¡¡¢£¤¥³U —±³ÆÑê  ¼ ]KXêëð Ž8êëì b­Ž”6š6`ÖŽœÍ·reemallocYYSIZE_MAXIMUMYYFREEYYMALLOC()((void) ())emsgid((YYSIZE_T) -1)_asn1_yynerrs_asn1_yydebug_asn1_yychar_asn1_yylval_asn1_yyerror_asn1_yylex_asn1_yyparse"yacc.c""2.1b"c:\libtasn1\lib\coding.cc:\libtasn1\lib\parser_aux.hASN1_TYPE node (ASN1_TYPE)node_asn *pointerconst char *name (node_asn *, const char *)node_asn *node (node_asn *)long vchar *str (long, char *)unsigned int value (node_asn *, unsigned int)node_asn *down (node_asn *, node_asn *)node_asn *rightconst unsigned char *valueunsigned int len (node_asn *, const unsigned char *, unsigned int)unsigned int typec:\libtasn1\lib\element.hchar *nameint name_size (node_asn *, char *, int)const char *valueunsigned char *value_outint value_out_sizeint *len (const char *, unsigned char *, int, int *)ASN1_TYPE elementvoid *iderchar *ErrorDescription (ASN1_TYPE, cn Dÿÿ+„ Dÿÿ""ñ„ Dÿÿ## Y@ÿÿÙÙ–\@ÿÿ Öט^@ÿÿÒÔ6Z@ÿÿÏÐ.^@ÿÿ ËÍqY@ÿÿ&ÈÉ…\@ÿÿ+ÅÆTc@ÿÿ.ÁÁhc@ÿÿ1¿¿Þd@ÿÿ4½½šf@ÿÿ8º»Þa@ÿÿ>·¸Ì`@ÿÿD´µq`@ÿÿH±²6`@ÿÿP¬¯Û_@ÿÿW§ªx_@ÿÿ]¤¥Ç\@ÿÿd ¢~f@ÿÿižž¨`@ÿÿo›œWa@ÿÿu˜™®e@ÿÿy––ú^@ÿÿ|””¸`@ÿÿ‘’f@ÿÿ‡e@ÿÿŒŒpV@ÿÿ’‰ŠhU@ÿÿ—†‡‘e @ÿÿ˜~~M‹ @ÿÿ˜x|_‹@0 ™yyw‹@0 šzz‹@0 ›{{ƒU @ÿÿœtt_ @ÿÿrr=‹ @ÿÿ jr¨‹@0&ž kk¾‹@0&Ÿ llÔ‹@0&  mmë‹@0&¡ nnŒ@0&¢ ooŒ@0&£ pp3Œ@0&¤ qqE @ÿÿ¥ ,,™U @ÿÿ¦ vví[ @ÿÿ§ ccV[ @ÿÿ¨ bb†[ @ÿÿ© aaš[ @ÿÿª ``¾[ @ÿÿ« __­[ @ÿÿ¬ ^^\ @ÿÿ­ ]]×[ @ÿÿ® \\*\ @ÿÿ¯ [[\ @ÿÿ° ZZu[ @ÿÿ± YYd[ @ÿÿ² XX@[ @ÿÿ³ SS[ @ÿÿ´ RR$[ @ÿÿµ QQåZ @ÿÿ¶ PPüZ @ÿÿ· OODf @ÿÿ¸ JJcf @ÿÿ¹ IIôŠ @ÿÿº HHSf @ÿÿ» GG©U @ÿÿ¼ BBc @ÿÿ½ AA·T @ÿÿ¾ @@ÿb @ÿÿ¿ ??Z @ÿÿÀ >>³Y @ÿÿÁ ==/U @ÿÿ <<£_ @ÿÿà ;;íb @ÿÿÄ ::Æ^ @ÿÿÅ 99a @ÿÿÆ 887\ @ÿÿÇ 772] @ÿÿÈ 66Q] @ÿÿÉ 55NU @ÿÿÊ 44 ] @ÿÿË 33U @ÿÿÌ 22U @ÿÿÍ 11èX @ÿÿÎ ''„ @ÿÿÏ %%e @ÿÿÐ „ @ÿÿÑ !"#'()*+,-HÏy‚y•yáykX•|3x„w~Îm•|3xú|!y8}E}R}HªxÃx xÏxÜxÎm•|3xú|!y8}Ï}R}Hªx_y xÏxÜx*•|3xÜ}ì}HÅgEKoÅgEKo¯ƒ`HKoÞz‡„M²ÎmZz´u\~j~n²ÎmÞzôz{{Ÿ²ÎmÞzôzá²Îmºw„{•{{¶{Á{³Îm||„{•{ƒmI³Îmôz„{•{ƒm‡³Îmºw´uÌw„w×w·³Îmºw´u·„ï³Îm¤~´u³~„w´Îmê~´uþ~•{G´Îmì„„…M²Îm|{´ÎmÞzizôz´Hâ„ì„´u…Ä´Îm¬…ñmƒmô´Îm7mQmlmƒmšmÎmÛmñmƒm,µWµÔ(*Ü}.opµÔ(*Ü}*‡µ‡µ‡µ*™µžµ£µ¨µ­µ²µ·µ¼µÁµÆµ‚«ËµÐµ}«Õµs«x«Úµ@~¸lºl Cr zux{~„‡õ)‰‹zG@~¸lºl C Cߵߵãµ7’ÇWoÇ\ G]nV‰yU†9‹c‚V‰Âe–kÜ”ZqTcÁ4fôŠHýT‡Š¥ªWlz‹\=‹jopq&3v†[aÆ^9/U<ÏX¢ï`µa8\Z˜^Òx_¤¸`‘8fa\¯\ÆA^ÌÓe eŒ¡eŒ!‹]*\[³Y=SfGüZOE,†‰Œ‘”–˜›ž ¤§¬±´·¿ÁËÒåZP…\Åå`µ%‹^U1NU4.^Ë®e–·T@÷T¿Á×[\7\7×\’ž ¤¬²´×]‘Wa˜·f»€YÈÍ@[S „©UBI^ÍÔ ‹O)‹_2]6Ò]›·ra™œU2YÙÛ_§ûP„%Z>$[Qd[X\]DfJ€QU†‘±´º­[^í[c ]3íb: ‹R-‹`M‹x~66ZÏV[b–\Ö6`¬–fž_rt·ŸVŠYÙß\¡¤©­ÿ_¨ÿb?fhU†¨W ™œ¡¤©­Æ×ÙèX'ˆYÅÉËÐÒÖ¨`›ha˜hc¿±WpqYÈ[RQ]5Q`®q`±cAñd½‘e~Œ‹X1‹aš[`ú^”šfºƒUt†‘’”–˜›ž ¤§¬±²´´ºCZÏÔ£_;cfIãZ¬Wky˜›ž ·ŒYÅÉËÐÒÖÌ`´ìa·u[Yõ_”–§õa¸‹Y5‹bþÈÌÏÓ¾[_^`¯Þa·Þd½~fžpV‰ðS™Uv‹[¢Wm{ YÙaaš[``ú^””šfººƒU(t†‘’”–˜›ž ¤§¬±²´´ºt†‘’”–˜›ž ¤§¬±²´´ºCZÏÔÏÔ£_;;cfIIãZZ¬Wky˜›ž ·ky˜›ž ·ŒY ÅÉËÐÒÖÅÉËÐÒÖÌ`´´ìa··ìƒ"¬‰#u[YYõ_”–§”–§õa¸¸‹YY5‹bbþÈ ™ Dÿÿn DÿÿÌ4 Dÿÿßf Dÿÿr– Dÿÿ**±– DÿÿDD¢ @ÿÿ\a†˜ Dÿÿ YYQ˜ @ YY¼’ @ÿÿ@R“ @ÿÿ`>Z— @ÿÿ é'4— @ÿÿ$˜åÍ– @ÿÿ%jj¶‘ @ÿÿ&ffA‘ @ÿÿ'``[‘ @ÿÿ([[T‘ @ÿÿ)LL¸— @ÿÿ*€€— @ÿÿ-ŒŒ – @ÿÿ.33‹– @ÿÿ0++*żWÈiȺŠC*żÈiȋȢȯȽÈÇ*żÈiȋȢȯȽÈÑÈ•ÆKożÈiȽÈÑÈáÈHÈÑÈÉ/É***Ô(<É7vÉzÉ7~ÉÌtkÇ4 !l‘ÛJ¹à'GO ©­´µ»½ÇÈÉÌÑ'Yêð""ùû'“û‡—0’¡£ïñP—²—bÏáófBJ˜cdiˆ‰ŽÓÔØBCG‡ˆŒ°±¶×ØÝ $ÙVä®êÙ’õ ùy“©¯³´µ  Ù–n Dÿÿßf DÿÿÌ4 Dÿÿ„Œ Dÿÿ ¨Ž @ÿÿѼ @ÿÿxŒ³ @ÿÿ huŽ @ÿÿ .fœ @ÿÿ**Œ @ÿÿ))“Ž @ÿÿ''ð Dÿÿ"'@0 ##@0 $$5@0 %%S@0 &&¬ @ÿÿ,,  *żμۼHÀÀ7n*ÀÀ"¡ì¼XoÔ('À*Ô(*Ô(8À/·T8‡Ž%»À‡ $inory…¶¿Ç{‚‹ÀU€™U“ÉŽ–½¾ËÍÒT¼’_’¡£¥¸»Â²ŽƒU““Ž'.•³i‚¬Tm‚Tc¥|eimÄŽ •±³¶¶»¼¿¿ÀÁÆŒ)˜™šŸ¡¤œ*€¸¬ ,18>COQUW[]_¼y¶E’½?˜TkmmntýT &”¡¦¸¼¼ÁÃU“¡®¸¹Ž.±­Ž6i{>§ÐŽN…‡¦TmU26<AFGHIJKLMRSa£NU>CW[]ÆUŠ‹ÖŽ–´ÊÎ{€…‡ŠÖ|‚‡o#y„³¶¿/U1OQU_r œžŸ¤¦¾¿ÀÂÊËß}ƒ„hU¡¸èX”hcÀ¨Žú^®¹ long, int)void *_DstBufsize_t _ElementSize (void *, unsigned int, unsigned int, unsigned int, _iobuf *) (void *, unsigned int, unsigned int, _iobuf *)wint_twint_t _Ch (unsigned short, _iobuf *) (wchar_t, _iobuf *)const wchar_t *_ModeFILE **_FileFILE *_OldFile (_iobuf **, const wchar_t *, const wchar_t *, _iobuf *) (const wchar_t *, const wchar_t *, _iobuf *) (_iobuf **, const wchar_t *, const wchar_t *) (int, const wchar_t *) (const wchar_t *, localeinfo_struct, ...) (const wchar_t *, ...) (const wchar_t *, unsigned int, const wchar_t *, localeinfo_struct, ...) (const wchar_t *, unsigned int, const wchar_t *, ...) (const wchar_t *, const wchar_t *, localeinfo_struct, ...) (const wchar_t *, const wchar_t *, ...) (_iobuf *, const wchar_t *, localeinfo_struct, ...) (n Dÿÿßf Dÿÿ„Œ DÿÿÌ4 Dÿÿ à˜ Dÿÿ!! ™ Dÿÿ((¨Ž @ÿÿJͽ @ÿÿ-:© @ÿÿ++*żμۼXoXo3Ç4 }~„…—˜¥¦ÇÈÉ·T¿×O÷TUpV³V\}}„„Œ——¥¥´ÈÈ™U`©+‚ ‘Xku‚V]ª«¯³»Ç²ŽKkm”ª«¢mëN”œ¢UºëQRS[‘”¡ª«D$¬WuüW`¯°”'$‘_‰®4‘b¯³¶ÃËT‘vvŒ‘ýTa¯´À­ŽKkm¡$½-{•£&3\]^f4Œª>†™§ËÌŽN”œ¢R‘«Ub·ËNU¾Æ2NjtÞOku‘[kmprœ/U½ŸV^~~……‘˜˜¦¦´ÉÉr fuvw{‚•£¸»ÀÃ#ØOŒªhU¯èXahcèŽKH‘ke+A‘dú^°ƒU`QH‘qe1A‘” @ÿÿ C”r *, unsigned int, unsigned int, const char *, localeinfo_struct, ...) (char *, unsigned int, const char *, localeinfo_struct, ...) (const char *, localeinfo_struct, char) (const char *, localeinfo_struct, ...) (char *, const char *, localeinfo_struct, char) (char *, const char *, localeinfo_struct, ...) (_iobuf *, const char *, localeinfo_struct, char) (_iobuf *, const char *, localeinfo_struct, ...) (const char *, char) (char *, unsigned int, const char *, char) (_iobuf *, const char *, char) (char *, unsigned int, const char *, ...) (_iobuf *, const char *, ...) (char *, const char *, char) (char *, const char *, ...) (char (&)[_Size], const char *, char) (char (&)[_Size], unsigned int, const char *, char) (char *, unsigned int, unsigned int, const char *, char)char *_Bufferchar (&_Buf)[_Size]rsize_t _Size (_iobuf **) (const char *, unsigned int, const char *, localeinfo_struct, ...) (const char *, unsigned int, const char *, ...) (const chammm™—bŸ íîBJÙ—ê  (y{˜cdiˆ‰ŽÓÔØBCG‡ˆŒ°±¶×ØÝ $¢]sB“ ›ãñ‹Œ“—ª­®»¼“aJ—}„……†²¶~ëN?$IWacdij†ˆ‰Ž”¾ÉÑÓÔØÙ @BCGHM…‡ˆŒ’®°±¶·¼ÕרÝÞã $%*ë’j™ëc‹–+$EIRW‚•»¾ÆÉý =M‚’ª¼Ñä+«— eg:}°ò6}¥ÌT‘LlÇ7z/[`¢É 8NN’4—™•¬] >ER_´»ÆÏöý½?nõ}dÇ‚™›œ©©¯¯³´µãããääëñññóõû    #celnnpqst||}}~€€ƒƒ‰‰ŠŠ‹‹ŒŒŽ““””•––——œžž¦¦¨ªª««¬­­®®¯±·»»¼¼ÅÇÇÎÎÏâãäîôôö%(()*17ATYqqsyzz„–™™šžž­®·¼¿ÇÇÊÊßàáéíîù-//24Q[[``ggiƒ“––—¢ÂÂÈÉÉÓåèèììöþ   /889=— œ»»½½ÀÇÈÉÑØÙÚ&3"®ólƒÏáèÿ.gŒŸ®Öð&EqŠš´Ûíö"9__f4­>¥“-óƒƒÎîôôö((qq™™žž®¼¿ÇÊßéí-/`ggi––ÂÂèèììöþ  9¦•+f–#&—„…‰Œf˜mƒƒ…r „†ŠŽ’™Ÿ¡¢ØO ÷(q™ži–ÂèìxZçóóóô÷ú%fffgiltØfø’nt¸—|€œÃA‘`eHH¡—cã­CK!˜ eŠÔCˆ²Ù A˜ jÙH·Þ%a˜dÊ3(Êfj–$š–/ê–u *—…†‰ŒZ—êr““‚©¯ #}Ó—éü 'n{s˜qƒ…ü3ÁÄÄÄÆÇÇÈÉÉÒÕÕÕרØÙÚÚ¬W óô÷GKUZfgi¬¾œg²¼’A_Ì—!èúÿ.6GKUZswš¡££¦&lqt𡬾Æïññôì— ER‚»Æý<‚ªÑõhôge“{€¥{˜ciˆŽÓØBG‡Œ°¶×Ý$ŽN $IW”¾É M’¼ã*îYsš£¦ñô.—„†×bçè%&B7“ûŽÅw—ëõcsCK÷— a†Ñ@…®Õ@O›»½ÀÆÇÇÈÉÉרÚÝ –23 ‘ìóóû0 *ffmuœîÒ3++ÒT¦’_EJQ²ŽN™ÆÇÇÈרØÙê ar||€€•¦¬ÇÎÏâãä%%AGKTTYYz„„––­·¼¿ÇÇÊÊþ >N[ƒƒ““¬¾ÉÓÓåå,8AJ]_js¡[‘N[ãäñnpq||}~€€‰Š‹Œ”–—œž¦¦¨«®±·¼ÇÎÏâãä%)1ATYyz„–­·ÇÊàî24[ƒ“—ÈÉÓå8GGMMqq ¡—‰ŒÉÚD $(/D—žÆÈ×ÙÄ—æîîîîôö27$```agi¢Téêðþ >NQSUV,/13<lstw†™­Žê airœ¦¯±·y4ÈAJ]_js  –.<DQ^²ºÅÎôü 9§ÎÍ–jGHKMNOm—êùüþ&afrrä›®êRé0AJ]_¶‘ f*sšáQ/OOö–v 6˜ gŒÖEŠ´Û"“Ž_“'.q¥{<DQ^²ºÅÎôü 9§ÎVVß—ëû0)muœ¨W ÀÄÌÑÕݨŽj(’6w¡ÆH—­®²¶è—+!=ERgl€‚Œ‘³»ÆÖÛõý:<EJ€‚Ѝª´¹ÏÑÛà"'“ÅQ“œãäñ‰Š“”–žª«­¯»Q˜WY`¬ÇÎÏâãä%%AGKTTYYz„„––­·¼¿ÇÇÊÊþ >N[ƒƒ““¬¾ÉÓÓåå,8AJ]_js¡[‘N[ãäñnpq||}~€€‰Š‹Œ”–—œž¦¦¨«®±·¼ÇÎÏâãä%)1ATYyz„–­·ÇÊàî24[ƒ“—ÈÉÓå8GGMMqq ¡—‰ŒÉÚD $(/D—žÆÈ×ÙÄ—æîîîîôö27$```agi¢Téêðþ >NQSUV,/13<lstw†™­Žê airœ¦¯±·y4ÈAJ]_js  –.<DQ^²ºÅÎôü 9§ÎÍ–jGHKMNOm—êùüþ&afrrä›®êRé0AJ]_¶‘ f*sšáQ/OOö–v 6˜ gŒÖEŠ´Û"“Ž_“'.q¥{<DQ^²ºÅÎôü 9§ÎVVß—ëû0)muœ¨W ÀÄÌÑÕݨŽj(’@– @ÿÿKK – @ÿÿ@@ – @ÿÿ??þ• @ÿÿ >>ó• @ÿÿ<<é• @ÿÿ::Ò• @ÿÿ88¿• @ÿÿ77Ø3 @ÿÿ 66¦• @ÿÿ"55i• @ÿÿ#ÉtdÇkÇÇŒÇkÇǔǜÇDzÇÇêÇñÇpøÇ²ÇÇêÇñÇpÈêÇñÇpkÇÇ9ÈøÇkÇÇ9ÈœÇ9È C!w•"Ø36–?? –@8–@@@–Ki•É•7<é•: –?Ê3,Ò•8â•89:;<=k)Û•89:;<=ó•<D#,´ 56799;;==>?@ÄO+´•67:<>>?@}•)M–KK® 56799;;==>?@ö-#æ3))†•*Ž•+¦•5®•556677þ•>¿3ÏK89:;<=¿•7struct *, const char *, const void *, int, char *) (node_asn_struct *, const void *, int, char *) (node_asn_struct, const char *, void *, int *, char *) (node_asn_stë“@ÿÿ|€Ü“@ÿÿwz“@ÿÿquë’ @ÿÿ kÿ“@0 %%”@0 &&)”@0 ''>”@0 ((S”@0 --o”@0 55ˆ”@  TW§”  !VVÅ”  "VVÛ”  #VV÷”@0$WW•@0%[[0•@0&ddM•@0'ee¼’@ÿÿ0©“ @ÿÿ1oo®’ @ÿÿ2     *ÅÆ?ÅWÅpÅÆ*Æ*ÅÆ?ÅWÅpÅÆ*Æ*ÅÆ?ÅWÅpÅoÆÆÆ•Æ***Ô(*Ô(ºl C CäÆ****ÅÆ?ÅWÅpÅoÆÆÇBÇ C ×sy~G’qw|O’qw|W’rx}“V'“V7“W_“gø’-A‘&Ù’[t“VQ“ey“h©“oB“d“q[‘%c’sy~ë’ uz€““ië“|T‘(¼’Ü“wÍ’te“gÕ“uz€¶‘'n’sy®’“5%%”@0 &&)”@0 ''>”@0 ((S”@0 --o”@0 55ˆ”@  TW§”  !VVÅ”  "VVÛ”  #VV÷”@0$WW•@0%[[0•@0&ddM•@0'ee¼’@ÿÿ0×@ÿÿ0©“ @ÿÿ1oo®’ @ÿÿ2     *ÅÆ?ÅWÅpÅÆ*Æ*ÅÆ?ÅWÅpÅÆ*Æ*ÅÆ?ÅWÅpÅoÆÆÆ•Æ***Ô(*Ô(ºl C CäÆ****ÅÆ?ÅWÅpÅoÆÆÇBÇ C ×sy~G’qw|O’qw|W’rx}“V'“V7“W_“gø’-A‘&Ù’[t“VQ“ey“h©“oB“d“q[‘%c’sy~ë’ u ™ Dÿÿ±– Dÿÿn Dÿÿë“ @ÿÿIP¥‘ @ÿÿ@GÜ“ @ÿÿ29H‘ @ÿÿ*0&3 @ÿÿ''*żȤɸÉÓÉÑÈ*Æ*żWȤɸÉÓÉÅ*żȤɸÉÓÉÑÈ*Æ*żWȤɸÉÓÉÅ C#×,4CKa—˜+.37BEJNØf¨ŽXH‘+l‰4# ‘`mta˜S²NUÊf²Ž +.37AEJNXl¦¢ê‘+A“7N[‘__¢¥¦ë’5Lë“Js˜_„†D#U¬WtT‘uv“—¼’.EÜ“3TZlnq‡ž}d58LO­Ž +.37AEJNXl¢¥¥‘A&3&'>ªÞ ,.47CEKNamtþ‘"f˜[„„†r tvw…‡‹“—ž¤¦§_“Ÿ˜,/47CFKNA49*]zhQ¤Á“Åuh¥¡™µï ?R°9oW®~¾D‚dnËµÌ Nv†G2-™ DÿÿÆ @ÿÿ CÆë“ @ÿÿIP¥‘ @ÿÿ @GÜ“ @ÿÿ29H‘ @ÿÿ*0&3 @ÿÿ''*żȤɸÉÓÉÑÈ*Æ*żâÉ7n*żȤɸÉÓÉÑÈ*Æ*żâÉ7n C#×,4CKa—˜+.37BEJNØf¨ŽXH‘+l‰4# ‘`mta˜S²NUÊf²Ž +.37AEJNXl¦¢ê‘+A“7N[‘__¢¥¦ë’5Lë“Js˜_„†D#U¬WtT‘uv“—¼’.EÜ“3TZlnq‡ž}d58LO­Ž +.37AEJNXl¢¥¥‘A&3&'>ªÞ ,.47CEKNamtþ‘"f˜[„„†r tvw…‡‹“—ž¤¦§_“Ÿ˜,/47CFKNÈ*1Œ‘ž^J›`k¦»¦E!#¤„[>„m`ÚJ•¡€>)\„–Û(œfq'_*o[ª¥´Ò%a+w$ Dÿÿ›l@ÿÿdd”l@ÿÿccl@ÿÿ bb†l@ÿÿaal@ÿÿ``wl@ÿÿ__nl@ÿÿ^^fl@ÿÿ]]Xl@ÿÿ"SSÚj @@ÿÿ&FGËj @@ÿÿ*DEÃj @@ÿÿ.BCXj @@ÿÿ2@A1l@ÿÿ8::&l@ÿÿ=99l@ÿÿC88l@ÿÿH77l@ÿÿM66úk@ÿÿQ55ïk@ÿÿV44çk@ÿÿZ33Ük@ÿÿ`22Ôk@ÿÿe11Êk@ÿÿi00¤l @m//¸k @ÿÿ1o//¸k@ÿÿt..°k@ÿÿw--·l @z,,¦k @ÿÿ1|,,¦k@ÿÿ€++œk@ÿÿ„**Èl @"ˆ))k @ÿÿ1Š))k@ÿÿ((ˆk@ÿÿ’''Ûl @&•&&~k @ÿÿ1—&&~k@ÿÿ›%%lk@ÿÿ ##vk@ÿÿ¤""dk@ÿÿ§!!Pk@ÿÿ­  [k@ÿÿ²Dk@ÿÿ¸:k@ÿÿ½/k@ÿÿÂ&k@ÿÿÆìl @2Êk @ÿÿ1Ìk@ÿÿÑk@ÿÿÔm @6Øñj @ÿÿ1Úñj@ÿÿßýj@ÿÿâáj@ÿÿçêj@ÿÿëÚj@ÿÿïÓj@ÿÿóËj@ÿÿ÷Ãj@ÿÿû»j@ÿÿ  m @A  ±j @ÿÿ1  ±j@ÿÿ   ©j@ÿÿ¡j@ÿÿ$m @F—j @ÿÿ1—j@ÿÿ$j @@ÿÿ(þ…j@ÿÿ,üü~j@ÿÿ/ûûvj@ÿÿ3úúoj@ÿÿ7ùù5m @N;øøfj @ÿÿ1= øøfj@ÿÿB öö_j@ÿÿF ôôXj@ÿÿJ óóQj@ÿÿN òòEm @TR ññHj @ÿÿ1T ññHj@ÿÿY ïï@j@ÿÿ\ èè(j@ÿÿ_ ÚÚ!j@ÿÿc ÙÙj@ÿÿf ØØj@ÿÿk ×× j@ÿÿp ÖÖj@ÿÿs ÕÕúi@ÿÿw ÔÔòi@ÿÿ{ ÓÓëi@ÿÿ~ ÌÌsg @@ÿÿƒ ¿ÀPi @@ÿÿ‡ º»9i @@ÿÿ‹ ¸¹1i @@ÿÿ ¶·ÙV @@ÿÿ“ ´µ¦i@ÿÿ™ ®®ži@ÿÿž ­­”i@ÿÿ¢ ¬¬Um @i¦ ««ˆi @ÿÿ1¨ ««ˆi@ÿÿ­ ªª€i@ÿÿ° ©©hm @m³ ¨¨vi @ÿÿ1µ ¨¨vi@ÿÿ¹ §§_i@ÿÿ¾ ¥¥hi@ÿÿ ££Pi@ÿÿÆ ¢¢Ii@ÿÿÊ ¡¡Ai@ÿÿÍ   9i@ÿÿÑ ŸŸ1i@ÿÿÕ žži@ÿÿÛ (i@ÿÿà œœd@ÿÿå ››ym @zê šši @ÿÿ1ì šši@ÿÿò ˜˜i@ÿÿø ––ýh@ÿÿý ••õh@ÿÿ ““d@ÿÿ ŽŽŠm @  ŠŠëh @ÿÿ1ŠŠëh@ÿÿˆˆáh@ÿÿ††›m @………Õh @ÿÿ1……Õh@ÿÿ#„„Íh@ÿÿ&ƒƒ®m @‰)‚‚Ãh @ÿÿ1+‚‚Ãh@ÿÿ/¿m @Œ3€€°h @ÿÿ15€€°h@ÿÿ:~~Ê;@ÿÿ=||Ñm @A{{Œh @ÿÿ1C{{Œh@ÿÿHzz˜h@ÿÿKyy{h@ÿÿOxxnh@ÿÿUwwch@ÿÿZvvWh@ÿÿ`uuMh@ÿÿettAh@ÿÿjss7h@ÿÿnrr,h@ÿÿsqq$h@ÿÿwpph@ÿÿ|ooh@ÿÿ€nnh@ÿÿ„mmÙV@ÿÿˆllÿg@ÿÿ‹ffZ@ÿÿ^^õg@ÿÿ–XXëg @@ÿÿšRUãg@ÿÿžPPØO@ÿÿ¡OOÒT@ÿÿ¥NN R@ÿÿ©MMäm @©­LLÎg @ÿÿ1¯LLÎg@ÿÿ´JJR@ÿÿ¸HHôm @­¼GGÅg @ÿÿ1¾GGÅg@ÿÿÃEE³g@ÿÿÈCC½g@ÿÿÌBB«g@ÿÿÑ==£g@ÿÿ×<<œg@ÿÿÜ88“g@ÿÿâ66àV@ÿÿç44/`@ÿÿì33ˆg@ÿÿò22g@ÿÿ÷11sg@ÿÿü00jg@ÿÿ///j @ÿÿhh_l @ÿÿZZ>l @ÿÿ>>Íi @ÿÿ¾¾±i @ÿÿ³³Vg @ÿÿ..Gg @ÿÿ ***g @ÿÿ :g @ÿÿ g @ÿÿ !%15@EMShly€„ˆ‹¨¬*¢†·†®MD*̆چD*̆چD*̆ç†ô†D*̆چD*Ì†ç† ] ‡*¢†·† ].‡*¢†·†®MD* WìMD*̆`‡w‡D*̆•‡ô†D*̆¡‡w‡D*̆•‡ô†*¢†·† ]ÄT¹‡*¢†·† ].‡*¢†·† ]ÄT¹‡*¢†·† ].‡*¢†·†ÄTþ‡*¢†·†®M*¢†·†ÄTþ‡*¢†·†®MÁ+5ˆï] ]ÄTCˆÁ+5ˆï] ]†OD*‚ˆÄT“ˆ?E³ˆÄT͈7%M?Ĕ%MÄTöˆD*‚ˆÚ†?E³ˆ$‰7%M?Ĕ%M:‰D*‚ˆÄT“ˆ?E³ˆÄT͈7%M?Ĕ2MÄTöˆD*‚ˆÚ†?E³ˆ$‰7%M?Ĕ2M:‰?Ĕ2Mç†U‰D*̆ç†ô†D*̆چ?E5ˆfYç† ]y‰D*Ì†ç† ] ‡*¢†·† ]ÄT¹‡*¢†·† ].‡*¢†·†ÄTþ‡*¢†·†®M?E«‰Å‰â‰7%M?E Š2MÿMŠD* WìM?E«‰FŠQŠ7%M?ElŠ2MzІŠD*zŠgED*̆¦Š¼ŠÏŠD*̆¦Šw‡ùŠ W`‡®MÁ+ W¡‡®MùŠ W•‡ ‹ùŠ W¡‡®MD*Zö\„[†O?EYö\„[%‹7%M?E5ˆ»eï]Z‹l‹*¢†·† ].‡D*Zö\„[†O?EYö\„[%‹7%M?E5ˆ»eï]Z‹l‹Á+ï] ]¦‹Á+ï] ]¦‹Á+ WìMÁ+ W¡‡®MD*Zö\w‡?EYö\â‰7%M?E5ˆ»eï]Š*¢†·†®MùŠ W•‡ ‹D*Zö\w‡?EYö\â‰7%M?E5ˆ»eï]ŠD* WìMÔ(¹TAoÔ(¹THÇ‹Ô(¹TAoÔ(¹TH ]Ö‹*ó‹m` ]ŒÔ(¹TAo*ó‹1Œ S*ó‹1Œ SÔ(CŒ`Ho[TŒ^ŒeŒoŒÔ(¹TŒŒ ŒÔ(¹T¸ŒÇ‹Ô(¹TÀŒ ŒÔ(¹T¸ŒÇ‹Á+Í]CŒ ]ÄTÕŒÁ+Í]CŒ ]æVÔ(ÄT?E9ÄTP7%M?E¹T%MÄTvÔ(Ao?E9¡7%M?E¹T%M´Ô(¹TÌßïÔ(¹TÌ ŒKom`ŒŒ SÁ+m`ÀŒ SÔ(¹TAoKom`¸ŒŽKom`ÀŒ S?E¹T%MH ]%ŽÔ(¹TH ]Ö‹Ô(ê\4a„[æV?EêU4a„[PŽ7%M?EÍ]»eCŒZ‹Ž*ó‹1Œ ]ÄT³Ž*ó‹1Œ ]Œ*ó‹1Œ ]ŒÔ(ê\4a„[æV?EêU4a„[PŽ7%M?EÍ]»eCŒZ‹ŽÔ(ÄT?E9ÄTP7%M?E¹T%MÄTvÔ(Ao?E9¡7%M?E¹T%M´?EòŽ 7%M?E3+RzŠ>Ô(*gE?EòŽ[u7%M?E3+R(Só‚Ô((S`HÁ+m`ÀŒ S*ó‹1Œ ]ÄT³Ž*ó‹1Œ ]Œ*ó‹1Œ ]ÄT³Ž*ó‹1Œ ]Œ*ó‹1ŒÄT–*ó‹1Œ S*ó‹1ŒÄT–*ó‹1Œ S*ó‹1ŒÄT–*ó‹1Œ S*ó‹1Œ SKom`HŽÔ(CŒ`Ho[ÇÒ%Mã?EÇ»eÒZ‹ Á+m` ]dcÁ+m` ]dcÁ+m``H*ó‹1Œ SÔ(ê\4a Œ?EêU4au7%M?EÍ]»eCŒó‚Ô(ê\4a Œ?EêU4au7%M?EÍ]»eCŒó‚?EÍ]=\E>Ô(¹THÇ‹*M_%Mqo[ÇÒH%Mo[ÇH%MoŒ?EÇ»eÒZ‹ o[ÇÒ%Mã*M_%Mq*M_%MÄTÈ*M_%Mq‘‘H ]%‘o[ÇÒH ]7H‘7777O‘7GG7õGg*hmÔi–khnÓPi¢º»Pk k()*l7¹[9iŸ¸¹jÕk"°<lëP0123=NOPRflmnopqrstuvwxy|‘“•–žŸ¡¢£¥´¶¸º¿ÌÓÔÖèóôúûüþ3456789:@BDFS]^d+66EJXXˆˆ˜˜ïö  ë ‚¨&,«g=ëgRëhˆŠŽëiÉÌt 6X´%GGHHHLLMMM{{€‚ƒƒ…††ŠŠŽŽŽŽšš››››¨©©«¬¬]D  Ýg#Nmnopqrstuvw‘“•–ÓÔô3456789:]^diœ&3!#%¦i®fjöø&k]¦k+,&l9fl]Ï R´¶¸º¿þ@BDFÏ.­®12˜#/46<EJX\^fˆ˜­®Ìïöüþ 12ØOO˜hyXjó@AXlPSa-2oqsuw„…†–ª«¬®()*./02468:áh†ái¿¿À!jÙ¡jájÊ;|Êk0Ó‹ÓCEJˆ˜¥ïö  #“g46i˜š›Ój<ŽEGHJLMNNOlmmnnooppqqrrssttuuvvwwxxˆŠŽ‘‘““••––š›žžŸ¡¡¢¢£¥­®´¶¶¸ººÓÓÔÔÖÖèñòóôôöøùúúû   l studio 8\vc\include\stddef.honce_INC_STDDEFc:\program files\microsoft visual studio 8\vc\include\crtdefs.h_CRTIMP_DLLdllimport_INC_CRTDEFS__midl_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_WIN32ERROROnlyWin32targetsupported_CRT_NOFORCE_MANIFEST_CRT_FORCE_MANIFESTmessage_VC_NODEFAULTLIBc:\program files\microsoft visual studio 8\vc\include\sal.h__specstrings__nothrow__declspecnothrow_PREFAST_SPECSTRINGIZEx__null__notnull__maybenull__readonly__notreadonly__maybereadonly__valid__notvalid__maybevalid__readableToextent__elem_readableTosize__byte_readableTo__writableTo__elem_writableTo__byte_writableTo__deref__pre__post__precondexpr__postcond__exceptthat__execeptthat__refparam__inner_control_entrypointcategory__inner_data_entrypoint__inner_success__inner_checkReturn__inner_typefixctype__inner_override__inner_callback__inner_blocksOnresource__inner_fallthrough_dec__FallThrough__inner_fallthrough__ecount__bcount__in__in_ecount__in_bcount__in_z__nullterminated__in_ecount_z__in_bcount_z__in_nz__in_ecount_nz__in_bcount_nz__out__out_ecount__out_bcount__out_ecount_partlength__out_bcount_part__out_ecount_full__out_bcount_full__out_z__out_z_opt__out_ecount_z__out_bcount_z__out_ecount_part_z__out_bcount_part_z__out_ecount_full_z__out_bcount_full_z__out_nz__out_nz_opt__out_ecount_nz__out_bcount_nz__inout__inout_ecount__inout_bcount__inout_ecount_part__inout_bcount_part__inout_ecount_full__inout_bcount_full__inout_z__inout_ecount_z__inout_bcount_z__inout_nz__inout_ecount_nz__inout_bcount_nz__ecount_opt__bcount_opt__in_opt__in_ecount_opt__in_bcount_opt__in_z_opt__in_ecount_z_opt__in_bcount_z_opt__in_nz_opt__in_ecount_nz_opt__in_bcount_nz_opt__out_opt__out_ecount_opt__out_bcount_opt__out_ecount_part_opt__out_bcount_part_opt__out_ecount_full_opt__out_bcount_full_opt__out_ecount_z_opt__out_bcount_z_opt__out_ecount_part_z_opt__out_bcount_part_z_opt__out_ecount_full_z_opt__out_bcount_full_z_opt__out_ecount_nz_opt__out_bcount_nz_opt__inout_opt__inout_ecount_opt__inout_bcount_opt__inout_ecount_part_opt__inout_bcount_part_opt__inout_ecount_full_opt__inout_bcount_full_opt__inout_z_opt__inout_ecount_z_opt__inout_bcount_z_opt__inout_nz_opt__inout_ecount_nz_opt__inout_bcount_nz_opt__deref_ecount__deref_bcount__deref_out__deref_out_ecount__deref_out_bcount__deref_out_ecount_part__deref_out_bcount_part__deref_out_ecount_full__deref_out_bcount_full__deref_out_z__deref_out_ecount_z__deref_out_bcount_z__deref_out_nz__deref_out_ecount_nz__deref_out_bcount_nz__deref_inout__deref_inout_z__deref_inout_ecount__deref_inout_bcount__deref_inout_ecount_part__deref_inout_bcount_part__deref_inout_ecount_full__deref_inout_bcount_full__deref_inout_ecount_z__deref_inout_bcount_z__deref_inout_nz__deref_inout_ecount_nz__deref_inout_bcount_nz__deref_ecount_opt__deref_bcount_opt__deref_out_opt__deref_out_ecount_opt__deref_out_bcount_opt__deref_out_ecount_part_opt__deref_out_bcount_part_opt__deref_out_ecount_full_opt__deref_out_bcount_full_opt__deref_out_z_opt__deref_out_ecount_z_opt__deref_out_bcount_z_opt__deref_out_nz_opt__deref_out_ecount_nz_opt__deref_out_bcount_nz_opt__deref_inout_opt__deref_inout_ecount_opt__deref_inout_bcount_opt__deref_inout_ecount_part_opt__deref_inout_bcount_part_opt__deref_inout_ecount_full_opt__deref_inout_bcount_full_opt__deref_inout_z_opt__deref_inout_ecount_z_opt__deref_inout_bcount_z_opt__deref_inout_nz_opt__deref_inout_ecount_nz_opt__deref_inout_bcount_nz_opt__deref_opt_ecount__deref_opt_bcount__deref_opt_out__deref_opt_out_z__deref_opt_out_ecount__deref_opt_out_bcount__deref_opt_out_ecount_part__deref_opt_out_bcount_part__deref_opt_out_ecount_full__deref_opt_out_bcount_full__deref_opt_inout__deref_opt_inout_ecount__deref_opt_inout_bcount__deref_opt_inout_ecount_part__deref_opt_inout_bcount_part__deref_opt_inout_ecount_full__deref_opt_inout_bcount_full__deref_opt_inout_z__deref_opt_inout_ecount_z__deref_opt_inout_bcount_z__deref_opt_inout_nz__deref_opt_inout_ecount_nz__deref_opt_inout_bcount_nz__deref_opt_ecount_opt__deref_opt_bcount_opt__deref_opt_out_opt__deref_opt_out_ecount_opt__deref_opt_out_bcount_opt__deref_opt_out_ecount_part_opt__deref_opt_out_bcount_part_opt__deref_opt_out_ecount_full_opt__deref_opt_out_bcount_full_opt__deref_opt_out_z_opt__deref_opt_out_ecount_z_opt__deref_opt_out_bcount_z_opt__deref_opt_out_nz_opt__deref_opt_out_ecount_nz_opt__deref_opt_out_bcount_nz_opt__deref_opt_inout_opt__deref_opt_inout_ecount_opt__deref_opt_inout_bcount_opt__deref_opt_inout_ecount_part_opt__deref_opt_inout_bcount_part_opt__deref_opt_inout_ecount_full_opt__deref_opt_inout_bcount_full_opt__deref_opt_inout_z_opt__deref_opt_inout_ecount_z_opt__deref_opt_inout_bcount_z_opt__deref_opt_inout_nz_opt__deref_opt_inout_ecount_nz_opt__deref_opt_inout_bcount_nz_opt__successsentinel__nullnullterminated__reserved__checkReturn__typefix__override__callback__format_string__blocksOn__control_entrypoint__data_entrypoint__fallthrough__analysis_assume_DEBUG_CRT_MANIFEST_RETAIL_CRT_MANIFEST_INCONSISTENT_CRT_MANIFEST_DEBUGYouhaveincludedsomeClibraryheaderfileswithandnotThiswillworkcorrectlyPleasesetorclearconsistentlycrtassemh_M_IX86commentlinker__LIBRARIES_ASSEMBLY_NAME_PREFIX_CRT_ASSEMBLY_VERSION_VC_ASSEMBLY_PUBLICKEYTOKEN_M_AMD64_M_IA64_CRT_PACKINGpackpushc:\program files\microsoft visual studio 8\vc\include\vadefs.h_INC_VADEFS_W64_X86___w64_UINTPTR_T_DEFINED_WIN64uintptr_t_VA_LIST_DEFINED_M_CEE_PURESystemArgIteratorva_list_ADDRESSOFvreinterpret_castconstchar_VA_ALIGN_SLOTSIZEOFt_VA_STRUCT_ALIGN_ALIGNOFap_APALIGNsizeof__alignof_M_CEE__va_start__va_arg__va_end_crt_va_start_crt_va_arg_crt_va_end_INTSIZEOFnintpop_CRT_STRINGIZE__CRT_STRINGIZE_Value_CRT_WIDE__CRT_WIDE_StringL_CRTIMP_NOIA64_CRTIMP2_STATIC_CPPLIB_CRTIMP_ALTERNATIVE_CRT_ALTERNATIVE_INLINES_CRT_ALTERNATIVE_IMPORTED_MRTIMP_MRTIMP2_MCRTIMP__CLR_OR_THIS_CALLMRTDLL__CLRCALL_OR_CDECL__cdecl_CRTIMP_PURE_PGLOBAL__cplusplus_cliprocess_AGLOBALappdomain_M_CEE_MIXED__STDC_SECURE_LIB____GOT_SECURE_LIB____STDC_WANT_SECURE_LIB___CRT_SECURE_NO_DEPRECATE_MSC_FULL_VER_CRT_DEPRECATE_TEXT_Textdeprecated_CRT_INSECURE_DEPRECATE_Replacement_CRT_INSECURE_DEPRECATE_MEMORY_CRT_SECURE_DEPRECATE_MEMORY_CRT_INSECURE_DEPRECATE_GLOBALSRC_INVOKED_CRT_SECURE_NO_DEPRECATE_GLOBALS_CRT_MANAGED_HEAP_DEPRECATE_CRT_MANAGED_HEAP_NO_DEPRECATE_SECURECRT_FILL_BUFFER_PATTERNxFD_CRT_OBSOLETE_CRT_OBSOLETE_NO_DEPRECATE_NewItem_CRT_JIT_INTRINSICjitintrinsicCannotuseSecureCRToverloadswhenis_CRT_NONSTDC_DEPRECATE_CRT_NONSTDC_NO_DEPRECATE_POSIX__NewName_SIZE_T_DEFINED_RSIZE_T_DEFINEDrsize_t_INTPTR_T_DEFINEDintptr_t_PTRDIFF_T_DEFINEDptrdiff_t_WCHAR_T_DEFINED_WCTYPE_T_DEFINEDwint_twctype_t_USE_32BIT_TIME_Tcannotbittime_t_INTEGRAL_MAX_BITS_ERRCODE_DEFINEDerrcodeerrno_t_TIME32_T_DEFINED__time32_t_TIME64_T_DEFINED__time64_t_TIME_T_DEFINED_CONST_RETURN_CRT_CONST_CORRECT_OVERLOADSUNALIGNED_CRT_ALIGNalign_MSC_VER_GREATER_THEN_13102050_CRTNOALIASnoalias_CRTRESTRICTrestrict__CRTDECL_ARGMAX_TRUNCATE__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0_ReturnType_FuncName_DstType_Dstexterntemplate_Sizeinlinereturn__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1_TType1_TArg1__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_TType2_TArg2__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3_TType3_TArg3__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4_TType4_TArg4__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1_HType1_HArg1__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3__DEFINE_CPP_OVERLOAD_SECURE_FUNC_2_0_HType2_HArg2__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1_ARGLIST_VFuncName__pragmawarningdisable_ArgList__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST__DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH_Src_DriveSize_DirSize_NameSize_ExtSize_Drive_Dir_Name_Ext__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_ReturnPolicy_DeclSpec__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_EX_s__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_EX__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4_EX__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1_EX__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0_EX__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE_EX__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX__RETURN_POLICY_SAME_FunctionCall__RETURN_POLICY_DST__RETURN_POLICY_VOID__EMPTY_DECLSPEC_SecureFuncName__insecure__T__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_CGETS_SizeRead_Err_SecureDstType_SecureVFuncName_Ret__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_CGETS__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST_EX__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_GETS_Argsthreadlocaleinfostructthreadmbcinfostructpthreadlocinfopthreadmbcinfo__lc_time_datalocaleinfo_structlocinfombcinfo_locale_tstruct_locale_t_TAGLC_ID_DEFINEDtagLC_IDwLanguagewCountrywCodePageLC_IDLPLC_ID_THREADLOCALEINFOrefcountlc_codepagelc_collate_cplc_handlelc_idlocalewlocalewrefcountlc_categorylc_clikemb_cur_maxlconv_intl_refcountlconv_num_refcountlconv_mon_refcountlconvctype1_refcountctype1pctypepclmappcumaplc_time_currthreadlocinfo_PFT_SHOULD_CHECK_RETURN__checkReturn_opt_PFT_SHOULD_CHECK_RETURN_WAT__checkReturn_watMIDL_PASS__crt_typefix_NO_INLINING_CRT_UNUSEDvoidthreadlocaleinfostruct::refcountthreadlocaleinfostruct::lc_codepagethreadlocaleinfostruct::lc_collate_cpthreadlocaleinfostruct::lc_handlethreadlocaleinfostruct::lc_idthreadlocaleinfostruct::__unnamed_0002_1threadlocaleinfostruct::__unnamed_0002_1::localethreadlocaleinfostruct::__unnamed_0002_1::wlocalethreadlocaleinfostruct::__unnamed_0002_1::refcountthreadlocaleinfostruct::__unnamed_0002_1::wrefcountthreadlocaleinfostruct::lc_categorythreadlocaleinfostruct::lc_clikethreadlocaleinfostruct::mb_cur_maxthreadlocaleinfostruct::lconv_intl_refcountthreadlocaleinfostruct::lconv_num_refcountthreadlocaleinfostruct::lconv_mon_refcountthreadlocaleinfostruct::lconvthreadlocaleinfostruct::ctype1_refcountthreadlocaleinfostruct::ctype1threadlocaleinfostruct::pctypethreadlocaleinfostruct::pclmapthreadlocaleinfostruct::pcumapthreadlocaleinfostruct::lc_time_currtagLC_ID::wLanguagetagLC_ID::wCountrytagLC_ID::wCodePagelocaleinfo_struct::locinfolocaleinfo_struct::mbcinfoNULL_CRT_ERRNO_DEFINED_errnoerrno_set_errno_get_errnooffsetofsmvolatile_MT__threadid_threadid__threadhandleYYSIZE_MAXIMUMYY_YYENABLE_NLSENABLE_NLSlibintlmsgiddgettextlint__GNUC__YYUSEeYYIDiyyoverflowYYSTACK_USE_ALLOCAYYSTACK_ALLOC__builtin_alloca__BUILTIN_VA_ARG_INCRalloca_AIX__allocamalloc_alloca_ALLOCA_H_STDLIB_HstdlibYYSTACK_FREEPtrYYSTACK_ALLOC_MAXIMUMYYMALLOCYYFREEfreec:\program files\microsoft visual studio 8\vc\include\stdlib.h_INC_STDLIBsalvadefsc:\program files\microsoft visual studio 8\vc\include\limits.h_INC_LIMITSCHAR_BITSCHAR_MINSCHAR_MAXUCHAR_MAXxff_CHAR_UNSIGNEDCHAR_MINCHAR_MAXMB_LEN_MAXSHRT_MINSHRT_MAXUSHRT_MAXxffffINT_MININT_MAXUINT_MAXxffffffffLONG_MINLONG_MAXULONG_MAXxffffffffULLLONG_MAXi64LLONG_MINULLONG_MAXxffffffffffffffffui64_I8_MINi8_I8_MAX_UI8_MAXxffui8_I16_MINi16_I16_MAX_UI16_MAXxffffui16_I32_MINi32_I32_MAX_UI32_MAXxffffffffui32_I64_MIN_I64_MAX_UI64_MAX_I128_MINi128_I128_MAX_UI128_MAXxffffffffffffffffffffffffffffffffui128SIZE_MAXRSIZE_MAX_POSIX_ARG_MAX_POSIX_CHILD_MAX_POSIX_LINK_MAX_POSIX_MAX_CANON_POSIX_MAX_INPUT_POSIX_NAME_MAX_POSIX_NGROUPS_MAX_POSIX_OPEN_MAX_POSIX_PATH_MAX_POSIX_PIPE_BUF_POSIX_SSIZE_MAX_POSIX_STREAM_MAX_POSIX_TZNAME_MAXARG_MAXLINK_MAXMAX_CANONMAX_INPUTNAME_MAXNGROUPS_MAXOPEN_MAXPATH_MAXPIPE_BUFSSIZE_MAXSTREAM_MAXTZNAME_MAXEXIT_SUCCESSEXIT_FAILURE_ONEXIT_T_DEFINED_onexit_t_onexit_m_tonexit_t_DIV_T_DEFINED_div_tquotremdiv_t_ldiv_tldiv_t_CRT_DOUBLE_DEC_LDSUPPORTld_LDOUBLE_PTR_LDunsignedpush_macropop_macro_CRT_DOUBLEf_CRT_FLOAT_LONGDOUBLEld12_LDBL12RAND_MAXx7fffMB_CUR_MAX___mb_cur_max_func__mb_cur_max__p___mb_cur_max___mb_cur_max_l_func__maxab__min_MAX_PATH_MAX_DRIVE_MAX_DIR_MAX_FNAME_MAX_EXT_OUT_TO_DEFAULT_OUT_TO_STDERR_OUT_TO_MSGBOX_REPORT_ERRMODE_WRITE_ABORT_MSGx1_CALL_REPORTFAULTx2_MAX_ENV_purecall_handler_set_purecall_handler_Handler_get_purecall_handler_purecall_handler_m_invalid_parameter_handler_set_invalid_parameter_handler_get_invalid_parameter_handler_invalid_parameter_handler_m_Handlerh__doserrno_doserrno_set_doserrno_get_doserrnostrerror__sys_errlist_sys_errlist__sys_nerr_sys_nerr__p___argc__p___argv__p___wargv__p__environ__p__wenviron__p__pgmptr__p__wpgmptr__argc__argv__wargvenviron_environ_wenviron_get_pgmptr_pgmptr_get_wpgmptr_wpgmptr_get_fmode_fmode__p__fmode_set_fmode_Mode_PMode_get_osplatformGetVersionEx_osplatform_get_osver_osver_get_winver_winver_get_winmajor_winmajor_get_winminor_winminor__p__osplatform__p__osver__p__winver__p__winmajor__p__winminor_countof_Array_CountofType_SizeOfArray__countof_helper_CRT_TERMINATE_DEFINEDnoreturnexit_Code_exitabort_set_abort_behavior_Flags_Mask_CRT_ABS_DEFINEDabs_Xlabs_abs64_atexit_m_appdomain_Func_atexit_m_Functionatexit_CRT_ATOF_DEFINEDatof_atof_l_Localeatoi_Str_atoi_latol_atol_l_CRT_ALGO_DEFINEDbsearch_s_Key_NumOfElements_SizeOfElements_Base_PtFuncCompare_Contextbsearchqsort_sqsort_byteswap_ushort_Short_byteswap_ulong_Long_byteswap_uint64_Int64div_Numerator_Denominator_dupenv_sgetenv_VarNamegetenv_s_ReturnSize_DstSize_DstBuf_Dest_PBufferSizeInBytes_PBuffer_itoa_s_Radix_itoa_i64toa_s_Val_i64toa_ui64toa_s_ui64toa_atoi64_atoi64_l_strtoi64_EndPtr_strtoi64_l_strtoui64_strtoui64_lldiv_A1_A2_ltoa_slong_ltoamblen_MaxCount_Ch_mblen_l_mbstrlen_mbstrlen_l_mbstrnlen_mbstrnlen_lmbtowc_DstCh_SrcSizeInBytes_SrcCh_mbtowc_lmbstowcs_s_PtNumOfCharConverted_SizeInWords_SrcBufwchar_t_Sourcembstowcs_mbstowcs_s_l_mbstowcs_lrand_CRT_RAND_Srand_s_RandomValue_set_error_modesrand_Seedstrtod_strtod_lstrtol_strtol_lstrtoul_strtoul_l_CRT_SYSTEM_DEFINEDsystem_Command_ultoa_s_ultoawctomb_swctomb_MbCh_WCh_wctomb_s_l_wctomb_l_SizeConverted_SizeInByteswcstombs_s_DstSizeInBytes_MaxCountInByteswcstombs_wcstombs_s_l_wcstombs_l_CRT_ALLOCATION_DEFINEDcalloc_Memory_NewSizerealloc_Count_recalloc_aligned_free_aligned_malloc_Alignment_aligned_offset_malloc_Offset_aligned_realloc_aligned_recalloc_aligned_offset_realloc_aligned_offset_recalloc_WSTDLIB_DEFINED_itow_s_itow_ltow_s_ltow_ultow_s_ultowwcstod_wcstod_lwcstol_wcstol_lwcstoul_wcstoul_l_wdupenv_s_wgetenv_wgetenv_s_DstSizeInWords_BufferSizeInWords_Buffer_CRT_WSYSTEM_DEFINED_wsystem_wtof_wtof_l_wtoi_wtoi_l_wtol_wtol_l_i64tow_s_i65tow_s_i64tow_ui64tow_s_ui64tow_wtoi64_wtoi64_l_wcstoi64_wcstoi64_l_wcstoui64_wcstoui64_l_CVTBUFSIZE_CRTDBG_MAP_ALLOC_fullpath_FullPath_Path_ecvt_s_NumOfDights_PtDec_PtSigndouble_NumOfDigits_ecvt_fcvt_s_NumOfDec_fcvt_gcvt_s_gcvt_atodbl_Result_atoldbl_atoflt_atodbl_l_atoldbl_l_atoflt_l_lrotl_Shift_lrotr_makepath_s_PathResult_Filename_makepath_onexit_m_appdomain_onexit_m_onexit_CRT_PERROR_DEFINEDperror_ErrMsg_putenv_EnvString_putenv_s_rotl_rotl64_rotr_rotr64_searchenv_s_EnvVar_ResultPath_searchenv_splitpath_s_splitpath_FilenameSize_swab_Buf1_Buf2_WSTDLIBP_DEFINED_wfullpath_wmakepath_s_wmakepath_CRT_WPERROR_DEFINED_wperror_wputenv_wputenv_s_wsearchenv_s_wsearchenv_wsplitpath_s_wsplitpath_DriveSizeInWords_DirSizeInWords_FilenameSizeInWords_ExtSizeInWordsSetErrorMode_seterrormodeBeep_beep_Frequency_DurationSleep_sleepmaxminsys_errlistsys_nerrecvtfcvtgcvtitoaltoaputenvswabultoa_Dstbufonexit_wsplitpath_s<_DriveSize,_DirSize,_NameSize,_ExtSize>_wsearchenv_s<_Size>_wmakepath_s<_Size>_splitpath_s<_DriveSize,_DirSize,_NameSize,_ExtSize>_searchenv_s<_Size>_makepath_s<_Size>_gcvt_s<_Size>_fcvt_s<_Size>_ecvt_s<_Size>_wgetenv_s<_Size>_ultow_s<_Size>_ltow_s<_Size>_itow_s<_Size>_wcstombs_s_l<_Size>wcstombs_s<_Size>_ultoa_s<_Size>_mbstowcs_s_l<_Size>mbstowcs_s<_Size>_ltoa_s<_Size>_itoa_s<_Size>getenv_s<_Size>__countof_helper<_CountofType,_SizeOfArray>__unnamed_0005_5__unnamed_0005_5::ld12__unnamed_0005_4__unnamed_0005_4::x__unnamed_0005_3__unnamed_0005_3::f__unnamed_0005_2__unnamed_0005_2::x__unnamed_0005_1__unnamed_0005_1::ld_ldiv_t::quot_ldiv_t::rem_div_t::quot_div_t::remyyallocyyssyyvsYYSTACK_GAP_MAXIMUMunionYYSTACK_BYTESNYYCOPYToFromCount__builtin_memcpydoyyiforwhileYYSTACK_RELOCATEStackyynewbytesyyptryysizeyystacksizeYYFINALYYLASTYYNTOKENSYYNNTSYYNRULESYYNSTATESYYUNDEFTOKYYMAXUTOKYYTRANSLATEYYXyytranslateyyprhsyyrhsyyrlineyytnameYYPRINTyytoknumyyr1yyr2yydefactyydefgotoYYPACT_NINFyypactyypgotoYYTABLE_NINFyytableyycheckyystosyyerrokyyerrstatusyyclearinYYEMPTYYYEOFYYACCEPTgotoyyacceptlabYYABORTyyabortlabYYERRORyyerrorlabYYFAILyyerrlabYYRECOVERINGYYBACKUPTokenValueifyylenyytokenYYPOPSTACKyybackupelseYYTERRORYYERRCODEYYRHSLOCRhsKYYLLOC_DEFAULTCurrentfirst_linefirst_columnlast_linelast_columnYY_LOCATION_PRINTYYLTYPE_IS_TRIVIALFileLocfprintfYYLEX_PARAMYYLEXYYFPRINTFstdioYYDPRINTFArgsYY_SYMBOL_PRINTTitleTypeLocationstderryy_symbol_printyy_symbol_value_printyyoutputyytypeyyvaluepyy_stack_printbottomtopYY_STACK_PRINTBottomTopyy_reduce_printyyvspyyruleyynrhsyylnoYY_REDUCE_PRINTRuleYYINITDEPTHYYMAXDEPTHyystrlen__GLIBC___STRING_Hstrlenyystryystpcpy_GNU_SOURCEstpcpyyydestyysrcyydyysyytnamerryyresyynyypdo_not_strip_quotesyysyntax_erroryyresultyystateyysize0yysize1yysize_overflowYYERROR_VERBOSE_ARGS_MAXIMUMyyargyyxyyfmtyyfyyunexpectedyyexpectingyyoryyformatyyprefixyyxbeginyychecklimyyxendyycountyydestructyymsgyylocationpYYPARSE_PARAMyymsgbufyymsg_allocyyssayysspyyvsayyvalyysetstateyynewstateyyvs1yyss1yyexhaustedlabyydefaultyyllocyyreduce_asn1_add_nodeTYPE_DEFINITIONS_asn1_set_name_asn1_get_name_asn1_set_right_asn1_set_downstrcpystrcatTYPE_CONSTANT_asn1_set_value_asn1_get_last_rightCONST_UNIVERSALCONST_PRIVATECONST_APPLICATIONTYPE_TAG_asn1_mod_typeCONST_EXPLICITCONST_IMPLICITTYPE_DEFAULTCONST_TRUECONST_FALSETYPE_INTEGERCONST_LISTCONST_MIN_MAXTYPE_SIZE_asn1_get_downTYPE_BOOLEANTYPE_TIMECONST_UTCCONST_GENERALIZEDCONST_1_PARAMTYPE_GENERALSTRINGCONST_SIZETYPE_OCTET_STRINGTYPE_BIT_STRINGTYPE_ENUMERATEDTYPE_OBJECT_IDTYPE_IDENTIFIERTYPE_NULLCONST_TAGCONST_DEFAULTCONST_OPTIONTYPE_SEQUENCETYPE_SEQUENCE_OFTYPE_SETTYPE_SET_OFTYPE_CHOICETYPE_ANYCONST_DEFINED_BYCONST_ASSIGNyylocyyerrlab1yylspyyreturnkey_wordkey_word_tokenccounterklastcstringfgetcEOFungetcASN1_NAME_TOO_LONGisdigitstrcmp_asn1_create_errorDescriptionerrorerrorDescriptionASN1_SUCCESSASN1_FILE_NOT_FOUNDASN1_SYNTAX_ERROR_asn1_ltostrASN1_IDENTIFIER_NOT_FOUNDasn1_parser2treefile_nameASN1_TYPEdefinitionsASN1_TYPE_EMPTYASN1_ELEMENT_NOT_EMPTYfopenfclose_asn1_set_default_tag_asn1_type_set_config_asn1_check_identifier_asn1_delete_list_asn1_change_integer_value_asn1_expand_object_id_asn1_delete_list_and_nodesasn1_parser2arrayinputFileNameoutputFileNamevectorNamefile_out_namevector_namechar_pslash_pdot_pstrchrmemcpy_asn1_create_static_structureLIBTASN1_DEBUG_PARSER_libtasn1_logyyalloc::yyssyyalloc::yyvsYYSTYPE::constantYYSTYPE::strYYSTYPE::nodec:\libtasn1\lib\parser_aux.h_PARSER_AUX_Htypevaluelennameright_asn1_get_rightdown_asn1_remove_node_asn1_find_up_asn1_find_nodepointergstr.hc:\libtasn1\lib\element.h_ELEMENT_H_asn1_append_sequence_set_asn1_convert_integervalue_outvalue_out_size_asn1_hierarchical_namename_sizeMAX_TAG_LEN_asn1_error_description_value_not_foundErrorDescriptionEstrcpyMAX_ERROR_DESCRIPTION_SIZEEstrcatasn1_length_deransans_lentempSIZEOF_UNSIGNED_LONG_INT_asn1_tag_dertag_valueSIZEOF_UNSIGNED_INTasn1_octet_derstr_lenderder_lenlen_len_asn1_time_dermax_lenASN1_MEM_ERROR_asn1_objectid_derfirstn_endn_startbit7valval1_asn1_allocaASN1_MEM_ALLOC_ERRORmemmove_asn1_afreebit_maskasn1_bit_derbit_lenlen_bytelen_pad_asn1_complete_explicit_tagpis_tag_implicitlen2len3lefttype_field_asn1_insert_tag_dertag_lenclass_implicittag_implicittag_derASN1_CLASS_APPLICATIONASN1_CLASS_UNIVERSALASN1_CLASS_PRIVATEASN1_CLASS_CONTEXT_SPECIFICASN1_CLASS_STRUCTUREDASN1_TAG_NULLASN1_TAG_BOOLEANASN1_TAG_INTEGERASN1_TAG_ENUMERATEDASN1_TAG_OBJECT_IDASN1_TAG_UTCTimeASN1_TAG_GENERALIZEDTimeASN1_TAG_OCTET_STRINGASN1_TAG_GENERALSTRINGASN1_TAG_BIT_STRINGASN1_TAG_SEQUENCEASN1_TAG_SETASN1_GENERIC_ERROR_asn1_ordering_setvetendnextprevlastp_vetp2_vettagasn1_get_tag_derasn1_get_length_der_asn1_ordering_set_ofchangeasn1_der_codingelementiderp2counter_oldtlenmovemax_len_oldrisASN1_ELEMENT_NOT_FOUNDDOWNUPRIGHTASN1_VALUE_NOT_FOUNDvalue_lenASN1_DER_ERRORc:\libtasn1\lib\structure.h_STRUCTURE_Houtput_file_name_asn1_copy_structure3source_node_asn1_copy_structure2rootsource_name_asn1_add_node_only_asn1_find_left_asn1_error_description_tag_errorpuntasn1_get_octet_derret_lenstr_size_asn1_get_time_der_asn1_get_objectid_der_asn1_str_cpy_asn1_str_catasn1_get_bit_der_asn1_extract_tag_derclass2ASN1_TAG_ERROR_asn1_delete_not_usedCONST_NOT_USEDasn1_delete_structure_asn1_get_octet_stringcounter2counter_endtot_lenindefinitetemp2_asn1_get_indefinite_length_stringasn1_der_decodingp3len4resultCONST_SETASN1_ERROR_TYPE_ANYFOUNDSAME_BRANCHOTHER_BRANCHEXITasn1_der_decoding_elementstructureelementNamenodeFoundcurrentNamenameLenstatememcmpasn1_der_decoding_startEndname_elementstartnode_to_findasn1_expand_any_defined_bydefinitionsNameretCodeauxasn1_read_valueasn1_create_elementasn1_expand_octet_stringoctetNameobjectNameoctetNodeobjectNodeASN1_VALUE_NOT_VALIDtmp_namenegativevaltmpk2LIBTASN1_DEBUG_INTEGERasn1_write_valuenode_rootivaluevalue_tempdefault_tempPUT_VALUEptrptr_sizedatadata_sizePUT_STR_VALUEADD_STR_VALUEvalue_sizeasn1_read_tagtagValueclassValuepTagc:\libtasn1\lib\errors.hERRORS_Hc:\libtasn1\lib\int.hINT_Hlibtasn1.hdefines.hmem.hMAX_LOG_SIZExFFTYPE_IMPORTSCONST_DOWNCONST_RIGHTfmtSTDC_HEADERSstdargLIBTASN1_ERROR_ENTRYlibtasn1_error_entrynumbererror_algorithmsASN1_TAG_IMPLICITASN1_DER_OVERFLOWASN1_ARRAY_ERRORLIBTASN1_ERROR_LOOPLIBTASN1_ERROR_ALG_LOOPbreaklibtasn1_perrorretlibtasn1_strerrorLIBTASN1_DEBUGargsva_startvsprintfva_endlibtasn1_error_entry::namelibtasn1_error_entry::numberdestdest_tot_sizesrcdest_sizestrncatstrncpyc:\libtasn1\lib\gstr.hylist_structlist_typefirstElementlistElement_asn1_malloc_asn1_free_asn1_strdupdrcountval2p4p5name_rootname2parse_version_numberparse_version_stringmajorminormicroasn1_check_versionreq_versionverLIBTASN1_VERSIONmy_majormy_minormy_microrq_majorrq_minorrq_micromy_plvlrq_plvllist_struct::nodelist_struct::nextfileasn1_array2treeASN1_ARRAY_TYPEarrayp_lastasn1_delete_elementelement_namedest_nodep_sp_dp_d_prev_asn1_type_choice_config_asn1_expand_identifierresasn1_print_structureoutmodeindentASN1_PRINT_ALLASN1_PRINT_NAMEASN1_PRINT_NAME_TYPE_VALUEasn1_number_of_elementsnumasn1_find_structure_from_oidoidValueDEFINES_HHAVE_CONFIG_Hconfigc:\program files\microsoft visual studio 8\vc\include\string.h_INC_STRING_NLSCMP_DEFINED_NLSCMPERROR_WConst_return_CRT_MEMORY_DEFINED_memccpymemchr_Buf_memicmp_memicmp_lmemcpy_smemsetmemccpymemicmp_strset_s_strsetstrcpy_sstrcat_s_Str1_Str2strnlenstrnlen_smemmove_s_strdup_stricmp_strcmpi_stricmp_lstrcoll_strcoll_l_stricoll_stricoll_l_strncoll_strncoll_l_strnicoll_strnicoll_lstrcspn_Control_strerror_s_strerror_ErrorMessagestrerror_s_ErrNum_strlwr_s_strlwr_strlwr_s_l_strlwr_lstrncat_sstrncmp_strnicmp_strnicmp_lstrncpy_s_strnset_s_strnsetstrpbrkstrrchr_strrevstrspnstrstr_SubStrstrtok_sstrtok_Delim_strupr_s_strupr_strupr_s_l_strupr_lstrxfrm_strxfrm_l_CPP_NARROW_INLINES_DEFINED_CPP_MEMCHR_DEFINED_N_Pv_Cstrdupstrcmpistricmpstrlwrstrnicmpstrnsetstrrevstrsetstrupr_WSTRING_DEFINED_wcsdupwcscat_swcscatwcschrwcscmpwcscpy_swcscpywcscspnwcslenwcsnlenwcsnlen_swcsncat_swcsncatwcsncmpwcsncpy_swcsncpywcspbrkwcsrchrwcsspnwcsstrwcstok_swcstok_wcserror_s_wcserror_Error__wcserror_s__wcserror_wcsicmp_wcsicmp_l_wcsnicmp_wcsnicmp_l_wcsnset_s_wcsnset_wcsrev_wcsset_s_wcsset_wcslwr_s_wcslwr_wcslwr_s_l_wcslwr_l_wcsupr_s_wcsupr_wcsupr_s_l_size_wcsupr_lwcsxfrm_wcsxfrm_lwcscoll_wcscoll_l_wcsicoll_wcsicoll_l_wcsncoll_wcsncoll_l_wcsnicoll_wcsnicoll_l_CPP_WIDE_INLINES_DEFINEDwcsdupwcswcswcsicmpwcsnicmpwcsnsetwcsrevwcssetwcslwrwcsuprwcsicoll_wcsupr_s_l<_Size>_wcsupr_s<_Size>_wcslwr_s_l<_Size>_wcslwr_s<_Size>__wcserror_s<_Size>_wcserror_s<_Size>wcsncpy_s<_Size>wcsncat_s<_Size>wcscpy_s<_Size>wcscat_s<_Size>_strupr_s_l<_Size>_strupr_s<_Size>strncpy_s<_Size>strncat_s<_Size>_strlwr_s_l<_Size>_strlwr_s<_Size>strerror_s<_Size>_strerror_s<_Size>strcat_s<_Size>strcpy_s<_Size>c:\program files\microsoft visual studio 8\vc\include\stdio.h_INC_STDIOBUFSIZ_NFILE_NSTREAM__IOB_ENTRIES_FILE_DEFINED_iobuf_ptr_cnt_base_flag_file_charbuf_bufsiz_tmpfname_P_tmpdir_wP_tmpdirL_tmpnamL_tmpnam_sL_ctermidL_cuseridSEEK_CURSEEK_ENDSEEK_SETFILENAME_MAXFOPEN_MAX_SYS_OPENTMP_MAX_TMP_MAX_S_STDIO_DEFINED__iob_func_FPOS_T_DEFINEDfpos_t_FPOSOFFfp_STDSTREAM_DEFINEDstdinstdout_IOREADx0001_IOWRTx0002_IOFBFx0000_IOLBFx0040_IONBFx0004_IOMYBUFx0008_IOEOFx0010_IOERRx0020_IOSTRG_IORWx0080_IOAPPENDx0200_TWO_DIGIT_EXPONENT_filbuf_File_flsbuf_fsopen_ShFlagclearerrclearerr_s_fcloseallfdopen_FileHandle_fdopenfeofferrorfflush_fgetcharfgetpos_Posfgetsfileno_fileno_tempnam_DirName_FilePrefix_flushallfopen_s_Formatfprintf_sfputc_fputcharfputsfread_ElementSizefread_sfreopen_sfreopen_OldFilefscanf_sfscanf_fscanf_s_l_fscanf_lfsetposfseek_Originftell_fseeki64_ftelli64fwritegetcgetchar_getmaxstdiogets_sgets_getw_pclose_popenprintfprintf_sputcputcharputs_putw_Word_CRT_DIRECTORY_DEFINEDremoverename_OldFilename_NewFilename_unlinkunlinkrewind_rmtmpscanf_sscanf_scanf_s_l_scanf_lsetvbufsetbuf_setmaxstdio_Max_set_output_format_get_output_format_snprintf_s_vsnprintf_ssprintf_svsprintf_s_scprintfsscanf_ssscanf_sscanf_s_l_sscanf_l_snscanf_s_snscanf_snscanf_s_l_snscanf_ltmpfile_stmpfiletmpnam_stmpnamvfprintfvfprintf_svprintfvprintf_svsnprintf_svsnprintf_snprintf_vsnprintfsprintf_vscprintf_snprintf_c_vsnprintf_c_fprintf_p_printf_p_sprintf_p_vfprintf_p_vprintf_p_vsprintf_p_scprintf_p_vscprintf_p_set_printf_count_output_get_printf_count_output_printf_l_printf_p_l_printf_s_l_vprintf_l_vprintf_p_l_vprintf_s_l_fprintf_l_fprintf_p_l_fprintf_s_l_vfprintf_l_vfprintf_p_l_vfprintf_s_l_sprintf_s_l_sprintf_l_sprintf_p_l_vsprintf_s_l_vsprintf_l_vsprintf_p_l_scprintf_l_scprintf_p_l_vscprintf_l_vscprintf_p_l_snprintf_s_l_snprintf_l_snprintf_c_l_vsnprintf_s_l_vsnprintf_l_vsnprintf_c_l_WSTDIO_DEFINEDWEOFxFFFF_wfsopenfgetwc_fgetwcharfputwc_fputwchargetwcgetwcharputwcputwcharungetwcfgetwsfputws_getws_s_getws_putwsfwprintffwprintf_swprintfwprintf_s_scwprintfvfwprintfvfwprintf_svwprintfvwprintf_sswprintf_svswprintf_s_swprintf_c_vswprintf_c_snwprintf_s_vsnwprintf_s_snwprintf_vsnwprintf_fwprintf_p_wprintf_p_vfwprintf_p_vwprintf_p_swprintf_p_vswprintf_p_scwprintf_p_vscwprintf_p_wprintf_l_wprintf_p_l_wprintf_s_l_vwprintf_l_vwprintf_p_l_vwprintf_s_l_fwprintf_l_fwprintf_p_l_fwprintf_s_l_vfwprintf_l_vfwprintf_p_l_vfwprintf_s_l_swprintf_c_l_swprintf_p_l_swprintf_s_l_vswprintf_c_l_vswprintf_p_l_vswprintf_s_l_scwprintf_l_scwprintf_p_l_vscwprintf_p_l_snwprintf_s_l_snwprintf_l_vsnwprintf_s_l_vsnwprintf_l_CRT_NON_CONFORMING_SWPRINTFS_SWPRINTFS_DEPRECATED_swprintf_swprintf_s_vswprintf__swprintf_l__vswprintf_l_Plocinfoc:\program files\microsoft visual studio 8\vc\include\swprintf.inl_INC_SWPRINTF_INL_managedoffswprintf_Arglistvswprintf_Ap_swprintf_l_vswprintf_l_wtempnam_Directory_vscwprintf_vscwprintf_lfwscanf_sfwscanf_fwscanf_s_l_fwscanf_lswscanf_sswscanf_swscanf_s_l_swscanf_l_snwscanf_s_snwscanf_snwscanf_s_l_snwscanf_lwscanf_swscanf_wscanf_s_l_wscanf_l_wfdopen_wfopen_s_wfopen_wfreopen_s_wfreopen_wpopen_wremove_wtmpnam_s_wtmpnam_fgetwc_nolock_fputwc_nolock_ungetwc_nolock_CRT_GETPUTWCHAR_NOINLINE_c_stm_putwc_nolock_getwc_nolock_CRT_DISABLE_PERFCRIT_LOCKS_stream_fgetc_nolock_fputc_nolock_getc_nolock_putc_nolock_getchar_nolock_putchar_nolock_getwchar_nolock_putwchar_nolock_lock_file_unlock_file_fclose_nolock_fflush_nolock_fread_nolock_fread_nolock_s_fseek_nolock_ftell_nolock_fseeki64_nolock_ftelli64_nolock_fwrite_nolock_ungetc_nolock_offset_origin_buf_sizP_tmpdirSYS_OPENtempnamfcloseallfgetcharflushallfputchargetwputwrmtmp_wtmpnam_s<_Size>_vsnwprintf_s<_Size>_snwprintf_s<_Size>vswprintf_s<_Size>swprintf_s<_Size>_getws_s<_Size>vsprintf_s<_Size>_vsnprintf_s<_Size>tmpnam_s<_Size>sprintf_s<_Size>_snprintf_s<_Size>gets_s<_Size>_iobuf::_ptr_iobuf::_cnt_iobuf::_base_iobuf::_flag_iobuf::_file_iobuf::_charbuf_iobuf::_bufsiz_iobuf::_tmpfnamec:\program files\microsoft visual studio 8\vc\include\ctype.h_INC_CTYPE_CRT_CTYPEDATA_DEFINED_CTYPE_DISABLE_MACROS__PCTYPE_FUNC_pctype__pctype_func_CRT_WCTYPEDATA_DEFINED_wctype__pwctype_func_pwctype_UPPER_LOWER_DIGITx4_SPACEx8_PUNCTx10_CONTROLx20_BLANKx40_HEXx80_LEADBYTEx8000_ALPHAx0100_CTYPE_DEFINED_isctype_Type_isctype_lisalpha_isalpha_lisupper_isupper_lislower_islower_l_isdigit_lisxdigit_isxdigit_lisspace_isspace_lispunct_ispunct_lisalnum_isalnum_lisprint_isprint_lisgraph_isgraph_liscntrl_iscntrl_ltouppertolower_tolower_tolower_l_toupper_toupper_l__isascii__toascii__iscsymf__iscsym_WCTYPE_DEFINEDiswalpha_iswalpha_liswupper_iswupper_liswlower_iswlower_liswdigit_iswdigit_liswxdigit_iswxdigit_liswspace_iswspace_liswpunct_iswpunct_liswalnum_iswalnum_liswprint_iswprint_liswgraph_iswgraph_liswcntrl_iswcntrl_liswasciiisleadbyte_isleadbyte_ltowupper_towupper_ltowlower_towlower_liswctype_iswctype_l__iswcsymf_iswcsymf_l__iswcsym_iswcsym_lis_wctype_chvalidator__chvalidchk_chvalidator_l_chvalidchk_l_Char_Flag_ischartype_lx7f_WCTYPE_INLINE_DEFINED_CRT_WCTYPE_NOINLINE_p_iscsymf_l_iscsym_lisasciitoasciiiscsymfiscsymHAVE_STRINGS_HstringsHAVE_SYS_TYPES_HsystypesHAVE_INTTYPES_HinttypesHAVE_STDINT_HstdintLIBTASN1_Hc:\program files\microsoft visual studio 8\vc\include\sys\types.h_INC_TYPEScrtwrn_CRT_WARNING_NO_32BIT_TIME_T_INO_T_DEFINED_ino_tino_t_DEV_T_DEFINED_dev_tdev_t_OFF_T_DEFINED_off_toff_tc:\program files\microsoft visual studio 8\vc\include\time.h_INC_TIME_CLOCK_T_DEFINEDclock_t_TM_DEFINEDtmtm_sectm_mintm_hourtm_mdaytm_montm_yeartm_wdaytm_ydaytm_isdstCLOCKS_PER_SEC_get_daylight__daylight_daylight_get_dstbias__dstbias_dstbias_get_timezone__timezone_timezone_get_tzname__tzname_tzname_Daylight_Daylight_savings_bias_Timezone_ReturnValue_Indexasctime_sasctime_Tmstruct_Time_ctime32_s_ctime32clock_difftime32_Time1_Time2_gmtime32_s_gmtime32_localtime32_s_localtime32strftime_strftime_l_Max_size_strdate_s_strdate_strtime_s_strtime_time32_mktime32_mkgmtime32tzset_tzset_difftime64_ctime64_s_ctime64_gmtime64_s_gmtime64_localtime64_s_localtime64_mktime64_mkgmtime64_time64GetLocalTime_getsystimeSetLocalTime_setsystime_MilliSec_WTIME_DEFINED_wasctime_s_wasctime_wctime32_s_wctime32wcsftime_wcsftime_l_wstrdate_s_wstrdate_wstrtime_s_wstrtime_wctime64_s_wctime64c:\program files\microsoft visual studio 8\vc\include\wtime.inl_INC_WTIME_INL_wctime_wctime_sc:\program files\microsoft visual studio 8\vc\include\time.inl_INC_TIME_INLdifftimectime_sctimegmtime_sgmtimelocaltime_slocaltimemktime_mkgmtimetimeCLK_TCKdaylighttimezonetzname_wctime64_s<_Size>_wstrtime_s<_Size>_wstrdate_s<_Size>_wctime32_s<_Size>_wasctime_s<_Size>_ctime64_s<_Size>_strtime_s<_Size>_strdate_s<_Size>_ctime32_s<_Size>asctime_s<_Size>tm::tm_sectm::tm_mintm::tm_hourtm::tm_mdaytm::tm_montm::tm_yeartm::tm_wdaytm::tm_ydaytm::tm_isdstASN1_PRINT_NAME_TYPEx00xC0x01x02x11x04x03x17x18x06x0Ax05x1Bnode_asn_structstatic_struct_asnstatic_struct_asn::namestatic_struct_asn::typestatic_struct_asn::valuenode_asn_struct::namenode_asn_struct::typenode_asn_struct::valuenode_asn_1233445566778899::@BBDFFS]]^^_dd H›ù E!;11122233344488<<<===GL\\\^^^{€‚„„…Šš§§¨ªª«ñø &)++,..ÅgEG…jü®GHLM{ŠŽš›ñòøù  î.6CEGJLXz{~€‚„…ˆŠ˜š§¨ª«ïñöø   #%&()+,./nA%ññòòòøøùùù      &'')**,--/00nhwnl^w7G123=7hrwl_@ *0lžŸ¢ó€D{€dŽ€i©Ú@jåèS©j2?¥òiÓÛ#ƒ©'-k[k_›lddo/0126<=PX^flmnopqrstuvwxyz|~ƒ„†Ž“•–œžŸ ¡¢£§©ª¬­®ÌÓÔÕÖרÚèòóôùúûü !"%'(*+-.0123456789:S]^_`abcd$hpäi¿Àdk!`ÍQ/012348<=COPPRR\^tuvwxz~„ŠŽ‘“•–š›œ¡§ª­­®®¿Ö×úûüüþþ    #%(+.1122789:^_ ­®12M /< RMMhtÍhƒÕÍi½¾jþlbVg-.g1=ÿgcfÌl`ˆQýÈ<=ÌÓÔÕÖרÙÚS]^_`abcdd›ˆg2ˆiª«¬Hjïñˆk'bÑ fyz{˜ÌQjò:gzg0z~úiÔ:k^úk5dC By|œ£"Ã>CBOPRTlx„œžŸ ¡¢£¥§ª´µ¶·¸¹º»ÕÖרÙÚèóúû!"#%(+.@ABCDEFGS_`abcƒh xž¡¶·úBCÃh‚ÃjBC¬›,hqlk"#5@/08<Blœ×Ù "#_aõgX\^Õh„…†õh‘“Þ5DIQW}‡—¤îõý þ.CEJXz~„ˆ˜§ªïö  #%(+.žFyzgži­~jû~k%&>l=>çk30!/468<CEJX\^ˆ˜­®ïö  12p9iÏëV°h|~€°k-c EGz~˜ö Y! GL{€…«ñø)/YA ##%%((ÙVl´µZ\^ho¢‚ƒ…†¨©«¬&')*,-/0â?66CCEEJJXXˆˆ˜˜ïïöö  ¢h{€‹Bzz~~ËjDET::ÅÅLLTPRüþT+HMƒ†Ž›©¬òù '*-0”i¬Ôk1”lc½ = CJL‚„…ˆŠŽ§¨ª«ïñ #%&()+,./}+HM=G123=½gBÙýh•ÖýjÆ¥†CRH†la/`3oi£¥/jßhojù/kïk4¸k./0Á 011223346<==X\^¿AhsAi Ø*gjg/<êj3 BMƒ†Žœ ©¬ÕרÙÚò!"'*-0_`abcó?GHLMŠŽš›ñòøù  sg0¿À³gBCœ {€š›ø  œg8œk*Ük2%#‹Œe9bÈäOŽ!Šš Ž(Ž› Î@ Ÿ´µ¸¹ó@ADEÎgJLk×g$Nmnopqrstuvw‘“•–ÓÔÖô3456789:]^dWhuWi¢º»FG—j  48\^àV4I$HMòùIi¡ jÖÒTNj×{ahÇÎãêNU{hx»h~»j Ä@3//00666PPRRTXXXtuvwˆ‘“•–˜œ­®Ö×üüþþ  12789:^_DkÄk/l6-#Œ¶ ö £¥¶>2oqsuw„…†–ª«¬®()*./02468:vAGHLMŠŽš›ñòøù  vi§¨vjúvk"ak///0012346688<<=BCCEJPRXX\^ltuvwz|~~€„ˆˆŠŽ‘“•–˜˜š›œœŸ§ª­®´¸¿¿Ö××Ùïöüþ      #%(+.12789:D^__€C ŠŽŽš››   _i£¥_jô_lZ¨ 2oqsuw„…†–¬®()*./02468:h4\^(iœ×hi£èi¿À(jÚq$†¬*01iž¶·±i²³±j   ñj1l:jØÚjFGZl8c£g<ãgPTchvLEahÇÎãêNUŒhyz{öéAf YØ…4 F³Q…ûguH`p®†š]!LŸvd¬I ,TΆ[ÜEÑPÙ9"w†±/Êœ(iMuÓa+Ž8bˆNbsg^¸V›.“boSdCŠ&3ª+î!ji[B„p!‹èƒý=£Bzœ‚-#¡e~'†HÒ‰ð|1i.XXpúOBéYs*B@LK¶ ü@JwM”5üö5>>Ð /-{/`"ƒŽ —T^b¤l`]·a. lIÄ?ÛYæ-$ Dÿÿ®y Dÿÿþþ“}@ÿÿ´´Ž}@ÿÿ³³‰}@ÿÿ ²²€}@ÿÿ ±±w}@ÿÿ°°Úp@ÿÿ¯¯n}@ÿÿ®®p@ÿÿ­­d}@ÿÿ¬¬\}@ÿÿ¦¦!}@ÿÿ!‹‹}@ÿÿ'ŠŠ}@ÿÿ*‰‰ð|@ÿÿ/ˆˆâ|@ÿÿ2‡‡Ô|@ÿÿ7††Ä|@ÿÿ>……¶|@ÿÿD„„§|@ÿÿGƒƒ˜|@ÿÿJ‚‚–{@ÿÿN@@‡{@ÿÿR??x{@ÿÿU>>o{@ÿÿX<<™} @[;;d{ @ÿÿ1];;d{@ÿÿa::[{@ÿÿd99S{@ÿÿh88G@ÿÿk66={@ÿÿq22I{@ÿÿv11+{@ÿÿ{005{@ÿÿ//"{@ÿÿƒ.. {@ÿÿˆ,,üz@ÿÿŒ**{@ÿÿ‘(({@ÿÿ•''âz@ÿÿœ&&Ìz@ÿÿ¢%%ðz@ÿÿ©$$Øz@ÿÿ¯##´z@ÿÿµ""¢z@ÿÿº  Áz@ÿÿÀ¬z@ÿÿÅŠz@ÿÿËxz@ÿÿЗz@ÿÿÖ‚z@ÿÿÛjz@ÿÿà^z@ÿÿäIz@ÿÿè–y@ÿÿîúú‰y@ÿÿôúú~y@ÿÿùùùhy@ÿÿþùùy@ÿÿéé&y@ÿÿ èèúx@ÿÿçç y@ÿÿææêx@ÿÿ!ääÛx@ÿÿ&ããÎx@ÿÿ+ââ¿x@ÿÿ2àà°x@ÿÿ9ßß¡x@ÿÿ@ÞÞ“x@ÿÿGÝÝ…x@ÿÿNÜÜwx@ÿÿUÛÛhx@ÿÿ[ÙÙYx@ÿÿaØØLx@ÿÿg××>x@ÿÿmÖÖ0x@ÿÿsÕÕ$x@ÿÿyÔÔx@ÿÿ~ÒÒx@ÿÿƒÑÑüw@ÿÿˆÐÐïw@ÿÿÏÏâw@ÿÿ’ÎÎ×w@ÿÿ—ÍÍÉw@ÿÿ›Ë˼w@ÿÿŸÊʯw@ÿÿ¥ÉÉ£w@ÿÿ«ÈÈ—w@ÿÿ¯ÇÇŠw@ÿÿ´ÆÆw@ÿÿ¸ÅÅsw@ÿÿ½ÄÄgw@ÿÿÃÁÁ\w@ÿÿÉÁÁ«} @`Ͼ¾Nw @ÿÿ1Ѿ¾Nw@ÿÿؽ½À} @cÞ¼¼Aw @ÿÿ1༼Aw@ÿÿç»»4w@ÿÿí¹¹(w@ÿÿó¸¸Ô} @hø¶¶w @ÿÿ1ú¶¶w@ÿÿµµç} @k´´w @ÿÿ1´´w@ÿÿ ³³w@ÿÿ±±ýv@ÿÿ°°ñv@ÿÿ¯¯çv@ÿÿ®®Üv@ÿÿ#­­Òv@ÿÿ'¬¬Êv@ÿÿ+««¿v@ÿÿ0ªª¶v@ÿÿ5©©¯v@ÿÿ8§§¨v@ÿÿ;¦¦ù} @y>¥¥Ÿv @ÿÿ1@¥¥Ÿv@ÿÿD¤¤˜v@ÿÿH££‘v@ÿÿM¢¢‰v@ÿÿQ  €v @@ÿÿTJK€v@@ÿÿWŸŸzv@ÿÿ[žžqv @@ÿÿ]HIqv@@ÿÿ_kv@ÿÿbœœ`v@ÿÿe››Yv@ÿÿiššNv@ÿÿk™™Gv@ÿÿn˜˜>v@ÿÿs••øu@ÿÿ{ˆˆv@ÿÿ‚‡‡v@ÿÿ‰††Ðu@ÿÿ‘……êu@ÿÿ˜„„Þu@ÿÿŸƒƒÁu@ÿÿ¤´u@ÿÿ©€€¦u@ÿÿ®šu@ÿÿ³~~ru@ÿÿº||Œu@ÿÿÁ{{€u@ÿÿÇzzMu@ÿÿÎyyeu@ÿÿÕxxZu@ÿÿÛww?u@ÿÿáuu1u@ÿÿçtt%u@ÿÿíssu@ÿÿórr u@ÿÿùqqu@ÿÿÿppót@ÿÿnnæt@ÿÿ mmÛt@ÿÿllÏt@ÿÿkkÃt@ÿÿjj¹t@ÿÿii t@ÿÿgg‡t@ÿÿ"ffzt@ÿÿ&eent@ÿÿ*ddbt@ÿÿ0ccWt@ÿÿ4bbKt@ÿÿ9aa@t@ÿÿ?``6t@ÿÿC__+t@ÿÿH^^t@ÿÿN\\t@ÿÿT[[t@ÿÿXZZ—c@ÿÿ]XXÿs@ÿÿbXX ~ @µgUU%s @ÿÿ1iUU%s@ÿÿoTTôs@ÿÿuRRês@ÿÿ{RR~ @ºOOs @ÿÿ1ƒOOs@ÿÿŠNNÔs@ÿÿ‘MMàs@ÿÿ—LLÊs@ÿÿ›KKÂs@ÿÿŸJJ·s@ÿÿ¤II®s@ÿÿ©HH°T@ÿÿ­GG§s@ÿÿ°FF/~ @ųEEžs @ÿÿ1µ EEžs@ÿÿ¹ CCŒs@ÿÿ¼ BB–s@ÿÿ¾ @@ts@ÿÿÅ ??`s@ÿÿË >>s@ÿÿÒ ==ks@ÿÿØ <<Js@ÿÿÞ ;;:s@ÿÿã 99Vs@ÿÿé 77Cs@ÿÿî 660s@ÿÿò 55?~ @Ó÷ 44s @ÿÿ1ù 44s@ÿÿÿ 33P~ @Ö 22s @ÿÿ1 22s@ÿÿ 11»r@ÿÿ 00ïr@ÿÿ //Ür@ÿÿ ..Êr@ÿÿ --Ãr@ÿÿ  ,,§r@ÿÿ% ++™r@ÿÿ) ))²r@ÿÿ. ''¡r@ÿÿ2 &&’r@ÿÿ4 %%‹r@ÿÿ7 $$„r@ÿÿ: !!|r@ÿÿ= [r@ÿÿA Tr@ÿÿD 1r@ÿÿH ,r@ÿÿK $r@ÿÿN r@ÿÿR r@ÿÿV r@ÿÿZ r@ÿÿ^ r@ÿÿa —F@ÿÿd úq@ÿÿg õq@ÿÿj  c~ @óm  îq @ÿÿ1o  îq@ÿÿs  áq@ÿÿu Ùq@ÿÿw Ôq@ÿÿz Íq@ÿÿ€ Ãq@ÿÿƒ ¹q@ÿÿˆ ³q@ÿÿ‹ ¥q@ÿÿ ÿÿq@ÿÿ” þþ‡q@ÿÿš ýýwq@ÿÿŸ ûû“q@ÿÿ¥ ùù€q@ÿÿª øø\q@ÿÿ° ööfq@ÿÿµ ôôTq@ÿÿ¼ óóAq@ÿÿ òò;q@ÿÿÆ ññ1q@ÿÿÉ ðð+q@ÿÿÍ ïï!q@ÿÿÒ îîŽN@ÿÿ× ííq@ÿÿÜ ëëÀU@ÿÿà ééq@ÿÿâ èèép@ÿÿæ ââáp@ÿÿé ÚÚÔp@ÿÿî ÕÕÇp@ÿÿò ÔÔ½p@ÿÿô ÓÓ¦T@ÿÿ÷ ÒÒ¶p@ÿÿú Ñѯp@ÿÿý ÐЪp@ÿÿ ÏÏ¢p@ÿÿ ÌÌ„p@ÿÿ ÇÇÆU@ÿÿ  ÆÆyp@ÿÿ  ÅÅpp@ÿÿ ÄÄ`p@ÿÿ ÁÁXp@ÿÿ ¼¼Jp@ÿÿ »»to @ÿÿ ’’Yo@ÿÿ ‚‚6 @ÿÿ DD€n @ÿÿ:Cq~@0" ;;~~@0"!<<‹~@0""==™~@0"#>>§~@0"$??µ~@0"%@@Æ~@0"&AAÖ~@0"'BBS} @ÿÿ(ŸŸJ} @ÿÿ)žž‹| @ÿÿ+~~€| @ÿÿ-}}o| @ÿÿ/ww^| @ÿÿ0vvN| @ÿÿ2uu>| @ÿÿ3tt1| @ÿÿ6ss$| @ÿÿ8rr| @ÿÿ;qq| @ÿÿ=ppJo @ÿÿ>\\#v @ÿÿ?YYÖ{ @ÿÿAQQÈ{ @ÿÿDPPzv @ÿÿGOOkv @ÿÿINNxG @ÿÿJ55Ry @ÿÿKîî3v @ÿÿL=r @ÿÿMƒF @ÿÿN6p @ÿÿOµµp @ÿÿP¯¯p @ÿÿQ®®p @ÿÿR­­øo @ÿÿS¬¬éo @ÿÿT««Üo @ÿÿU©©Ïo @ÿÿV¨¨Âo @ÿÿW§§µo @ÿÿX¥¥§o @ÿÿY¤¤‡o @ÿÿZ¡¡ëN @ÿÿ[   o @ÿÿ\ŸŸšo @ÿÿ]žždo @ÿÿ^šš{o @ÿÿ`““?o @ÿÿass7o @ÿÿbqq-o @ÿÿcpp#o @ÿÿdooo @ÿÿenn o @ÿÿfkko @ÿÿgjjûn @ÿÿhiiÜn @ÿÿi^^Ón @ÿÿj\\Èn @ÿÿkPP¾n @ÿÿlOOrn @ÿÿmEE¬T @ÿÿn66en @ÿÿo44[n @ÿÿp..Tn @ÿÿq,,Mn @ÿÿr%%Bn @ÿÿs_bgjx´¹ÄÒÕò#$%&'()**nE*¸Œµ“Á“*µ“Ò“*¸ŒgE*nE*µ“Ò“*nEaoÞ“î“”*nEÔ(”.” S*¸Œµ“Á“Á+F”%M„[µ“Z”¤+µ“Ò“*µ“” ”¬”kXµ“Ò“*µ“Æ” ”Ó”Á+ê”=ø”„[µ“ •Á+ê”ø”„[µ“J•*µ“Ò“*µ“Ò“z••µ“Œ•z••‡µ“¨•z•µ“Ò“D* ŠÚ†?E«‰$‰7%M?E³W2M:‰*[LìMaowX½•®MHÿMìM?EÒ•[L½•ß•î•ao[L½•ß•'–?EÒ•[L½•U–ao[L½•®MaoÞ“½•„–*Þ‘ÄT¬œ–*Þ‘¬Ç–*Þ‘ÄT¬œ–*Þ‘¬Ç–*ï] ]Þ‘ÄT¬ß–*ï] ]Þ‘¬)—*ï] ]Þ‘ÄT¬ß–*ï] ]Þ‘¬)—*ï]Þ‘ÄT¬`—*ï]Þ‘¬œ—*ï]Þ‘ÄT¬`—*ï]Þ‘¬œ—*µ“Þ‘ÄT¬Å—*µ“Þ‘¬ú—*µ“Þ‘ÄT¬Å—*µ“Þ‘¬ú—*Þ‘ÄT˜-˜*Þ‘˜Y˜D*r˜Œ˜®M*ZÞ‘õ‘§˜’*ZÞ‘õ‘¬L’*ZÞ‘§˜‚’*ZÞ‘¬¦’*³W= ]Þ‘ÄT˜µ˜*³W ]Þ‘ÄT˜É’*³W= ]Þ‘ÄT¬™*³W ]Þ‘ÄT¬“*Þ‘ÄT˜-˜*Þ‘ÄT¬œ–*Þ‘ÄT¬œ–*³W=Þ‘ÄT˜É’*³W ]Þ‘ÄT˜É’*³W ]Þ‘ÄT˜É’*³W=Þ‘ÄT¬“*³W ]Þ‘ÄT¬“*³W ]Þ‘ÄT¬“*µ“Þ‘ÄT˜Z™*µ“Þ‘ÄT˜Z™*µ“Þ‘ÄT˜Z™*µ“Þ‘ÄT¬Å—*µ“Þ‘ÄT¬Å—*µ“Þ‘ÄT¬Å—*Þ‘ÄT˜-˜*Þ‘ÄT˜-˜*Þ‘ÄT˜-˜*Þ‘ÄT¬œ–*Þ‘ÄT¬œ–*Þ‘ÄT¬œ–*Þ‘˜Y˜*Þ‘¬Ç–*³W ]Þ‘˜R“*³W ]Þ‘¬„“*Þ‘˜Y˜*µ“Þ‘˜™*Þ‘¬Ç–*µ“Þ‘¬ú—*Z„[Þ‘§˜R“*Z„[Þ‘¬„“*Y„[Þ‘§˜³™7%M*³WfY ]Þ‘˜î™*Y„[Þ‘¬.š7%M*³WfY ]Þ‘¬hš*³W2MÞ‘˜R“*³W2MÞ‘¬„“*YÞ‘§˜§š7%M*5ˆ2MÞ‘˜R“*YÞ‘¬Ôš7%M*5ˆ2MÞ‘¬„“*Þ‘˜Y˜*Þ‘˜Y˜*µ“Þ‘˜™*µ“Þ‘˜™*Þ‘¬Ç–*Þ‘¬Ç–*Þ‘¬Ç–*µ“Þ‘¬ú—*µ“Þ‘¬ú—* WìMD*‚ˆÚ†D*³ˆ$‰7%MD*̆2M:‰* Wµ“›D*5ˆ›µ“.›z••µ“Œ•z•J›U›z•J›U›z••‡µ“¨•z•nEz•nEz•µ“Ò“z••‡U›z••‡µ“¨•z•nEz•µ“Ò“ao[L½•`›l›*zH= ]î“ÄT˜•›*zH ]KoÄT˜â›*zH ]î“ÄT˜â›*zH= ]î“ÄT¬!œ*zH ]î“ÄT¬mœ*zH ]î“ÄT¬mœ*î“ÄT˜«œ*î“ÄT˜«œ*î“ÄT¬Ôœ*î“ÄT¬Ôœ*zH=î“ÄT˜â›*zH ]î“ÄT˜â›*zHî“Vk˜üœ*zH=î“ÄT¬mœ*zH ]î“ÄT¬mœ*zHî“ÄT¬-*µ“î“ÄT˜]*µ“î“ÄT˜]*µ“î“ÄT˜]*µ“î“ÄT¬*µ“î“ÄT¬*µ“î“ÄT¬*î“ÄT˜«œ*î“ÄT˜«œ*î“ÄT˜«œ*î“ÄT¬Ôœ*î“ÄT¬Ôœ*î“ÄT¬Ôœ*nE*\EgE*Â*°*Í] ]Ø*Â*µ“ž*Í] ]$ž*°*µ“Ož*zH ]Ø*zH ]$ž*Â*ê\î“§˜nž*ê\Œž*êUî“§˜©ž7%M*zH%MØ*ê\„[î“§˜Ø*ê\„[$ž*êU%Mî“§˜Ðž7%M*zH= ]Ÿ*zH= ]Ÿ*zH ]Ø*Â*Â*µ“ž*µ“ž*¸Œµ“Á“Ô(?ŸAo?EMŸ¡7%M?E3aŸ´?EÒ•oŸaonE*CŒ ]î“ÄT¬|Ÿ*CŒ ]ÀŸ*CŒ ]î“ÄT¬|Ÿ*CŒ ]ÀŸ*CŒî“ÄT¬ñŸ*CŒî“¬' *CŒî“ÄT¬ñŸ*CŒî“¬' *°*êUJ 7%M*zH=$ž*êU%Mp 7%M*zH= ]¤ *µ“3¨I%MÝ *nE*¡­\*¡gEHµ“?Ÿ"¡*î“ÄT¬Ôœ*°*î“ÄT¬Ôœ*°*nEHµ“Ò“*Q`H*Q`H*6¡O¡ S*Q`H*h¡µ“Á“*m``H*¸ŒgE*¸Œµ“Á“*°*°aoX`r¡ S*µ“Ò“H(S`H*µ“Ò“Ô(?ŸAoÔ(òŽ¡7%MÔ(3aŸ´*nE*nE*µ“Ò“Á+„¡%M„[µ“Z”¤+µ“Ò“*µ“” ”¬”kXµ“Ò“*µ“Æ” ”Ó”*µ“•¡¨¡*µ“î“ÄT¬*µ“Ož*µ“î“ÄT¬*µ“Ož?EÒ•Qr¡ß•Å¡aoQr¡µ“ø¡Á+ê”=ø”„[µ“ •Á+ê”ø”„[µ“J•*m`µ“ ¢*¸ŒgE*¸Œµ“Á“*µ“Ož*µ“Ož?EÒ•Qr¡:¢aoQr¡ S*nEÔ(c¢.” S*µ“Ò“Ô(3x¢µ“†¢*µ“Ÿ¢¬¢*nE*µ“Ò“*µ“Ò“*µ“Ò“*µ“Ò“aoÞ“r¡”*nE*µ“Ò“?Eµ“Ò“Hµ“Ò“aoQr¡`›Ã¢*¸Œµ“Á“*µ“Ò“¤+aonEæ¢Ô(*Ô(****Ô(ô¢þ¢7£7£ £%£(£=£%£W£k£%££‰££›£%££ê££77#¤6¤;¤%£6¤Q¤%£6¤_¤6¤7j¤4¥77´lE¥L¥S¥Z¥a¥h¥L¥o¥v¥}¥7„¥—¥ª¥7½¥Ê¥GGkGiiÀl Cºl CÍ¥æ¥ÿ¥¦7 ¦i¦¦¦7áÇpÔGq òòóó„„……‘‘Gv˜EINTÐuƒ…¹q”¹tis12‚zkxD¸ë4»¿ÁÊÌÏÐØÚâéô!5@Zde“•œ­ÊËâãä./189‡‰­¯²´ë  E¥;k&ùë?.òó13LMNT[\wxyz{|ƒ„…†‡ˆ¸¹»½ÈÉÛÜÝÞßàæçèé:„…Š‘‘ëN ks<kvœNtoŒ’•Ôþts=?ôsR]D»»½½&3wy{¦TÒfj&p±¦u&yè¦{DpÊ­r˜#679;<=>? "#$%&ur˜v£{(˜|‚Ža-Gùý'+7;=?ijklmnpqrstuwxyz{|~€ƒ„…†‡ˆÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèéú"$&(,ápÚe¯áqJo¹\Jp»gpÊr-Js7;ÊsKÊv«J}žÓPV¿÷Ó)+139;>?NTy|…³µ»½Ýàçé "%&*,Ón\Sz¦S{8S}Ÿ<Ë¿¿ÁÁÊÌééëëíîñôôööøùûý!&')+12345667799;;<=>?HIJKLMNORTUXZ[\^_`abcdeijklmnpqrstuwxyz{|~€ƒ„…†ˆ““••š›žŸ£§©ª«¬­®¯°±³´µ¶¸¹»¼½¾ÁÄÅÆÇÈÉÊËÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèéùú  ""#$%&'(*,.//001122889?­¼o¥¼wÊ?@z{‚ƒ„…†‡ˆ‰Š‹¦¬­®¯°±²³´d уdoˆšd{:;ä{Sbd}¬ÍTòòòóóóó01123<=>?LMMNNORT[\`cxy{|ƒ„……†‡ˆˆ¤³µ¸¹»»¼½½¾ÁÈÉÛÜÝÞßàæççèéé#$%&:„„„…………ŠŠŠMn%,Íq–MuwyÖo¨®Vs7Ö{QTv?os?uu¿vª¿xàúˆýˆ9HIJKLMNOTUZ\abcelmnstuz{|€†‡ˆ®¯°±µ¶¹½¾ÆÇÉËÐÑÒרÙÞßàäèérxÑ|pr‘n=qéë‘v¢w³´zgÕ 0CEúq²ztezvžOúxæçCéôøù&',67<=@Lwzƒ†æè#$'(/1Ã!O¾Ã>ñ£¤§Ãq•Ãr,Cs6ÃtjÃ{NNOOPPQQTTUUVVŽŽ’’““””••––n Dÿÿ!!ßf Dÿÿ""Ì4 Dÿÿ##„Œ Dÿÿ$$Á˜ Dÿÿ&&¨Ž @ÿÿ“ÅŽ @ÿÿI“Ž @ÿÿFFúŽ Dÿÿ@F @0AA$@0BB;@0 CCR@0 DDi@0 EE^Ž @ÿÿ ==RŽ @ÿÿ <<EŽ @ÿÿ;;1Ž @ÿÿ::!Ž @ÿÿ99 Ž @ÿÿ88ú @ÿÿ77å @ÿÿ66Î @ÿÿ55· @ÿÿ44¦ @ÿÿ33‘ @ÿÿ22‚ @ÿÿ11t @ÿÿ00g @ÿÿ//Z @ÿÿ..P @ÿÿ--G @ÿÿ,,= @ÿÿ++2 @ÿÿ**' @ÿÿ )) @ÿÿ!((     *żμۼì¼ú¼*Ô(Ü}**filor zux{~„‡õ)‰‹zG@~¸lºl C C^Ç\ñö')NT\{‡™¥¯ºÇäïÿ"(28[ns{ƒÐ*G ,±ÀÁq†ßŒg/U|¦»å#3t„ù0‡ŽE5:?DKPW\cdeinu}„œ¢P-Vu}ƒ•«Ãæû$,4?CGKOSWpwˆ.™U—˜¢Wâê—©‚12‚ŽDÝáð9CLQX]optv~ƒ…’’’“£¤âŽžáâåæéê"LS‘§¨ ³ëŽ¡ cdejTc¶4f š¼¾ÀÆÇ¿¿t0Sy¡¸â  0>BFJNRVfim1½?¢ýT ™±³·ò÷ûÿF=R+O]^_`abcdefghijklmnopqrstˆ‰š›œžŸ²³´ÂÈÉÊËÌÍÎÏÐÑÒÓÔ)*+9:@DHLPT\]^_`acd|}Ù-}ŽCÚÚÝ 9Ceiopv~…—¥ŽIÊ&3‰°ÕÖרÙÚÛÜÝ+ar‡¡­®Àæöcd>¸ÂÄÆU¿¦3v3afÆr1§¨©ª®·Á78:;ABDEFNOPRZ[\^ghijrsuw‚„† ¡¢¥¦©ª·¸hU±èX™ˆYÛñúþx_ú¨`âæê¸`Ñhc:;DEPR\^iuw„†¢¦xŽBÑ×ÛÝâæêíñöþ  "8BO[hs‚¡¨Ž”a\ px\ží~‡‘q`e³‘2o…ý>!Ž9°ÕÖרÙÚÛÜÝr‡äJ1Ž:PvŠµß -;j~ôVqŽ AÌÏ)8BO[hs‚¡ñŽ¢¤¥ª±ú^Ô¼šf Z#.QRwx‹Œ ¶·àá  ./<=AEIMQUeghkl€ï/ú7ðñòóôõö÷øùúì|ƒU—˜³Y$PQvwŠ‹°µ¶ÕÖרÙÚÛÜÝßà  -.;<gjkr~‡“ŽFI›ŒYœÛðñõöúþX_üZòøúÌ` E–u[ñå6 èEŽ;ÞàŽŽNÇUþNORSTUVWY\]^_`abcdefghijklmnopqrstuxyz{|}~€‚ƒ„‡ˆ‰ŒŽ‘’“”•–™š›œžŸ ¡£¤¥¦§¨©ª«¬¯±²³´·¸¹º»¼½¾¿ÀÁÂÃÄÇÈÉÊËÌÍÎÏÐÑÒÓÔÞáâãäåæçìïñòóôõö÷øùúûüÿ    !"#$%()*+,/01234589:=>?@ABCDEFGHIJKLMNOPQRSTUVWX[\]^_`abcdefhilmnopqstuvwx{|}€‚ƒ„…†ˆ‰µcde^` oxÞaíÞd­®®e×~f"(ŽÌÎ5‘’“”§¨©ª¼½¾¿um^Ž =WX~€‚Ö,—TŸ–––——˜ž¤¤¤¥¨¨¨©WaÛÝ·4b!I·Ž˜ÑÔ×ÛÝâæíñöúþ "ÀU¾àV o¼¿ÉŽœ67@AMNYZfgqr€Ÿ ¸ÁÒTÚeop~’_'–±³µ¶ÑÔ×ÛÝâæêíñöúþ "5;?EKRW^nw}†œ¦2*KYz„Ž–¤¬¹Äãçü!%15Xx‚‰Ó+RŽ<¢4²Ž”Û_þ$[ôöDfVu}ƒ•«Ãæû$,4?CGKOSWpwˆÆÄŽd›ÊÌÏÑ×ÚÚÛÝÝÝáâæêíðñöþ   ")58899:?BBCCDKLOOPQWX[[\]cdeehhiinooppsstuvv}~~‚‚ƒ„……’’’“—œ¡¡¢£¤¥³U —±³ÆÑê  ¼ ]KXêëð Ž8êëì b­Ž”6š6`ÖŽœÍ·"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|Í}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÏÓÔln Dÿÿ+„ Dÿÿ""ñ„ Dÿÿ## Y@ÿÿÙÙ–\@ÿÿ Öט^@ÿÿÒÔ6Z@ÿÿÏÐ.^@ÿÿ ËÍqY@ÿÿ&ÈÉ…\@ÿÿ+ÅÆTc@ÿÿ.ÁÁhc@ÿÿ1¿¿Þd@ÿÿ4½½šf@ÿÿ8º»Þa@ÿÿ>·¸Ì`@ÿÿD´µq`@ÿÿH±²6`@ÿÿP¬¯Û_@ÿÿW§ªx_@ÿÿ]¤¥Ç\@ÿÿd ¢~f@ÿÿižž¨`@ÿÿo›œWa@ÿÿu˜™®e@ÿÿy––ú^@ÿÿ|””¸`@ÿÿ‘’f@ÿÿ‡e@ÿÿŒŒpV@ÿÿ’‰ŠhU@ÿÿ—†‡‘e @ÿÿ˜~~M‹ @ÿÿ˜x|_‹@0 ™yyw‹@0 šzz‹@0 ›{{ƒU @ÿÿœtt_ @ÿÿrr=‹ @ÿÿ jr¨‹@0&ž kk¾‹@0&Ÿ llÔ‹@0&  mmë‹@0&¡——¬T6¬nA,r¬z5#5HIJKLMNTZ\abcelmnstuz{|€†‡ˆ®¯°±µ¹½ÆÇÉËÐÑÒרÙÞßàäèéµo¥5{/îžF6žsCEt\çnbçv®gwÁp9å©pCÿ†ˆppÄðz$ð|ˆ”YA¢¢¤¤³³µµ¸¸¹¹::Yo‚žŸ ÙqkYvšFKOUYxØ¢¥¦¢pÌ­"z¢z "{.‹r$ uq‹|{~”5gipqv‡ýv°ÆUÆŽ¯o¤¯pÐd¯v§¯wÉ8v8}’’s=}‰•êsRêu„êxäjzó? 24ORUX´¶¼¾ÁùúótnswÄÜ<¿ÁÊÌéëôö0“•./0128Ün^Üo©\qôöÜr.Üv­\wÁ\}£¦%# PQSVWY¿ÀÂ÷øû¥qÿ’%s4TU%usŽ˜™š›œžŸ  >?@@HJŽ!U¶ŽNís2NOŽ}³—F—cX—n>cd—wÇ—z`p¿Á`s<>àsL`v›IF¿Áéëôö!“•/0129Éo§ÉwËIz I{1Rpc»¼ÄÅÆÏÐÑÒÔÕØÚëíîïñòóôöøùûýþÿ$,0BGHI^apqrstu˜šœž ¢£©ª®¯ÄÆÔÕÖרÙ02>?@z{‚ƒ„…†‡ˆ‰Š‹‘‘¯²³Òv¬Ryîòùú;&X;qñ»r,0oj„o““––„pǬ„r!_ 24ORUX´¶¼¾Áùú( 13y¨ Fùý'+7;=?ijklmnpqrstuwxyz{|~€ƒ„…†‡ˆÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèé"$&(,èiJKhpÁ•¨v¦(w¸hxÙhyù1+ RX¦Áùúñnc1qð±1r³1utqvEHñv¯1|sušožEIktvp¯ÚpدZuwšu~cSYÂû½ã"4´£n@#ooão©#vŠY£wÈLEÝä ¡¨Œn<fhpq–– p­Œs@BŒu{Lx×Ìz#% {(,>#2¼þ.ÅëöBC02:¾nLO\^ž>v“•>xÖ~yù>|t‡n;gipq‡o¡qè°‡qùýtZ‡tfv†‡{?Pzù Ka‹°¾É×’šypÅÂBnÂo§ÂsJ+ C+qï«qÿ†ˆ+t^+{/0´    2244EFFOORRRUUXXq´nB´u€4w¹4yì´z":µn?eqþfqôætmÏ HJÏ.±¼ÆÇÑÒÓÔÕèíîïðñòóøùûýþÿ%&')+-./013679;<=>?GHIJKLMN[\^_`abcijklmnpqrstuwxyz{|~€ƒ„…†‡ˆ˜™š›žŸ ¢£¤§©ª«¬®¯°±¸¹»½ÄÅÆÇÈÉÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàæçèé "#$%&'(*,>?@‚ƒ„…†ˆŠ‹¬®°±³Ïo¨ÏpÔþÏtkXp¼iqØz#!qî¡r&¡xÞ!}n Dÿÿßf DÿÿÌ4 Dÿÿ„Œ Dÿÿ ¨Ž @ÿÿѼ @ÿÿxŒ³ @ÿÿ huŽ @ÿÿ .fœ @ÿÿ**Œ @ÿÿ))“Ž @ÿÿ''ð Dÿÿ"'@0 ##@0 $$5@0 %%S@0 &&¬ @ÿÿ,,  *żμۼHÀÀ7n*ÀÀ"¡ì¼XoÔ('À*Ô(*Ô(8À/·T8‡Ž%»À‡ $inory…¶¿Ç{‚‹ÀU€™U“ÉŽ–½¾ËÍÒT¼’_’¡£¥¸»Â²ŽƒU““Ž'.•³i‚¬Tm‚Tc¥|eimÄŽ •±³¶¶»¼¿¿ÀÁÆŒ)˜™šŸ¡¤œ*€¸¬ ,18>COQUW[]_¼y¶E’½?˜TkmmntýT &”¡¦¸¼¼ÁÃU“¡®¸¹Ž.±­Ž6i{>§ÐŽN…‡¦TmU26<AFGHIJKLMRSa£NU>CW[]ÆUŠ‹ÖŽ–´ÊÎ{€…‡ŠÖ|‚‡o#y„³¶¿/U1OQU_r œžŸ¤¦¾¿ÀÂÊËß}ƒ„hU¡¸èX”hcÀ¨Žú^®¹n Dÿÿßf Dÿÿ„Œ DÿÿÌ4 Dÿÿ ¨Ž @ÿÿPÓ½ @ÿÿ3I© @ÿÿ11[‘@ÿÿ++T‘@ÿÿ**A‘@ÿÿ ))*żμۼXoXo***4Ç4 ƒ„Š‹ž«¬ÍÎÏ·TÅ×U÷Z[pV¹VbƒƒŠŠ’“««ºÎΙUf©1ˆ ‘^q{‚Vc°±µ¹ÁͲŽQqsš°±¢.sëNš¢¨UÀëWXY[‘+š§°±D"&.¬W{üWfµ¶”-$‘e´4‘hµ¹¼ÉÑT‘*||’“–—ýTgµºÆ­ŽQqs§&½3›©&3bcdf4’–°>…ŒŸ­ÑÒŽNš¢¨R“—±Uh½ÑNUÄÆ8TpzÞUq{‘aqsvx¢/UßVd„„‹‹–—žž¬¬ºÏÏr l{|}ˆ›©¾ÁÆÉ%ØO’–°hUµèXghcÉØf"¨ŽQH‘qe1A‘ Dÿÿb DÿÿW @ÿÿ~€hc @ÿÿclTc @ÿÿ LVÜb @ÿÿ &:Àb @ÿÿ  #§c@0 !!Âc@0 ""6c @ÿÿ@@"c @ÿÿ<<«b @ÿÿHœ¬°KoÅØHÅØèKo*‚âlD‚älœ‚§‚6÷Ri·T6÷TALc7\-—b—cvÀb $$&= cw©U8‰cruvw:@A2],"c<AëNyU(WTq~«b'()*+,-./012345678D:<>Z4¤bTcLdcNQTehkELc ])Õb"Aíb0þsvy®=&3>NeþK>ŽNyU'NU*Æ^/^bs6c@QhNcAŽcuÏMA/U2a.ÿb5ˆrxZ=>>>ARihccQ]+c7zcp³Y3£_1“bquv~¬W!>RiÜb&>'b DÿÿW@ÿÿb @ÿÿHœ¬°7Wb“bCb DÿÿNb DÿÿXb Dÿÿ##‡b @ÿÿnn|b @ÿÿmmIT @ÿÿkk™_ @ÿÿjjë^ @ÿÿii'S @ÿÿee1S @ÿÿdd8T @ÿÿbbdS @ÿÿ ``CS @ÿÿ ^^éR @ÿÿ \\ÞR @ÿÿ [[ÅR @ÿÿ YYºR @ÿÿXXÔS @ÿÿWWâS @ÿÿVVÊS @ÿÿUUžR @ÿÿSSR @ÿÿRReR @ÿÿQQWR @ÿÿPPGR @ÿÿOOQS @ÿÿHH‘S @ÿÿGGÀS @ÿÿFFob @ÿÿEE#T @ÿÿDDS @ÿÿCC¸Q @ÿÿBBT @ÿÿAAT @ÿÿ@@/T @ÿÿ ??¡S @ÿÿ!>>ýS @ÿÿ"==÷R @ÿÿ#<<­R @ÿÿ$;;wR @ÿÿ%::oS @ÿÿ&99S @ÿÿ'88ïS @ÿÿ(77S @ÿÿ)66ÑR @ÿÿ*55°S @ÿÿ+44R @ÿÿ,33™Z @ÿÿ.00$] @ÿÿ/**,] @ÿÿ0)))] @ÿÿ1((^b @ÿÿ2%%=b @ÿÿ3µ€½€Å€Í€Õ€Ý€å€í€õ€ý€ %-5=EMU\cfilor zux{~„‡õ)‰‹zG@~¸lºl CÑ+¸lºl C—74GROWRPwR:÷R<'SeTA‡bnS6°S4ÀSFéR\ITk™Z0)](™_jâSVë^ikb0R3dS`ÔSW$]*,])|bmeRQ­R;ÅRYSCýS==bö00žRSÞR[T@^b%RRoS9ïS7/T?obE¸QB8TbÑR51SdQSHS8‘SG¡S>ºRXÊSUCS^#TD)jú^¶ƒUfßf Dÿÿb‘ @ÿÿ7j3ëib‘l‘è~ DÿÿYY¥‘@ÿÿÒÕH‘@ÿÿÎÑ¢@ÿÿÊË× @ÿÿ ¨x’@0¢¢…’@0¥¥•’@0¦¦¢’@0§§¶‘@ÿÿˆˆA‘@ÿÿ„„[‘@ÿÿT‘@ÿÿqq5’ @ÿÿ®®÷ @ÿÿ­­ë @ÿÿ¬¬’ Dÿÿcc’ @ÿÿ"^^ê‘ @ÿÿ#MM}‘ @ÿÿ$*Å*Å?ÅWÅpÅÅ*Å*Å?ÅWÅpÅÅ*Å*Å?źÅKo*N*****Ô(ºl C C7ÞÅâÅæÅjB C('d--..//× ÐÔ÷­‡‘!%IŠÍG’ÊÎÒW’ÊÏÓ0’¦‰4"qH^A‘*44„²N#¢&00Êê‘KMÎÒk`gÙë¬[‘+55c’ÐÔD"#$¬W¢T‘)33q$’^$}‘•‘!/J¥‘(22Ò½‘-.Í‘./5’®ö--..®MîY§¶‘,66ˆÞ‘/0123456þ‘X’\acËÑÕ’]^`n’ÐÔO’ÊÎÒH‘'11Î(’¥ë“@ÿÿ|€Ü“@ÿÿwz“@ÿÿquë’ @ÿÿ kÿ“@0 %%”@0 &&)”@0 ''>”@0 ((S”@0 --o”@0 55ˆ”@  TW§”  !VVÅ”  "VVÛ”  #VV÷”@0$WW•@0%[[0•@0&ddM•@0'ee¼’@ÿÿ0©“ @ÿÿ1oo®’ @ÿÿ2     *ÅÆ?ÅWÅpÅÆ*Æ*ÅÆ?ÅWÅpÅÆ*Æ*ÅÆ?ÅWÅpÅoÆÆÆ•Æ***Ô(*Ô(ºl C CäÆ****ÅÆ?ÅWÅpÅoÆÆÇBÇ C ×sy~G’qw|O’qw|W’rx}“V'“V7“W_“gø’-A‘&Ù’[t“VQ“ey“h©“oB“d“q[‘%c’sy~ë’ uz€““ië“|T‘(¼’Ü“wÍ’te“gÕ“uz€¶‘'n’sy®’“5®’“5@– @ÿÿKK – @ÿÿ@@ – @ÿÿ??þ• @ÿÿ >>ó• @ÿÿ<<é• @ÿÿ::Ò• @ÿÿ88¿• @ÿÿ77Ø3 @ÿÿ 66¦• @ÿÿ"55i• @ÿÿ#ÉtdÇkÇÇŒÇkÇǔǜÇDzÇÇêÇñÇpøÇ²ÇÇêÇñÇpÈêÇñÇpkÇÇ9ÈøÇkÇÇ9ÈœÇ9È C!w•"Ø36–?? –@8–@@@–Ki•É•7<é•: –?Ê3,Ò•8â•89:;<=k)Û•89:;<=ó•<D#,´ 56799;;==>?@ÄO+´•67:<>>?@}•)M–KK® 56799;;==>?@ö-#æ3))†•*Ž•+¦•5®•556677þ•>¿3ÏK89:;<=¿•7©˜ Dÿÿn DÿÿÌ4 Dÿÿßf Dÿÿr– Dÿÿ**±– DÿÿDD¢ @ÿÿ\a†˜ Dÿÿ YYQ˜ @ YY¼’ @ÿÿ@R“ @ÿÿ`>Z— @ÿÿ é'4— @ÿÿ$˜åÍ– @ÿÿ%jj¶‘ @ÿÿ&ffA‘ @ÿÿ'``[‘ @ÿÿ([[T‘ @ÿÿ)LL¸— @ÿÿ*€€— @ÿÿ-ŒŒ – @ÿÿ.33‹– @ÿÿ0++*żWÈiȺŠC*żÈiȋȢȯȽÈÇ*żÈiȋȢȯȽÈÑÈ•ÆKożÈiȽÈÑÈáÈHÈÑÈÉ/É***Ô(<É7vÉzÉ7~ÉÌtkÇ4 !l‘ÛJ¹à'GO ©­´µ»½ÇÈÉÌÑ'Yêð""ùû'“û‡—0’¡£ïñP—²—bÏáófBJ˜cdiˆ‰ŽÓÔØBCG‡ˆŒ°±¶×ØÝ $ÙVä®êÙ’õ ùy“©¯³´µ  Ù–mmm™—bŸ íîBJÙ—ê  (y{˜cdiˆ‰ŽÓÔØBCG‡ˆŒ°±¶×ØÝ $¢]sB“ ›ãñ‹Œ“—ª­®»¼“aJ—}„……†²¶~ëN?$IWacdij†ˆ‰Ž”¾ÉÑÓÔØÙ @BCGHM…‡ˆŒ’®°±¶·¼ÕרÝÞã $%*ë’j™ëc‹–+$EIRW‚•»¾ÆÉý =M‚’ª¼Ñä+«— eg:}°ò6}¥ÌT‘LlÇ7z/[`¢É 8NN’4—™•¬] >ER_´»ÆÏöý½?nõ}dÇ‚™›œ©©¯¯³´µãããääëñññóõû    #celnnpqst||}}~€€ƒƒ‰‰ŠŠ‹‹ŒŒŽ““””•––——œžž¦¦¨ªª««¬­­®®¯±·»»¼¼ÅÇÇÎÎÏâãäîôôö%(()*17ATYqqsyzz„–™™šžž­®·¼¿ÇÇÊÊßàáéíîù-//24Q[[``ggiƒ“––—¢ÂÂÈÉÉÓåèèììöþ   /889=— œ»»½½ÀÇÈÉÑØÙÚ&3"®ólƒÏáèÿ.gŒŸ®Öð&EqŠš´Ûíö"9__f4­>¥“-óƒƒÎîôôö((qq™™žž®¼¿ÇÊßéí-/`ggi––ÂÂèèììöþ  9¦•+f–#&—„…‰Œf˜mƒƒ…r „†ŠŽ’™Ÿ¡¢ØO ÷(q™ži–ÂèìxZçóóóô÷ú%fffgiltØfø’nt¸—|€œÃA‘`eHH¡—cã­CK!˜ eŠÔCˆ²Ù A˜ jÙH·Þ%a˜dÊ3(Êfj–$š–/ê–u *—…†‰ŒZ—êr““‚©¯ #}Ó—éü 'n{s˜qƒ…ü3ÁÄÄÄÆÇÇÈÉÉÒÕÕÕרØÙÚÚ¬W óô÷GKUZfgi¬¾œg²¼’A_Ì—!èúÿ.6GKUZswš¡££¦&lqt𡬾Æïññôì— ER‚»Æý<‚ªÑõhôge“{€¥{˜ciˆŽÓØBG‡Œ°¶×Ý$ŽN $IW”¾É M’¼ã*îYsš£¦ñô.—„†×bçè%&B7“ûŽÅw—ëõcsCK÷— a†Ñ@…®Õ@O›»½ÀÆÇÇÈÉÉרÚÝ –23 ‘ìóóû0 *ffmuœîÒ3++ÒT¦’_EJQ²ŽN™ÆÇÇÈרØÙê ar||€€•¦¬ÇÎÏâãä%%AGKTTYYz„„––­·¼¿ÇÇÊÊþ >N[ƒƒ““¬¾ÉÓÓåå,8AJ]_js¡[‘N[ãäñnpq||}~€€‰Š‹Œ”–—œž¦¦¨«®±·¼ÇÎÏâãä%)1ATYyz„–­·ÇÊàî24[ƒ“—ÈÉÓå8GGMMqq ¡—‰ŒÉÚD $(/D—žÆÈ×ÙÄ—æîîîîôö27$```agi¢Téêðþ >NQSUV,/13<lstw†™­Žê airœ¦¯±·y4ÈAJ]_js  –.<DQ^²ºÅÎôü 9§ÎÍ–jGHKMNOm—êùüþ&afrrä›®êRé0AJ]_¶‘ f*sšáQ/OOö–v 6˜ gŒÖEŠ´Û"“Ž_“'.q¥{<DQ^²ºÅÎôü 9§ÎVVß—ëû0)muœ¨W ÀÄÌÑÕݨŽj(’6w¡ÆH—­®²¶è—+!=ERgl€‚Œ‘³»ÆÖÛõý:<EJ€‚Ѝª´¹ÏÑÛà"'“ÅQ“œãäñ‰Š“”–žª«­¯»Q˜WY`UW^©˜ Dÿÿ±– Dÿÿn Dÿÿë“ @ÿÿIP¥‘ @ÿÿ@GÜ“ @ÿÿ29H‘ @ÿÿ*0*żȤɸÉÓÉÑÈ*Æ*żWȤɸÉÓÉÅ*żȤɸÉÓÉÑÈ*Æ*żWȤɸÉÓÉÅ#×,4CKa—˜+.37BEJNØf¨ŽXH‘+l‰4# ‘`mta˜S²NUÊf²Ž +.37AEJNXl¦¢ê‘+A“7N[‘__¢¥¦ë’5Lë“Js˜_„†D#U¬WtT‘uv“—¼’.EÜ“3TZlnq‡ž}d58LO­Ž +.37AEJNXl¢¥¥‘A&3&'>ªÞ ,.47CEKNamtþ‘"f˜[„„†r tvw…‡‹“—ž¤¦§_“Ÿ˜,/47CFKNè~ DÿÿYY¥‘@ÿÿÒÕH‘@ÿÿÎÑ¢@ÿÿÊË× @ÿÿ ¨x’@0¢¢…’@0¥¥•’@0¦¦¢’@0§§¶‘@ÿÿˆˆA‘@ÿÿ„„[‘@ÿÿT‘@ÿÿqq5’ @ÿÿ®®÷ @ÿÿ­­ë @ÿÿ¬¬’ Dÿÿcc’ @ÿÿ"^^ê‘ @ÿÿ#MM}‘ @ÿÿ$*Å*Å?ÅWÅpÅÅ*Å*Å?ÅWÅpÅÅ*Å*Å?źÅKo*N*****Ô(ºl C C7ÞÅâÅæÅjB C('d--..//× ÐÔ÷­‡‘!%IŠÍG’ÊÎÒW’ÊÏÓ0’¦‰4"qH^A‘*44„²N#¢&00Êê‘KMÎÒk`gÙë¬[‘+55c’ÐÔD"#$¬W¢T‘)33q$’^$}‘•‘!/J¥‘(22Ò½‘-.Í‘./5’®ö--..®MîY§¶‘,66ˆÞ‘/0123456þ‘X’\acËÑÕ’]^`n’ÐÔO’ÊÎÒH‘'11Î(’¥ nnŒ@0&¢ ooŒ@0&£ pp3Œ@0&¤ qqE @ÿÿ¥ ,,™U @ÿÿ¦ vví[ @ÿÿ§ ccV[ @ÿÿ¨ bb†[ @ÿÿ© aaš[ @ÿÿª ``¾[ @ÿÿ« __­[ @ÿÿ¬ ^^\ @ÿÿ­ ]]×[ @ÿÿ® \\*\ @ÿÿ¯ [[\ @ÿÿ° ZZu[ @ÿÿ± YYd[ @ÿÿ² XX@[ @ÿÿ³ SS[ @ÿÿ´ RR$[ @ÿÿµ QQåZ @ÿÿ¶ PPüZ @ÿÿ· OODf @ÿÿ¸ JJcf @ÿÿ¹ IIôŠ @ÿÿº HHSf @ÿÿ» GG©U @ÿÿ¼ BBc @ÿÿ½ AA·T @ÿÿ¾ @@ÿb @ÿÿ¿ ??Z @ÿÿÀ >>³Y @ÿÿÁ ==/U @ÿÿ <<£_ @ÿÿà ;;íb @ÿÿÄ ::Æ^ @ÿÿÅ 99a @ÿÿÆ 887\ @ÿÿÇ 772] @ÿÿÈ 66Q] @ÿÿÉ 55NU @ÿÿÊ 44 ] @ÿÿË 33U @ÿÿÌ 22U @ÿÿÍ 11èX @ÿÿÎ ''„ @ÿÿÏ %%e @ÿÿÐ „ @ÿÿÑ !"#'()*+,-HÏy‚y•yáykX•|3x„w~Îm•|3xú|!y8}E}R}HªxÃx xÏxÜxÎm•|3xú|!y8}Ï}R}Hªx_y xÏxÜx*•|3xÜ}ì}HÅgEKoÅgEKo¯ƒ`HKoÞz‡„M²ÎmZz´u\~j~n²ÎmÞzôz{{Ÿ²ÎmÞzôzá²Îmºw„{•{{¶{Á{³Îm||„{•{ƒmI³Îmôz„{•{ƒm‡³Îmºw´uÌw„w×w·³Îmºw´u·„ï³Îm¤~´u³~„w´Îmê~´uþ~•{G´Îmì„„…M²Îm|{´ÎmÞzizôz´Hâ„ì„´u…Ä´Îm¬…ñmƒmô´Îm7mQmlmƒmšmÎmÛmñmƒm,µWµÔ(*Ü}.opµÔ(*Ü}*‡µ‡µ‡µ*™µžµ£µ¨µ­µ²µ·µ¼µÁµÆµ‚«ËµÐµ}«Õµs«x«Úµ@~¸lºl Cr zux{~„‡õ)‰‹zG@~¸lºl C Cߵߵãµ7’ÇWoÇ\ G]nV‰yU†9‹c‚V‰Âe–kÜ”ZqTcÁ4fôŠHýT‡Š¥ªWlz‹\=‹jopq&3v†[aÆ^9/U<ÏX¢ï`µa8\Z˜^Òx_¤¸`‘8fa\¯\ÆA^ÌÓe eŒ¡eŒ!‹]*\[³Y=SfGüZOE,†‰Œ‘”–˜›ž ¤§¬±´·¿ÁËÒåZP…\Åå`µ%‹^U1NU4.^Ë®e–·T@÷T¿Á×[\7\7×\’ž ¤¬²´×]‘Wa˜·f»€YÈÍ@[S „©UBI^ÍÔ ‹O)‹_2]6Ò]›·ra™œU2YÙÛ_§ûP„%Z>$[Qd[X\]DfJ€QU†‘±´º­[^í[c ]3íb: ‹R-‹`M‹x~66ZÏV[b–\Ö6`¬–fž_rt·ŸVŠYÙß\¡¤©­ÿ_¨ÿb?fhU†¨W ™œ¡¤©­Æ×ÙèX'ˆYÅÉËÐÒÖ¨`›ha˜hc¿±WpqYÈ[RQ]5Q`®q`±cAñd½‘e~Œ‹X1‹aš[`ú^”šfºƒUt†‘’”–˜›ž ¤§¬±²´´ºCZÏÔ£_;cfIãZ¬Wky˜›ž ·ŒYÅÉËÐÒÖÌ`´ìa·u[Yõ_”–§õa¸‹Y5‹bþÈÌÏÓ¾[_^`¯Þa·Þd½~fžpV‰ðS™Uv‹[¢Wm{ YÙ°¶£/O2/I../../lib/FD/EHsc/MT/FoDebug\\/FdDebug\vc80.pdb/nologo/c/TP/errorReport:prompt/DSIZEOF_UNSIGNED_LONG_INT=4/DSIZEOF_UNSIGNED_INT=4/D_M_X86_M_X86”ž/ACWDc:\libtasn1\windows\libtasn1\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"23C:\libtasn1\windows\c:\libtasn1\windows\libtasn1\ºpô ½n/O2/I..\..\lib/FD/EHsc/MT/FoDebug\\/FdDebug\vc80.pdb/nologo/c/TP/errorReport:prompt/D_M_X86_M_X86 “ºŸ/ACWDc:\libtasn1\windows\test-tree\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"2¼4C:\libtasn1\windows\c:\libtasn1\windows\test-tree\ؽ8÷ ½n/O2/I..\..\lib/FD/EHsc/MT/FoDebug\\/FdDebug\vc80.pdb/nologo/c/TP/errorReport:prompt/D_M_X86_M_X86 ¾¡/ACWDc:\libtasn1\windows\test-parser\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"¬¿6C:\libtasn1\windows\c:\libtasn1\windows\test-parser\PÀØqY ½n/O2/I..\..\lib/FD/EHsc/MT/FoDebug\\/FdDebug\vc80.pdb/nologo/c/TP/errorReport:prompt/D_M_X86_M_X86 ƒÀ¡/ACWDc:\libtasn1\windows\asn1-parser\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"$Â6C:\libtasn1\windows\c:\libtasn1\windows\asn1-parser\÷Âjb>ºU/O2/FD/EHsc/MT/Fo\\/Fd\vc80.pdb/nologo/c/TP/errorReport:prompt/D_M_X86X86 Ü/ACWDc:\libtasn1\windows\gnulib\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"¼Ä1C:\libtasn1\windows\c:\libtasn1\windows\gnulib\++ +eÁ+ê0 ÑDÿÿ˜™š ›_$¸»ÜÞàâæèëíïñõ÷üþþ !.4JLVfimpæ+-FHTOT\^cþèôú ,6;?JO“©ª¬r’  § ª |A”&3Cÿÿ"248@BF»®ðÌ5”&3Cÿÿ:•7$&(+246<Œ§­²´¼¾ÆÍÛÞæèîðöøþ ,.248:CEJLMOWYZ_lnvy‚†‘˜š›Ÿ¤¦¬®¼¾ÄËÎÐÖÙáèêïðòúü "(*@JMORTóGKÛÝáãçéíòûî±®”&3Cÿÿ:âæ÷ÂÍÏ•(ì”&3Cÿÿ• *,029;CEGQVbjyy……ÃE9cï ”&3CÖ("# #_&,8;=?lvŸ¡¦©Üàâèøüþ)/69;DPX[my…‡¥¯°¼6K—šž ¹ÄÅÑÕØõøüþ%(F#"q”&3Cÿÿ #NUXZh…PuDê¦Dÿÿ !iuFU ¨ =   !šøvX¨ =! !#za× ¦D ÿÿ !>z‘D   !›B~-¤úÈýC ÿÿ !mrm€ tD;ëC p}†€cD ÿÿ   ™Ÿ€5366D   ˜¬‚ 1¦îCÿÿƒ$WŸúÈýCÿÿ  6ƒ¦îCÿÿ  "k„:¶úÈýCÿÿ !"(†ÌýCÿÿI†?ÆýCÿÿ "$&(*,-/c†Å ”&3C ÿÿ$"#( " !'[]adhj’ÇÊÎÐãæêìNQUW]‘gt~ ”&3C Dþ("#) !KNadz|‹Ž”—°²¾ÀÉË×ÙÝàäæ’”ðô  DGSWbmy|˜¡¤¨ª›‘ 1ã”&3C ÿÿþ57¦{ZÞ”&3C ÿÿ %Y*Y #%-/=?»ÊÏÒØ";;VmrŸ«[ Ñü¦D ÿÿ"##" $º« ;”&3C ÿÿ" "()+.138:Aü«d“”&3C n # *04:?ACFHKMRT[bilrÇÉãæ9¬ @”&3C ÿÿ,̬ $â”&3C ÿÿ Rëµ'Ÿ²?ÿÿ f¼$!Ñ6ëC &!"#$Êÿÿÿÿ⿵6ëC"ÿÿ Z ±i"D#ÿÿ !#%'-/8AT_prz~íÄ*âýC$ÿÿÅ$nŠ"D%ÿÿY!7JL`bêÅ2;Š"D()(DgjKÇ #\Š"D(ÿÿ(*"$).?È0Gx#D(ÿÿ*'*&D!#%').0moq‹¥¹${#<?DHQV^n“²µº½ÅÈÎÝô÷üÿ 9L‘§»Îâ)VXd¨‹ÉŠ"D)ÿÿ*&"$&(S­üÉ$nŠ"D(ÿÿY()!7JL`b* ‚@(@ €    @( @€9¬?È(f¼ k„m€ †€•(Ÿ€̬íÄ$Å%Pu]‘iu‹É)›‘ÃEêÅ&ëµüÉ*F¦#z (†>z B~ I†ZÂ#c†e|¬‚»øv ûƒ6ƒKÇ'Ÿ«º«â¿"ü«!Ø‹–Æ9÷9iY<`<› )‰ºëƒN4Õ=v/—Ï IÃ…ë Y!ã"Ž!>#Ã!ø!-"b"ˆ"®"l#Û#­+$I$;&k&q$œ$ž&Î&Ä$'.'ï$%^'‹'B%j%•%½%è%&»'ä'£,(*?*9(e(>,o,Ž(s*¡*º(ã(Ò*+)8)d))¹)â)x ¾i «Œ¿"¨“A5îlSõªŠ{%ÔN<Új šÆp­]–Cnáçz˜d¥£.@UÃÅ^xG‡!I_1ÿ ƒ¼'nóï.Á¥ NõØÓ¤Þēއ ¦ cvðøÑ +<ª“ é G`Öá¹ '‘QÃÑ™;å… Ž r¨[ê‘’Ë0‡ Á bî $x ± TÜ p ¨ <Ñ ¹!E]½ Ô  Þ | S ƒ ÷ ® N  Å Æ j = p ã – =  _ . d 3 ö YoQoeé‚Ò‚ - :Ù9:ÁC–©ó  s $ ­ P M Ït K ô ( É œáŠ _ < < ¶^ 7 Ü  ¶ ‡ 2  ^tðá¢^àT+1+h+·Þ¸‰yÓ;î; % †[ù'†–yg<kk›[>—0C>CYC›C³CxC‰C€îÙ ©Qã]!Z÷Y0XiŒ"VùU\ZJX¼]š]ÙTçVVTVÕ^^§Xf=V©^÷]ìWÞWedSU_2RØQe^_·WR^yX’¤ZAUXd€RÂYJ\ª\vŒÌWÍU÷QÉQçQ"RŠ^|^pdEYœYêeãU–mY‚ÁEÜEýE®>õEFV@^@È>Õ>ìEFEHô?i?Q? :1ƒ8…@ ç«=Íi±i>l>>Ý>u çB—>N 1=rz9-9+3ˆ9C¤h€ðVgÈNÁƒFå·gBæ=5/:F,‚xGˆDd»Ó¬i¥ ¹ ¥†š†‰‡~‡%€@EÎ…È„¹„´†r‡È9ù8¤;ï…³?°ExE%Xw<Õ>3>˜|„pÈE¶E¢p§||½px{NvJp¬rnápXpq¿<do{ou+t uu|1q‡{`v¶|Ä|“q‡qÔ|¹qð|`pâ|Ãq}^E$xsw0x>x}—zŠzÖEÎEµ…¼;Ø…V3´<S;é<=ïrŠ< tï:ø…†8=P=$=ž<$|>|áqë’©“}‘Z—®’¼’“ë“Ü“ï‡úqÖ{^|¨vŸvچΆž‡’‡ÿš66Ä6·6î6å6:@+@äDÐDu6j6{&a5Bn 5gñy.…P‰m„ðˆ¬„„3R;en€nøopÂoÏoéoÜo§oppµoÕ€V€Kƒ—ƒŒƒ4€C€‡€û€…‚|€è€Â€¯€i€&‚‘e‚ó‚݂ƂÐP‚»;‚‚ü¦æ›€%@@åCÝC¤99K9€i•Wa-Q-ó†ä†·‡¨‡€|“9ÁF*F¸@«@óCëCSF1F1:&:µ:E::::Ò@•A‡AÛ@å@ñ@ü@.A+jggˆg¢‰Y‡Î‡O‡Ä‡"† Tn*g:g[nä„Õ„{FÚ8È8==N:m:^:¾nWrlv–<r¹t6tÃtÏtT9Nܾ:1|N|¦F¹F1rÈ{o|¯v±&C|:’rÃFÉFÑF×F²r§r0sšunt¦uÜvÎx¼wÛxGßF+>®;K3ÆAÑ<4;Ür‡tÐ:2HÊrˆ fHÃêstêuÞusÐukss`sts\w yAwúxØzðzÌzâzÒG GZu@teuMuVsJsJo4‡oh,h*‡‡ÿg˜hŒh ‡hh7hAhÍháhÃhÕhMhWhýhichnh(iiAi½g³g>‡3‡éAh@z@úA†@‘@ B|]€i”iviˆi¦i1Ghy(wwx0z£w…x“xRyÁz´zá;ù;-ok-ép±-G‡öÚ‡ 0 †Q…?o)2=F±‚œ‚á 6p0†k‡£6Í6÷6M@B@÷DìD}64DB;BDùC!}–{|r‹|ºX%uKt1u?uLxŠwYxhxÛtWtætótt´uztÁu^zjzÉwêxôstvvsøugw&yNwy€ubtŒuru~y4w¡xD€<"{5{+{I{={>vUGIDRDF=^=0=mG`GÈnG«<S{×wwâwïw–GŸG[{Œ:{ {¸GªGÒGÄG#vÌCCGzˆnˆ/jˆ„ˆDIzˆo{d{¦D¬D´DEEºDÂDÈD>O>'g‘Î2^ŽZ1Ž‚¦· ŽtGEŽå!ŽúRŽP=Åa>†w†ec‘e6ZÞdåZ$[[@[üZ¸`®eú^Ç\x_Û_6`Q]ÿb©U ]£_q`Ì`Ušf7\˜^–\.^…\NU YZ³Y·T~fqYpVhUDfSfôŠcffÞa¨`EU/U\d[†[Æ^¾[í[íbu[V[š[×[\*\­[ƒU™U2]aWaç©>¾>Ð> –Æ – –(-Zr;?ï>MnœÿBm5°5§5Rppyp±‰®†I…¦…CSeRITÔS8T|bRÅR1SžRÞRéRë^âSWR‡b™_dSÊSºRGR'S¼o‰g‰¹‰¿•ó•J”ÀfµÏ„Ø3^‰—?9é•$]ŠHÌo<¬TæE3îÜbbYàX4—Ö_>»8®8£ÆUd}Hpªp¯p¶p¦Tn}ÇpÔpGv‘v6;ŒœªoÚp?dw}ÀU#oq·_toŽN!q+q€};qYv˜vAqTqÇ4fq\qö€qwq¥qq³q¶v¿vÍq‚zxz”HØèÔqÙq½?Í?¢Í–H‘¥‘õqîq¦•@–‰}kvqv~‰u‰½ñ¬û³„=bî5æ5Eþ‚Í€N€¡ƒ¹ƒ±ƒÊTó€z‚t€à€º€§€a€‚ˆq‚\‚½‚ÇG‚²2‚‚óÜ’€™HuT~TÓnÜnV>z£-i.ž@&96c«bÀb"c „Tchceo)d5d16?6/-‘‰…‰6 6©-žH¨Žf4èX^b„›X»9¹5¾@~A8A AIŒ£gsg/`àV“g«gZõgœg›‰Ò•ë_=‹¸—&3í\Yë„a3½Hð8T‘A‘[‘×ü5’¶‘É_J}h¢d·d—FQ˜rr6--a·a‘ar$r£H,rŽ}zv€vK?C?¡A¬9³CTr[r÷R‹r,]“}U7+½_¡r™r€5v5ûno oŸÃr»rÍ5Ä5 L7]Y,YÿssÖACs:sM‹ëNšo oc RÎgÙVÒTòi$hRÅg{hëib‘Ê;°h‡úiØOjdëhõhdi jãgëgj1i9ij!jIiPiâAhi_ióAB(jžiªH—zw¬z¢zuHHS}+B}-Á\}Ž“Žþ•×,¨.î,¬‰»‰]…7o–sŒs§sžs©ƒ…!¨‚“‚z/TSS#TR­R¸Q‘S™ZQS°SobÑRÀS¡SoSïSýSTT÷RwRSˉe‡Š5ö5NI66¯Hk °T‰v,„r)]Ö5Ј©®s·sçvñvÂsÊsàsÔs—c%s"zwývwQjHjXj_jçkojfjvjXlYˆfl›l~jl¡j—j©j»j±jnl…jjwlÃjËjl†lÓjÚj DêjájDÄB˜B+D”l_lÔkTBKB•3vŽÊvÒv{üz®3`NOKOÇNwM]M•KºM "MEMÑK³£ßLèLQ¸NOMWMN1MŠMe»MCLÀ4÷3¤OKL¢NSN0{·4°OL¹\LcLlLRLþLòL=MàM)ÕLÚL­M NŸ3¶4¡4ÁK4§K*MÙáM MùMËÏÛ‹L›L©HŽ/vLï3– Š­÷.ì¯Uÿð£üÇ3ÿÕÏþóù=–»§µ{}ç.ÞÛêé|¯E¿bÝ~¬úËPmž?®û¸ðàgÿ1s_Xã`ü8ó!¨Fàdo.bψ&¯/¾ò?¸…ž[›SÈ.þ?š¾íœ±a(Ícð¯gýùóü¿ÿø¹_•«~žWö=M6òhíù9þý¾ÕæŸ}¶Ú¥&wUÇèð“Ltä5šUññ>çݳ_áç¢Ãß®¼ÃñšmÒ ¹°riùö*YÙ—Ÿ«k9¿ÊkÞóÆã=øLœt‹ Ïg‡‰ý¼µŸ¯˜g9¿7Ê¥ç&ñ#uðfœPÂö–ç1¿Ô8â:ã0×_\‹7|bð—Ý?3öÈÀ×".Át9ã=>g逡oÒvƒÑèÊ'Ž~Œû¸¡ã+¬û8;1ä²/>c¶'þÙ“ÀHrJ»@j8’|tRq_V)ùðÁG¦žUžôÇøàóóò*ë‹­oü'¯ÒòÜ ï”vi|õJ>ã?U±éµ#¼L WoÜeÅ|Ž ;è/ŸN‰LžŽ.ûT063šâøï‘UX˜¢ÈÀÆCŽã5 ×Ó¤ hÄf‘s<>Ü„X%U4ÞŒK¹ÕI]\ºaS-zèåð—® .ZSÂ'2ü‚.8à ˜/8¢¬È'¸Jã¡’Z0.‹ˆªì }–"¶•ɉÑ"ƒYUÒèbŒdÜG•'žÇOcƒ÷·ù†îìãᬠ7¾*Þ˜yê§|nà™ó†8z”MNÇÏ6ÇsØÑÁü`ª €€ ž@©À=[*Ž £@¸kÍ– (( ¿§@F)«@¦§ÄkÙ–(³@QZ(=V Êk¾¸@¤¤f 1+X[Y'¾@£Ôkê–(Ä@)½eW&ÜkTV0¼Î@F+oV%Ò@¢çkö–(Áxk=»Û@¡ïkT+W—(Eå@ pV#úkˆ$lSºñ@Ÿ‘#Þh+V—((Y&'?‚V#"ü@žl&—(" *—(e¹V#}+U¦! Aõm()l4— ((%.—(A&l² ŸV# =—(AŽ+{¸D—(» 1l‚ ªVH—('AÇž+>l½P—(·.Aœ¸V  ÐZ— ((– ª+­+S8Aš›ÄV Ü£¶ËVCAXl 1m—(æ«ÓV _l¼ÙV dŸ (w—(flóàV µ  ¹µYAnlGçV üÁ ‡—(wlÛ+fA—(‚8lÏ´nAå+™—(†l‚ê+vAd_eÛ1lW¡—(~A˜‚”lù+«—(çW³‡A–—&‚›líV²ñU±¤lW  ¸—((2‚•A” ,,üT°Ä—(;‚)W¡A“S¯·lÌ—(¦AG‚ R®Ó—(7WQ­Ù—(²AP‚Èl!P¬£ß—(¹AEW#O«\‚è—(ì—((NªÆA’e‚>,?,M©Ûl%WW$÷—(q‚6L¨ÖA‘ìl1ÅdW%>K§ÜAz‚ ˜(âA…‚  JJ¦éArW   ˜(m5RI¥˜(óAŽ “‚ YH¤o,>\G£úAç!˜(œ‚ m@cF¢BŒ W¨‚ ? B‹6˜(rE¡¼$mE±‚ W BzD ¢W   öA˜(CŸ ?½‚¨W  (5mM¬W  #%()*…Bž±W Æ‚Q˜(( +BŠ·WA£,GEmS”@œ2BÒ‚U!a˜()œ?›;Bˆ‰Ÿ>šÇW Ý‚Qf˜()£=™ÌW UmhDB†¬<˜KBƒé‚Ts˜()µ;—TB…ó‚P@_dÞW  hml[BÑ,†˜(Á:–þ‚ aBìW  ×,Æ9•ymyfB‚Ì8”ƒÐ7“—˜)rB„_ üW #Ø6’ƒj î,+Šm€Ÿ˜)|B X ©˜()"ƒè5‘›m„‹Bx-*1ƒi?ö4˜B€û3®mˆ%X -)Á˜ 2ŽL?ƒ£B0X  Eƒ -(¿m‹˜Kƒh  ³B/-%YƒÑm]ƒXJX  ÄB~A-¸ ÍB|}?äm¨I-6! "tƒÂ`X ;0ÛBzQ-$Ë jX ôm¬E  .  "· çB‰ƒa- #ŒƒSyX  R/n  "#()à k-;—ƒR_  % ÿByë  áƒO h.C‘X }-©ƒNo-"Cù†-›X±ƒMCvz,-¹ƒL§XC„X Àƒ™-&Cu£-Bnf’ #+0Ctσ©-׃Mne±-:)__>CsTnd ÏX [ncª*4èƒÃ-NC샳enbòƒàX Ì-»ŒYCrIèX W  "#rn`Ø-„Ë‹€n" „[blpCæ-‡nÙ"xCqY ð-„Œnico‘ná‰ö-' Y  „Z —ný-‰Cpn+„{.Y  £nõY‚¬n.›Coþ 'Y (   ´n,Y Š.¾n_—ˆ$.³CnÈn^/.EYÓn]"²Ün\SYÌC/!C.m„ ]Yçn<x„ÆÝClmÊñnV.„ÏåCjH qY  ûn[ ëChi?ØŒ„oZÝT@óCfßi.€Y ùCdeo.]ç oYˆY  „DbîŒY  oXôk %'* Da”Y .ù¬„#oWD`ýœY †.w ³„.-oVD_¹„€ ”.!D^«Y7oU›.³YJ  È„+D]Ž?oTÏ„¨.3D\!Jo7Õ„ÂY %œ(>DW¶..Yo ä„©ID[ÕYë„;doQÛYRDYZ?ñ„¶‡áYD  #%'()*Ï.9F¿]DéYtoNîY %(*{oRòY VÍ á.mD÷Y „o]Ô‡oMZI €DšoPˆDþ.8@ oO Z¡.…c~§oL!Z 8…b/¯oDVµoK-Z /7¦DU”¼oI…Y¬DT6Z  ÂoJ (/Q…a´DSÉo?CZ  ºDRÏoI]…O5/6KZ $ ÂDQ`…°ÖoÈDPg…TZA/ÜoH¹ãoÐDOn…\Z F/Á « éoGv…ÚDòo~…ÎäDN?øoF……Ó ÿoìDMØxZ (…zZ g/pE÷DL•… ppD…EKŠZ d ­Z pCEJ¦…`l”Z pq™Z/ EI&p‹/µ…J{¬¤ZEH0p6pBÃ…Nˆ(EG ¹ZÎ…_3EFJp# ÁZ Ø…I±/ (Rp@E.XpÐZ å…M4 LE`pï…^ÝZhp·ø…HGåZ? Ó/ ^EEppNyphE†LX „prE†]üZ@  xECDñ/ p †Gi €E–påŽ[= '†K@uE¢p|0†\”Eªp8†$[>  œEˆ ¯p¶p£EB†0  ½p›°EAÇp¶E?@@[<  Y†Ïp¾EÔp#®  %'*c†Úp*ÈE=´'V[1 ¹ÎE;<áp4p†K0 ÖE9Ãépw†DEd[; ÜE8òp†FäEÏÑûpJ‰†ìE7u[:  †q õE6”†â^q ýE5š†@Aë†[2 îfq}0F4¥†B÷ !q ®†>š[3 F3þw´†=+qF21qÀ†#F­[5 ;qdž*F1AqΆ;1F/0Gq¾[4 #°0Ú†<=FTq,ä†9\qIF×[7 :³ífqSF-ó†:nqF]FÁì‡8wqÿí[0 R?Ë ‡7€qä0qF] (l‡qþÖ_‡c \6 {F,Þg©“q‡56ƒFAÿÿÿÿèqývª*‡3\9 ¥qü1ö %*3‡12øë«q—Fïÿÿÿÿ†ÿêpažF³qû>‡/§*\8 ¹qú¦F+ éG‡.—¨7\P ®FÃqùO‡-)1è ¢Íqø¹F*Y‡, çªÔq÷¬¦J\ÃF)Ùqöe‡ÉF(.æáqõk‡+»¥ÑF']\r‡*L1×F&Äa\  îqóôe\>å ßF$%~‡'(õqñj\Fäo\ úqðÓ¤t\‰‡)rîìFQãz\ríôF’‡$\  rì "#()^âç…\   G"ž‡%x1rëk¨‡"rê< G –\   <$réráar,rèG!·‡#1rçª\„7r#Gć!‰à=r@£1£· 1G"¢7GÀ\›ß_dÚ‡=GÇ\ +¡TræCG⇨Þ[rå4 ×\ brï‡UGß\ Î1ºÝä\ orGû‡ç\`GNŸ|räó\ Ì܈mGø\ „rãÔÛý\aì1‹râÚÚ xG=ÿÿÿÿˆiž’rááÙˆ[ ] ] T  ™rÞëv¡ràðØGÿÿÿÿ-ˆ§rÝ–Gû×$]0 9ˆ2²rߟG)]2 ,]1 CˆÖ»rØ2]Q ªG—œÃrÜOˆÍde ÊrÛ¸GYˆ@32ª!ÌG] ×rÄGbˆQ]R ÜrÚ·›nˆÒG`]   <ïrÙR2zˆÞGËšEË„ˆ sÖ×ðGˆ Þ ™|] sº»q2]Õšˆ ‰] HsÓÔ¦ˆ mÔ÷š]  %sµ¶°ˆH20sÑÓ%H:sΰ] CsБ2H ˜¼]  —ÒJs͵2 @HVsÏEH ¨Ñ2Ò] KH`sÊ8×]  ðˆÉ2!VHks̹ÐC —ã] tsÉ`HÿˆÜ2"fH ʉsËmH[÷] ÓÏqH%*F‰uHŒsÇð2&h–^ H–sÈëžsÅÆŠH H §sÔH 3'ùΙH®sÁ‡žH?)^  ·sÀ£H.^  ªH Ê _Âs¿¯H&3Sÿÿÿÿÿÿÿÿ  #()!P‰ Éun+3Ês¾µH¤•A^  ȽHI^ Ôs¼^‰ $ÇÄH>3g‰R^ às½0ÆE3o‰K3ês¸u‰Ä<Åe^ V3ôs·C ~‰@Ï…‰a3 ÿs³TÄt±j3$‘‰l3|^  n3úH›‰t°bÃw3Š^  ¢‰{3ð”t¯pÂI†3¬‰@˜^  ±‰ZxÁ+t®3¹‰©^ 6t­#I‰‡ÀŸ3†@t¬ˉ@–¿Ò‰¿^ Kt«®3…œ¾4²3Æ^N +“Wtª ©½å‰ ¿3'Õ^ bt©Ê3'(¶¼XI#nt¨ø‰Ò3(Jë^ Ø3''N’zt§Èá3lI.Ï» Šæ3'\ú^   "#‡t¦ï3„õ3áº÷3ƒI:Šü3(_ þ3w t¥ŽI>ó¹  41Š&€‘IB'_  ¸¹t¤4‚CŠ0“0_ ·¬IXÃt£<_ *4  ¶UŠ4D_ Ït¢§¾Ic«;4( µÛt¡²gŠ?¶O_ U_ ÎIgæt À7 ´ybÅQ4yŠCÝIkÈótŸX4]4K ³užìI{ŠŠPx_   f4w#(lßm4 u•ŠQ_ ²u4Š_  J ŠR_ uœ’_  "(4ù¬ŠS™_ %u›s ±‰4%)*J‡£_L 4¸ŠT1uš Œ#J•‡ °ÊU4¡4€?u™·_ ¯‹ÏŠV½_ 8J™Mu– ®ÛŠW+5É_ ·4~Zu˜3ŠçŠXÀ4}­ ­ JJ¥Ö_ Ç4x#("eu—Û_   Ì4  "#(ôŠC YJµE4½ ¬ru“N‰Å «hJ¹ ‹€u•õ_  ‹Ô ª‹a3ÿ_ ‹Œu”xJÒ‹‹kã © ` !‹šu’%‹)‹` -‹|ˆ¦u‘1‹ 58÷ ¨ep5‹!` 9‹=‹& ´u5Ž2)` ¤Jù5/`¶  §•1"5Áu 6`   M‹  žµJúÐuŒ ¦_‹!°Q` ÞuŽ·ÌJü»,3 ¥^`  êuÂw‹"d` = ¤ÝJýøu‰q`   Õ‡a5"N £ñJÿ‹#v‹m5!æ0_ ¢v5 vŠKî /Œ` j ¡€5¨‹'ö†#v8œ` Š5K|  ¤`  .”53v?¾‹(¨`    ö˜58v'K …>vˆŽ Ÿ¸`  §5Gv‡Ô‹)› ž°5Nv†;K% -Ì`   ¹50 „Yv…¨ `v„LKÄ5± œë‹*@ ƒÍ5kv<ƒå` qv‚Á ›Ö5aK N ‚ï` zv;€Œ+à5€v~Ñ šú` æ5oK ‰v}î5a Ü ™|K ‘v|Œ,k ö5˜v{aO  u €ÿ5Ÿvyzî ˜‰K 6€ ¨vw•K3Œ-† $a 6¯vv —_pK¶vu-a ¢K6§K| –¿vt6a IŒ%6OŒ=a @a Êvs¥ ~16»K •Òvr[ŒÁK{± ;6Üvq?6iŒ¹ }Wa   ÏK'2 ”deÑKzI6çvpØKvŒÆ < “ÛKñvoha T6àKÏ |<æK„Œ" #ÿÿÿÿra ývnM ’o(Ù {ya wmj6á z÷K„a úKr6wkl^ ‘ë yu6 þK L‘a }6 whiL†6›a t _p(wfŸa 6 L¨a L–64we­a š6 !Š *L·a £6 Awcd<0L!­67LNw`a'!Åa   Ž·6CLy0!\w^5!Óa À6KLxÄ6xL*MÎ 1Mn"– ‚Àb LxK9M&"±7-"tYxJEMmå Õb Á7® OMlÜb hxIWMkú ]MjÔ7íbM wxHÆ €fMS"kMä7[" Ž …xGÿbH b"swMiÞ ô7“xFM!Ž cF ŠMh¡xE8’M1Ž ö ~"c ˆ"r°xDMg8 }¤MEŽ ¿xC6c ­Mf'8RŽ  |ÎxBºMe^Ž ®"q98Nc ÃMÛxAÉMTc   "A8. {ÏM ÒMqŽ J8êx@ØMdc = zxŽ hc    "#T8àMX}Ž ‚Ž úx>Ô"^8‡Ž "ëMÜ"zc g8S yôM y?“Ž " "ã"pùMds8‰c Ž " "y<NcŽc |8i x)¨Ž  "# "#() Nb—c² …8­Ž "#()&y=²Ž "#()"N c x wŽ8N·Ž Na§c 4y˜8#‡ vÄŽ "*NÉŽ "£8#“ u2NÂc %#®87ÖŽ "=NRy>-#?¦ t»86⎠5#JNëŽ >#oÈ84hy;ßcTN¹ sñŽ äcúŽ ry`N`Ú8òc~y:öc  ä8Ñ rrN‰y9dð85dxl#n–y8ù83…Nd   é q) $ ŠNŽN    "#(¤y9 –N9®y'd%*9)d  p; 9 ¢N_9¨N5d ˜#&9#²N%)*R ?d-91o¸N^¨#LdÂN±#'n=9ÇN]i Xd»#H9K9×NÄ#<medñy T92Ë#ÝNâNÐ#pd\9‡"Ö#ëNN #(Œ ""Û#me9zQl}d()&òNdd zp9z‡d`kœ""ŒdOz9dz’d"z¬""†9œdˆ9þvj<³""$¢d,zO0z“9û¼""!O$|2·f¤; ‘RÍ‘%*1QÀf®;í:QN|1Êf()Þ‘%*FQ¼;ìªQ^|0LQê‘%*%)**Øf#();&fRQÊ;Žßf  "#$(XQo|/Ó;ë^Qþ‘%)*ÃPiQá;€|.’%*%*ÖOt tQ‹|-î;ê’%*%*zQk&L€Qù;˜|$’%*(’%(*<ðNQ0’%(*§|gÄ5’ % *%*<™Q Q*g¶|< M©QG’%&**%<:gÃÄ|ž&eO’%&*C¸QW’%&*L2<GgÁÔ|c’%&**ÉQ  @<VgÀâ|n’%&*5KL<ØQ x’%*ð|jgºÎ&KY<éçQ  …’%*sg`¹`<èNJ}zgg<çg¸÷Q•’%*o<ˆg·} w<梒%*R  « #“g´lI€<å R § !} ®’&&œg³(R. 'dŠ<â£g²0}¼’ (&&()j–<ä«g±"R  8}ŠH³g¯ž<á?@}Í’&E}2R½g°«<ãJ},Åg­®Ù’&(´<ÞS}+.'JÎg©ª¨GGR \} ¿<à×gë’&&()%Æ<d} ÝgWR ãg¤n}Ñ<ßø’&(ëg£w}ÆFeR Ü<“&(õg¢â<€}^'cé<Ø“&(ÿg ‰}wR ' ÚEŽ}hž“}€R “&(ù<™}h'“&(R  hœ=ÝõD«}_7“&($h›=מR ‹'I,hšB“&(=ÜÀ}b­R& C7h™$=ÖQ“&(Ah˜ºR 0=ÛÔ}g_“&()&8=Õ%BMh—ÅR e“&(Wh–»'bF=ÚÑR , ç}jch•P=Ôy“&(ÞR AAnh”ù}x^=ÙéR {h“h= ~´““&(÷R% ä'Hƒh]@S Œh‘x=~¹©“&&%ƒ=p?˜h’S+ ¢h=/~ÄS ƒ>(a“ (&&()j°hŒ'S =?~Ò“=1S »h«=Õ“&Ãh‰ŠP~Õ´=Ü“)&&)¥<CS Íh‡»=Õh…†9(Fë“)&&)c~òQS È=áhƒ¼;q~#Õ=Óëh‚ÿ“&dS ~~$õh~(oS( æ=Ó:ýh}”&‹~%e(`i|S) ™~&ý=iz{)”&ï9>Ñ "#()‘S iv§~' >>Ð?(iw>”&¡S # Ž(E>ϵ~(1icu>Î 89ibt°S-Æ~)S”&Ais1>IirÀS 8>Ö~*'7Piaq>>ÊS Wiº(_o” &ÔS  _ioè~%*O>ÍS>hipV>Ì?C6âS oi[>ˈ” &vimnb>ïS* U5€ikã(DýS$ ˆiijv>|>§” &”ign4T ! †>&zžifT  >¦ie1y —>#T )^‡3±i¿Å” &/T" ©>ÊH8T  ®>ÉÛ” &¶>¥2Íi¾¾>ÈIT ^x8)CÃ>È>ÇVTáilJ÷”&äiÐ>Æ\TèiÕ>ÅtKÃ1ëi_$jfTÝ>òi^lT‚wúi]•&uT d)]j\ï>Ä~T á0 j[ù>šIjZþ>T"()¢HT jY0•&—T  !jX™T ?ÿ/(jWŸT±G)B/j»¦T"?ºv¬Ta"c#?ÁuM•&°TÂ.Èt@jV·TG "#Ï2?HjTUÒs ;?ÃÙQjRÜr ÊT> i• ''ct.-¹)\Xj QC? ãÒT  ¦  "(çq_jPK?ÁÙTw•'Q?ÀfjNOð}•'ôpojLI,û†•'ÿovjKb?€Ž•'i?¿~jJ€nâ)A÷T …jI^+ýT  "#€jHy?€m¦• ''(?¾€—jFGU  V  "#®•'%€l´•'¡jDz*?UU #©jC4€F—?¨½*[¿•''ag›?±jAB=€É•'/UK "#¦?»j?C€E–)reÒ•''(eÃj >N€D³?¸Û•'AU  Ëj =V€gCâ•'½?¼ "(Ój<­(é•''sta€BNU S "#Ä?Új ;?*@i€fAó•''] áj9Í?º»êj:Ö?Ä't€@þ•''ñj67hU  "#|€e? –''ciâ?ýj8‡€d=ë?Ø&yU–'kó?’€<? –''ƒU  $  "#k23ù?s*Z›€c;U  "ó%k4§€:  @™U /  "#8–'¯€b9&k0@¶·@–''/k/º€8@©UE $€a7%@´:k.M–'¡*=+@³Í€6Dk-5@ÀU  "cÕ€`5:@²ÆU "Pk+f–(.#__ÍU B@±à€4 j–([k,è€_3r–(M@°dk*ó€2V@¯ lk(ãU Ò*Yû€^1^@®N"vk)‹–(( –(h@­0 ~k&'ùU ]/r@š–(ˆk$ –((z@¬.k"#n!un!-V †@«œk ±–)(+<)\,‘@ª ¦k2+"V °k$ÊC:\libtasn1\windows\libtasn1\libtasn1.vcproj/O2 /I "." /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/ACWD "c:\libtasn1\windows\libtasn1\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\libtasn1\c:\libtasn1\lib\asn1.cc:\program files\microsoft visual studio 8\vc\include\stddef.hc:\program files\microsoft visual studio 8\vc\include\crtdefs.hc:\program files\microsoft visual studio 8\vc\include\sal.hexpr__inner_fallthrough__inner_data_entrypoint()category__inner_control_entrypoint()__inner_blocksOn()resource__inner_callback__inner_override__inner_typefix()ctype__inner_checkReturn__pre __null__readableTo(sentinel(0))__inner_success()__deref_opt_inout_bcount_opt()size__deref_opt_inout_ecount_opt()__deref_opt_inout_opt__deref_opt_inout_bcount_opt() __pre __deref __nullterminated __post __deref __nullterminated__deref_opt_inout_ecount_opt() __pre __deref __nullterminated __post __deref __nullterminated__deref_opt_inout_opt __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_bcount_full_opt() __exceptthat __maybenull__deref_inout_ecount_full_opt() __exceptthat __maybenull__deref_inout_bcount_part_opt(,) __exceptthat __maybenulllength__deref_inout_ecount_part_opt(,) __exceptthat __maybenull__deref_inout_bcount_opt() __exceptthat __maybenull__deref_inout_ecount_opt() __exceptthat __maybenull__deref_inout_opt __exceptthat __maybenull__deref_opt_out_bcount_opt()__deref_opt_out_ecount_opt()__deref_opt_out_opt__deref_opt_out_bcount_opt() __post __deref __nullterminated__deref_opt_out_ecount_opt() __post __deref __nullterminated__post __deref __valid __refparam __exceptthat __maybenull __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull __post __deref __nullterminated__deref_out_bcount_full_opt() __exceptthat __maybenull__deref_out_ecount_full_opt() __exceptthat __maybenull__deref_out_bcount_part_opt(,) __exceptthat __maybenull__deref_out_ecount_part_opt(,) __exceptthat __maybenull__deref_out_bcount_opt() __exceptthat __maybenull__deref_out_ecount_opt() __exceptthat __maybenull__deref_out_opt __exceptthat __maybenull__deref_bcount_opt() __exceptthat __maybenull__deref_ecount_opt() __exceptthat __maybenull__deref_opt_inout_bcount()__deref_opt_inout_ecount()__deref_opt_inout__deref_opt_inout_bcount() __pre __deref __nullterminated __post __deref __nullterminated__deref_opt_inout_ecount() __pre __deref __nullterminated __post __deref __nullterminated__deref_opt_inout __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_bcount_full() __exceptthat __maybenull__deref_inout_ecount_full() __exceptthat __maybenull__deref_inout_bcount_part(,) __exceptthat __maybenull__deref_inout_ecount_part(,) __exceptthat __maybenull__deref_inout_bcount() __exceptthat __maybenull__deref_inout_ecount() __exceptthat __maybenull__deref_inout __exceptthat __maybenull__deref_out_bcount_full() __exceptthat __maybenull__deref_out_ecount_full() __exceptthat __maybenull__deref_out_bcount_part(,) __exceptthat __maybenull__deref_out_ecount_part(,) __exceptthat __maybenull__deref_out_bcount() __exceptthat __maybenull__deref_out_ecount() __exceptthat __maybenull__deref_opt_out __post __deref __nullterminated__deref_out __exceptthat __maybenull__deref_bcount() __exceptthat __maybenull__deref_ecount() __exceptthat __maybenull__deref_inout_bcount_opt()__deref_inout_ecount_opt()__deref_inout_opt__deref_inout_bcount_opt() __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_ecount_opt() __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_opt __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_bcount_full() __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_ecount_full() __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_bcount_part(,) __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_ecount_part(,) __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_bcount() __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_ecount() __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_out_bcount_opt()__deref_out_ecount_opt()__deref_out_opt__deref_out_bcount_opt() __post __deref __nullterminated__deref_out_ecount_opt() __post __deref __nullterminated__post __deref __valid __refparam __execeptthat __maybenull __post __deref __nullterminated__deref_out_bcount_full() __post __deref __exceptthat __maybenull__deref_out_ecount_full() __post __deref __exceptthat __maybenull__deref_out_bcount_part(,) __post __deref __exceptthat __maybenull__deref_out_ecount_part(,) __post __deref __exceptthat __maybenull__deref_out_bcount() __post __deref __exceptthat __maybenull__deref_out_ecount() __post __deref __exceptthat __maybenull__deref_out __post __deref __exceptthat __maybenull__deref_bcount() __post __deref __exceptthat __maybenull__deref_ecount() __post __deref __exceptthat __maybenull__deref_inout_ecount()__deref_inout__deref_inout_ecount() __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_bcount_part(,)__deref_inout_ecount_part(,)__deref_inout_bcount() __pre __deref __byte_readableTo() __post __deref __byte_readableTo()__deref_inout_ecount() __pre __deref __elem_readableTo() __post __deref __elem_readableTo()__deref_inout __pre __deref __byte_writableTo() __post __deref __byte_writableTo()__deref_inout __pre __deref __elem_writableTo() __post __deref __elem_writableTo()__deref_inout __pre __deref __nullterminated __post __deref __nullterminated__notnull __elem_readableTo(1) __pre __deref __valid __post __deref __valid __refparam__deref_out_ecount()__deref_out__deref_out_ecount() __post __deref __nullterminated__post __deref __valid __refparam __post __deref __nullterminated__deref_out_bcount_part(,)__deref_out_ecount_part(,)__deref_out_bcount() __post __deref __byte_readableTo()__deref_out_ecount() __post __deref __elem_readableTo()__deref_bcount() __post __deref __valid __refparam__deref_ecount() __post __deref __valid __refparam__deref_ecount(1) __post __deref __valid __refparam__ecount(1) __post __elem_readableTo(1) __post __deref __notnull __post __deref __byte_writableTo()__ecount(1) __post __elem_readableTo(1) __post __deref __notnull __post __deref __elem_writableTo()__inout_bcount_opt()__inout_ecount_opt()__inout_opt__inout_ecount_opt() __pre __nullterminated __post __nullterminated__inout_opt __pre __nullterminated __post __nullterminated__inout_bcount_full() __exceptthat __maybenull__inout_ecount_full() __exceptthat __maybenull__inout_bcount_part(,) __exceptthat __maybenull__inout_ecount_part(,) __exceptthat __maybenull__inout_bcount() __exceptthat __maybenull__inout_ecount() __exceptthat __maybenull__inout __exceptthat __maybenull__out_bcount_opt() __post __nullterminated__out_ecount_opt() __post __nullterminated__out_bcount_full_opt() __post __nullterminated__out_ecount_full_opt() __post __nullterminated__out_bcount_part_opt(,) __post __nullterminated__out_ecount_part_opt(,) __post __nullterminated__out_bcount_full() __exceptthat __maybenull__out_ecount_full() __exceptthat __maybenull__out_bcount_part(,) __exceptthat __maybenull__out_ecount_part(,) __exceptthat __maybenull__out_bcount() __exceptthat __maybenull__out_ecount() __exceptthat __maybenull__out __exceptthat __maybenull__in_bcount_opt()__in_ecount_opt()__in_opt__in_bcount_opt() __pre __nullterminated__in_ecount_opt() __pre __nullterminated__in_opt __pre __nullterminated__in_bcount() __exceptthat __maybenull__in_ecount() __exceptthat __maybenull__in __exceptthat __maybenull__bcount() __exceptthat __maybenull__ecount() __exceptthat __maybenull__inout_bcount()__inout_ecount()__inout__inout_bcount() __pre __nullterminated __post __nullterminated__inout_ecount() __pre __nullterminated __post __nullterminated__inout __pre __nullterminated __post __nullterminated__inout_bcount_part(,)__inout_ecount_part(,)__out_bcount_part(,) __pre __valid __pre __byte_readableTo()__out_ecount_part(,) __pre __valid __pre __elem_readableTo()__out_bcount() __pre __valid__out_ecount() __pre __valid__pre __valid __post __valid __refparam__bcount() __post __valid __refparam__ecount() __post __valid __refparam__post __valid __refparam __post __exceptthat __maybenull__post __valid __refparam __post__out_bcount_full() __post __nullterminated__out_ecount_full() __post __nullterminated__out_bcount_part(,) __post __nullterminated__out_ecount_part(,) __post __nullterminated__bcount() __post __valid __refparam __post __nullterminated__ecount() __post __valid __refparam __post __nullterminated__post __valid __refparam __post __nullterminated __exceptthat __maybenull__post __valid __refparam __post __nullterminated__out_bcount_part(,)__out_ecount_part(,)__out_bcount() __post __byte_readableTo()__out_ecount() __post __elem_readableTo()__ecount(1) __post __valid __refparam__in_bcount()__in_ecount()__in__in_bcount() __pre __nullterminated__in_ecount() __pre __nullterminated__in __pre __nullterminated__in __pre __byte_readableTo()__in __pre __elem_readableTo()__pre __valid __pre __deref __readonly__notnull __byte_writableTo()__notnull __elem_writableTo()extent__declspec(nothrow)c:\program files\microsoft visual studio 8\vc\include\vadefs.hchar *__w64 unsigned int(  = (va_list)0 )ap( *( *)(( += _INTSIZEOF()) - _INTSIZEOF()) )t(  = (va_list)_ADDRESSOF() + _INTSIZEOF() )v( (sizeof() + sizeof(int) - 1) & ~(sizeof(int) - 1) )n(__alignof())(sizeof())( &reinterpret_cast() )__w648struct threadlocaleinfostructintunsigned intunsigned long [6]LC_ID [6]wchar_t *int *threadlocaleinfostruct::__unnamed_0002_1 [6]lconv *unsigned short *const unsigned short *const unsigned char *__lc_time_data *struct tagLC_ID *struct tagLC_IDunsigned shortstruct localeinfo_struct *struct localeinfo_structpthreadlocinfopthreadmbcinfostruct threadmbcinfostruct *struct threadlocaleinfostruct *__time64_t__int64__w64 long__w64 intsize_t(void)x_CRT_INSECURE_DEPRECATE()  size_t __cdecl ( *,  ,   ,   );_DeclSpec_FuncName_SecureFuncName_SecureDstType_DstType_Dst_TType1_TArg1_TType2_TArg2_TType3_TArg3_CRT_INSECURE_DEPRECATE()  size_t __cdecl ( *,  ,   );_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , ...); _CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , va_list _Args);_ReturnType_ReturnPolicy_VFuncName_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , ...); _CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , va_list _Args);_CRT_INSECURE_DEPRECATE()   __cdecl ( * ,   , ...); _CRT_INSECURE_DEPRECATE()   __cdecl ( * ,   , va_list _Args);_SecureVFuncName_CRT_INSECURE_DEPRECATE()   __cdecl ( ,   ,  * );_HType1_HArg1_HType2_HArg2_CRT_INSECURE_DEPRECATE()   __cdecl ( ,  * ,   );_CRT_INSECURE_DEPRECATE()   __cdecl ( *,   ,   ,   ,  );_TType4_TArg4_CRT_INSECURE_DEPRECATE()   __cdecl ( *,   ,   ,   );_CRT_INSECURE_DEPRECATE()   __cdecl ( *,   ,   );_CRT_INSECURE_DEPRECATE()   __cdecl ( *,   );_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *);_CRT_INSECURE_DEPRECATE()   __cdecl ( *);_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( * ,   ,   , ...); _CRT_INSECURE_DEPRECATE()   __cdecl ( * ,   ,   , va_list _Args);_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *);_FunctionCall__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(, , _s, , , , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE_EX(, , _s, , , , , , , )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST_EX(, , , , _s, , _s, , , ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4_EX(, , , , _s, , , , ,  ,  ,  ,  ,  , )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX(, , , , _s, , , , ,  ,  ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(, , , , _s, , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_EX(, , , , _s, , , , )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_EX(, , , , _s, , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE_EX(, , _s, , , , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE_EX(, , _s, , , , , , , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX(, , , , , _s, , , , ,  ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX(, , , , _s, , _s, , , ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4_EX(, , , , _s, , , , ,  ,  ,  ,  ,  , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_EX(, , , , _s, , , , ,  ,  ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX(, , , , _s, , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(, , , , _s, , , , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_EX(, , , , _s, , )extern "C++" { template inline  __CRTDECL (__in const  *, __out_ecount_opt(_DriveSize)  (&_Drive)[_DriveSize], __out_ecount_opt(_DirSize)  (&_Dir)[_DirSize], __out_ecount_opt(_NameSize)  (&_Name)[_NameSize], __out_ecount_opt(_ExtSize)  (&_Ext)[_ExtSize]) { return (, _Drive, _DriveSize, _Dir, _DirSize, _Name, _NameSize, _Ext, _ExtSize); } }_Srcextern "C++" { __pragma(warning(push)); __pragma(warning(disable: 4793)); template inline  __CRTDECL ( (&)[_Size],  ,   , ...) { va_list _ArgList; _crt_va_start(_ArgList,  ); return (, _Size, ,  , _ArgList); } __pragma(warning(pop)); }extern "C++" { __pragma(warning(push)); __pragma(warning(disable: 4793)); template inline  __CRTDECL ( (&)[_Size],  , ...) { va_list _ArgList; _crt_va_start(_ArgList, ); return (, _Size, , _ArgList); } __pragma(warning(pop)); }extern "C++" { template inline  __CRTDECL ( ,  ,  (&)[_Size]) { return (, , , _Size); } }extern "C++" { template inline  __CRTDECL ( ,  (&)[_Size],  ,   ,   ) { return (, , _Size, ,  ,  ); } }extern "C++" { template inline  __CRTDECL ( ,  (&)[_Size],  ,   ) { return (, , _Size, ,  ); } }extern "C++" { template inline  __CRTDECL ( ,  (&)[_Size],  ) { return (, , _Size, ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size],  ,  ,   ,   ) { return (, _Size, , ,  ,  ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size],  ,  ,   ) { return (, _Size, , ,  ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size],  ,  ) { return (, _Size, , ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size],  ) { return (, _Size, ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size]) { return (, _Size); } }((size_t)-1)100__cdecl__declspec(restrict)__declspec(noalias)__declspec(align())const_CRT_DEPRECATE_TEXT("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: "  ". See online help for details.")_NewName10_CRT_DEPRECATE_TEXT("This function or variable has been superceded by newer library or operating system functionality. Consider using"  "instead. See online help for details.")_NewItem0xFD_CRT_INSECURE_DEPRECATE()_Replacement_CRT_DEPRECATE_TEXT("This function or variable may be unsafe. Consider using "  " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")__declspec(deprecated())_Text__STDC_SECURE_LIB__200411L_CRTIMP__declspec(dllimport)__CRT_WIDE()_StringL__CRT_STRINGIZE()_Valueerrno_tint *_Value (int *)int _Value (int) ()(size_t)&reinterpret_cast(((( *)0)->))sm(*_errno())c:\program files\microsoft visual studio 8\vc\include\stdlib.hc:\program files\microsoft visual studio 8\vc\include\limits.hSIZE_MAXUINT_MAX0xffffffffffffffffui649223372036854775807i64(-9223372036854775807i64 - 1)0xffffffffui322147483647i32(-2147483647i32 - 1)0xffffui1632767i16(-32767i16 - 1)0xffui8127i8(-127i8 - 1)0xffffffffUL2147483647L(-2147483647L - 1)0xffffffff2147483647(-2147483647 - 1)0xffff32767(-32768)5SCHAR_MAXSCHAR_MIN0xff127(-128)_onexit_t_onexit_t _Funcunsigned long _Valchar *_Dstbufint _Radix (unsigned long, char *, int)voidchar *_Buf1char *_Buf2int _SizeInBytes (char *, char *, int)const char *_EnvString (const char *)long _Valchar *_DstBuf (long, char *, int)int _Val (int, char *, int)double _Valint _NumOfDigits (double, int, char *)int _NumOfDecint *_PtDecint *_PtSign (double, int, int *, int *)unsigned long _Duration (unsigned long)unsigned int _Frequencyunsigned int _Duration (unsigned int, unsigned int)int _Modeconst wchar_t *_Pathwchar_t (&_Drive)[_DriveSize]wchar_t (&_Dir)[_DirSize]wchar_t (&_Name)[_NameSize]wchar_t (&_Ext)[_ExtSize] (const wchar_t *, wchar_t (&)[_DriveSize], wchar_t (&)[_DirSize], wchar_t (&)[_NameSize], wchar_t (&)[_ExtSize])size_t _DriveSizesize_t _DirSizesize_t _NameSizesize_t _ExtSizeconst wchar_t *_FullPathwchar_t *_Drivesize_t _DriveSizeInWordswchar_t *_Dirsize_t _DirSizeInWordswchar_t *_Filenamesize_t _FilenameSizeInWordswchar_t *_Extsize_t _ExtSizeInWords (const wchar_t *, wchar_t *, unsigned int, wchar_t *, unsigned int, wchar_t *, unsigned int, wchar_t *, unsigned int) (const wchar_t *, wchar_t *, wchar_t *, wchar_t *, wchar_t *)const wchar_t *_Filenameconst wchar_t *_EnvVarwchar_t *_ResultPath (const wchar_t *, const wchar_t *, wchar_t *)wchar_t (&_ResultPath)[_Size] (const wchar_t *, const wchar_t *, wchar_t (&)[_Size])size_t _Sizesize_t _SizeInWords (const wchar_t *, const wchar_t *, wchar_t *, unsigned int)const wchar_t *_Nameconst wchar_t *_Value (const wchar_t *, const wchar_t *)const wchar_t *_EnvString (const wchar_t *)const wchar_t *_ErrMsgconst wchar_t *_Driveconst wchar_t *_Dirconst wchar_t *_Ext (wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *) (wchar_t (&)[_Size], const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *)wchar_t *_PathResult (wchar_t *, unsigned int, const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *)wchar_t *_FullPath (wchar_t *, const wchar_t *, unsigned int)const char *_Destchar (&_Drive)[_DriveSize]char (&_Dir)[_DirSize]char (&_Name)[_NameSize]char (&_Ext)[_ExtSize] (const char *, char (&)[_DriveSize], char (&)[_DirSize], char (&)[_NameSize], char (&)[_ExtSize])const char *_FullPathchar *_Drivechar *_Dirchar *_Filenamesize_t _FilenameSizechar *_Ext (const char *, char *, unsigned int, char *, unsigned int, char *, unsigned int, char *, unsigned int) (const char *, char *, char *, char *, char *)const char *_Filenameconst char *_EnvVarchar *_ResultPath (const char *, const char *, char *)char (&_ResultPath)[_Size] (const char *, const char *, char (&)[_Size])size_t _SizeInBytes (const char *, const char *, char *, unsigned int)unsigned __int64unsigned __int64 _Valint _Shift (unsigned __int64, int)unsigned int _Val (unsigned int, int)const char *_Nameconst char *_Value (const char *, const char *)const char *_ErrMsgchar *_Pathconst char *_Driveconst char *_Dirconst char *_Ext (char *, const char *, const char *, const char *, const char *)char (&_Path)[_Size] (char (&)[_Size], const char *, const char *, const char *, const char *)char *_PathResult (char *, unsigned int, const char *, const char *, const char *, const char *)unsigned long (unsigned long, int)_CRT_FLOAT *_Resultchar *_Str_locale_t _Locale (__unnamed_0005_3 *, char *, localeinfo_struct)_LDOUBLE *_Result (__unnamed_0005_1 *, char *, localeinfo_struct)_CRT_DOUBLE *_Result (__unnamed_0005_2 *, char *, localeinfo_struct) (__unnamed_0005_3 *, char *) (__unnamed_0005_1 *, char *) (__unnamed_0005_2 *, char *)char (&_Dest)[_Size]double _Value (char (&)[_Size], double, int) (char *, unsigned int, double, int) (char (&)[_Size], double, int, int *, int *) (char *, unsigned int, double, int, int *, int *)int _NumOfDightschar *_FullPathconst char *_Path (char *, const char *, unsigned int)const wchar_t *_Strwchar_t **_EndPtr (const wchar_t *, wchar_t **, int, localeinfo_struct) (const wchar_t *, wchar_t **, int) (const wchar_t *, localeinfo_struct)wchar_t *_DstBuf (unsigned __int64, wchar_t *, int) (unsigned __int64, wchar_t *, unsigned int, int)__int64 _Val (__int64, wchar_t *, int) (__int64, wchar_t *, unsigned int, int)longdoubleconst wchar_t *_Commandwchar_t **_Buffersize_t *_BufferSizeInWordsconst wchar_t *_VarName (wchar_t **, unsigned int *, const wchar_t *)size_t *_ReturnSizewchar_t (&_Dest)[_Size] (unsigned int *, wchar_t (&)[_Size], const wchar_t *)size_t _DstSizeInWords (unsigned int *, wchar_t *, unsigned int, const wchar_t *) (const wchar_t *, wchar_t **, localeinfo_struct) (const wchar_t *, wchar_t **)unsigned long _Valuewchar_t *_Dest (unsigned long, wchar_t *, int) (unsigned long, wchar_t (&)[_Size], int) (unsigned long, wchar_t *, unsigned int, int)long _Value (long, wchar_t *, int) (long, wchar_t (&)[_Size], int) (long, wchar_t *, unsigned int, int) (int, wchar_t *, int) (int, wchar_t (&)[_Size], int) (int, wchar_t *, unsigned int, int)void *void *_Memorysize_t _Countsize_t _Alignmentsize_t _Offset (void *, unsigned int, unsigned int, unsigned int, unsigned int) (void *, unsigned int, unsigned int, unsigned int) (void *, unsigned int, unsigned int) (unsigned int, unsigned int, unsigned int) (void *)size_t _NewSize (void *, unsigned int) (unsigned int)size_t _NumOfElementssize_t _SizeOfElementschar *_Destconst wchar_t *_Sourcesize_t _MaxCount (char *, const wchar_t *, unsigned int, localeinfo_struct)size_t *_PtNumOfCharConverted (unsigned int *, char (&)[_Size], const wchar_t *, unsigned int, localeinfo_struct)char *_Dstsize_t _DstSizeInBytesconst wchar_t *_Srcsize_t _MaxCountInBytes (unsigned int *, char *, unsigned int, const wchar_t *, unsigned int, localeinfo_struct) (char *, const wchar_t *, unsigned int) (unsigned int *, char (&)[_Size], const wchar_t *, unsigned int) (unsigned int *, char *, unsigned int, const wchar_t *, unsigned int)int *_SizeConvertedchar *_MbChwchar_t _WCh (int *, char *, unsigned int, wchar_t, localeinfo_struct)rsize_t _SizeInBytes (int *, char *, unsigned int, wchar_t) (char *, wchar_t, localeinfo_struct) (char *, wchar_t) (unsigned long, char (&)[_Size], int) (unsigned long, char *, unsigned int, int)const char *_Commandconst char *_Strchar **_EndPtr (const char *, char **, int, localeinfo_struct) (const char *, char **, int) (const char *, char **, localeinfo_struct) (const char *, char **)unsigned int _Seedconst char *_Source (wchar_t *, const char *, unsigned int, localeinfo_struct) (unsigned int *, wchar_t (&)[_Size], const char *, unsigned int, localeinfo_struct)const char *_SrcBuf (unsigned int *, wchar_t *, unsigned int, const char *, unsigned int, localeinfo_struct) (wchar_t *, const char *, unsigned int) (unsigned int *, wchar_t (&)[_Size], const char *, unsigned int) (unsigned int *, wchar_t *, unsigned int, const char *, unsigned int)wchar_t *_DstChconst char *_SrcChsize_t _SrcSizeInBytes (const char *, unsigned int, localeinfo_struct) (const char *, unsigned int) (const char *, localeinfo_struct)const char *_Ch (long, char (&)[_Size], int) (long, char *, unsigned int, int)ldiv_tlong _A1long _A2 (long, long)long _Numeratorlong _Denominatorconst char *_String (unsigned __int64, char *, int) (unsigned __int64, char *, unsigned int, int) (__int64, char *, int) (__int64, char *, unsigned int, int) (int, char (&)[_Size], int) (int, char *, unsigned int, int)char **_PBuffersize_t *_PBufferSizeInBytesconst char *_VarName (char **, unsigned int *, const char *) (unsigned int *, char (&)[_Size], const char *)rsize_t _DstSize (unsigned int *, char *, unsigned int, const char *)div_tint _Numeratorint _Denominator (int, int)unsigned __int64 _Int64 (unsigned __int64)unsigned long _Longunsigned short _Short (unsigned short)void *_Baseint (*_PtFuncCompare)(const void *, const void *) (void *, unsigned int, unsigned int, int (*)(const void *, const void *))rsize_t _NumOfElementsrsize_t _SizeOfElementsint (*_PtFuncCompare)(void *, const void *, const void *)void *_Context (void *, unsigned int, unsigned int, int (*)(void *, const void *, const void *), void *)const void *_Keyconst void *_Base (const void *, const void *, unsigned int, unsigned int, int (*)(const void *, const void *)) (const void *, const void *, unsigned int, unsigned int, int (*)(void *, const void *, const void *), void *) (__int64)long _X (long)int _Xunsigned int _Flagsunsigned int _Maskint _Codechar (* )[_SizeOfArray]_CountofType (&_Array)[_SizeOfArray] (_CountofType (&)[_SizeOfArray])typename _CountofTypesize_t _SizeOfArrayunsigned int *_Value (unsigned int *)int *_PModewchar_t **_Value (wchar_t **)char **_Value (char **)wchar_t **char **unsigned long *_Value (unsigned long *)unsigned long *_invalid_parameter_handler_invalid_parameter_handler _Handler (void)void (* )(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t)_purecall_handler_purecall_handler _Handlervoid (* )(void)_locale_t (localeinfo_struct)__unnamed_0005_5unsigned char [12]__unnamed_0005_4long double__unnamed_0005_3float__unnamed_0005_2__unnamed_0005_1unsigned char [10]struct _ldiv_tstruct _div_tint (* )(void)_environ_sys_nerr_sys_errlist(309+40)sizeof(*__countof_helper())_Array(*__sys_nerr())(__sys_errlist())(*__doserrno())0x20x132256260((() < ()) ? () : ())ab((() > ()) ? () : ())__mb_cur_max0x7fff((unsigned char *)(&()->ld))const char *inputFileNameconst char *outputFileNameconst char *vectorNamechar *errorDescription (const char *, const char *, const char *, char *)asn1_retCodeconst char *file_nameASN1_TYPE *definitions (const char *, ASN1_TYPE *, char *)int error (int, char *)const int []const char * []YYSTYPEconst char *yymsgint yytypeYYSTYPE *yyvaluep (const char *, int, YYSTYPE *)const yytype_uint8 []const yytype_int16 []yytype_int16shortsigned charunsigned charchar [MAX_NAME_SIZE+1]node_asn *char *s (char *)const char *char []FILE *295294293292291290289288287286285284283282281280279278277276275274273272271270269268267266265264263262261259258(yyvsp -= (), yyssp -= ())N10000200RuleBottomTopTitleTypeValueLocationArgsyylex ()((void) 0)FileLocdo if (YYID ()) { ().first_line = YYRHSLOC (, 1).first_line; ().first_column = YYRHSLOC (, 1).first_column; ().last_line = YYRHSLOC (, ).last_line; ().last_column = YYRHSLOC (, ).last_column; } else { ().first_line = ().last_line = YYRHSLOC (, 0).last_line; ().first_column = ().last_column = YYRHSLOC (, 0).last_column; } while (YYID (0))CurrentRhs(()[])Kdo if (yychar == YYEMPTY && yylen == 1) { yychar = (); yylval = (); yytoken = YYTRANSLATE (yychar); YYPOPSTACK (1); goto yybackup; } else { yyerror (YY_("syntax error: cannot back up")); YYERROR; } while (YYID (0))Token(!!yyerrstatus)goto yyerrlabgoto yyerrorlabgoto yyabortlabgoto yyacceptlab(-2)(yychar = YYEMPTY)(yyerrstatus = 0)-9-84((unsigned int) () <= YYMAXUTOK ? yytranslate[] : YYUNDEFTOK)YYX189984352do { YYSIZE_T yyi; for (yyi = 0; yyi < (); yyi++) ()[yyi] = ()[yyi]; } while (YYID (0))ToFromCount(() * (sizeof (yytype_int16) + sizeof (YYSTYPE)) + YYSTACK_GAP_MAXIMUM)(sizeof (union yyalloc) - 1)freemallocYYSIZE_MAXIMUMYYFREEYYMALLOC()((void) ())emsgid((YYSIZE_T) -1)_asn1_yynerrs_asn1_yydebug_asn1_yychar_asn1_yylval_asn1_yyerror_asn1_yylex_asn1_yyparse"yacc.c""2.1b"c:\libtasn1\lib\coding.cc:\libtasn1\lib\parser_aux.hASN1_TYPE node (ASN1_TYPE)node_asn *pointerconst char *name (node_asn *, const char *)node_asn *node (node_asn *)long vchar *str (long, char *)unsigned int value (node_asn *, unsigned int)node_asn *down (node_asn *, node_asn *)node_asn *rightconst unsigned char *valueunsigned int len (node_asn *, const unsigned char *, unsigned int)unsigned int typec:\libtasn1\lib\element.hchar *nameint name_size (node_asn *, char *, int)const char *valueunsigned char *value_outint value_out_sizeint *len (const char *, unsigned char *, int, int *)ASN1_TYPE elementvoid *iderchar *ErrorDescription (ASN1_TYPE, const char *, void *, int *, char *)unsigned char *derint der_len (unsigned char *, int, node_asn *)int *counterint *max_len (node_asn *, unsigned char *, int *, int *)const unsigned char *strint bit_lenint *der_len (const unsigned char *, int, unsigned char *, int *)const char []unsigned char *str (unsigned char *, unsigned char *, int *)int str_lenunsigned int tag_valueunsigned char *ansint *ans_len (int, unsigned int, unsigned char *, int *)unsigned long len (unsigned long, unsigned char *, int *) (node_asn *, char *)16c:\libtasn1\lib\decoding.cc:\libtasn1\lib\structure.hnode_asn *rootconst char *source_namenode_asn *source_nodechar *output_file_namechar *vector_name (node_asn *, char *, char *)ASN1_TYPE definitionsASN1_TYPE *elementconst char *octetNameconst char *objectName (ASN1_TYPE, ASN1_TYPE *, const char *, const char *) (ASN1_TYPE, ASN1_TYPE *)const void *iderint lenconst char *name_elementint *startint *end (ASN1_TYPE, const void *, int, const char *, int *, int *)ASN1_TYPE *structureconst char *elementName (ASN1_TYPE *, const char *, const void *, int, char *) (ASN1_TYPE *, const void *, int, char *)const unsigned char *der (const unsigned char *, int *) (const unsigned char *, node_asn *, int *)int *ret_len (node_asn *, const unsigned char *, int, int *)int str_sizeint *bit_len (const unsigned char *, int, int *, unsigned char *, int, int *) (const unsigned char *, int, int *, unsigned char *, int)int *str_lenunsigned char * (const unsigned char *, int, unsigned char *) (const unsigned char *, int, int *)4c:\libtasn1\lib\element.cint *tagValueint *classValue (node_asn *, const char *, int *, int *)ASN1_TYPE rootvoid *ivalue (ASN1_TYPE, const char *, void *, int *)ASN1_TYPE node_rootconst void *ivalue (ASN1_TYPE, const char *, const void *, int)*len = strlen() + 1; if ( < strlen()+(*len)) { return ASN1_MEM_ERROR; } else { strcat(, ); }ptrptr_sizedata*len = strlen() + 1; if ( < *len) { return ASN1_MEM_ERROR; } else { strcpy(, ); }*len = ; if ( < ) { return ASN1_MEM_ERROR; } else { memcpy( , , ); }data_sizec:\libtasn1\lib\errors.cc:\libtasn1\lib\errors.hc:\libtasn1\lib\int.h(1<<30)(1<<29)(1<<28)(1<<27)(1<<26)(1<<24)(1<<23)(1<<22)(1<<21)(1<<20)(1<<19)(1<<18)(1<<17)(1<<16)(1<<15)(1<<14)(1<<13)(1<<12)(1<<11)(1<<10)(1<<9)(1<<8)272120191817151413121110976(&0xFF)1024const char *fmt... (const char *, ...)asn1_retCode error (asn1_retCode)const libtasn1_error_entry []LIBTASN1_ERROR_LOOP( if(p->number == error) { ; break; } )const libtasn1_error_entry *p; for(p = error_algorithms; p->name != NULL; p++) {  ; }{ ,  }namec:\libtasn1\lib\gstr.cchar *destsize_t dest_tot_sizeconst char *src (char *, unsigned int, const char *)c:\libtasn1\lib\parser_aux.cc:\libtasn1\lib\gstr.h_asn1_str_cat(,MAX_ERROR_DESCRIPTION_SIZE,)y_asn1_str_cpy(,MAX_ERROR_DESCRIPTION_SIZE,)const char *req_versionconst char *sint *majorint *minorint *micro (const char *, int *, int *, int *)int *number (const char *, int *)list_type *struct list_structlist_struct *c:\libtasn1\lib\structure.cconst char *oidValue (ASN1_TYPE, const char *)int *num (ASN1_TYPE, const char *, int *)FILE *outASN1_TYPE structureint mode (FILE *, ASN1_TYPE, const char *, int) (ASN1_TYPE, const char *, ASN1_TYPE *)node_asn **node (node_asn **, node_asn *)const char *element_name (ASN1_TYPE *)const ASN1_ARRAY_TYPE *array (const ASN1_ARRAY_TYPE *, ASN1_TYPE *, char *)ASN1_TYPE pointer (ASN1_TYPE, char *, char *)c:\libtasn1\lib\windows\config.hc:\libtasn1\lib\defines.hc:\program files\microsoft visual studio 8\vc\include\string.hconst wchar_t *_Str1const wchar_t *_Str2wchar_t *_Str (wchar_t *)wchar_t _Val (wchar_t *, wchar_t) (wchar_t *, wchar_t, unsigned int) (const wchar_t *, const wchar_t *, unsigned int)const wchar_t *_SubStr (wchar_t *, const wchar_t *)wchar_t _Chconst wchar_t *_Control (const wchar_t *, const wchar_t *, unsigned int, localeinfo_struct) (const wchar_t *, const wchar_t *, localeinfo_struct)wchar_t *_Dst (wchar_t *, const wchar_t *, unsigned int, localeinfo_struct)wchar_t *_String (wchar_t *, localeinfo_struct)wchar_t (&_String)[_Size] (wchar_t (&)[_Size], localeinfo_struct) (wchar_t *, unsigned int, localeinfo_struct) (wchar_t (&)[_Size]) (wchar_t *, unsigned int) (wchar_t *, unsigned int, wchar_t) (wchar_t *, unsigned int, wchar_t, unsigned int)wchar_t (&_Buffer)[_Size]const wchar_t *_ErrorMessage (wchar_t (&)[_Size], const wchar_t *)wchar_t *_Buffer (wchar_t *, unsigned int, const wchar_t *)int _Error (wchar_t (&)[_Size], int)wchar_t *_Bufint _ErrNum (wchar_t *, unsigned int, int)const wchar_t *_Delimwchar_t **_Context (wchar_t *, const wchar_t *, wchar_t **)const wchar_t * (const wchar_t *, wchar_t) (wchar_t (&)[_Size], const wchar_t *, unsigned int)rsize_t _MaxCount (wchar_t *, unsigned int, const wchar_t *, unsigned int) (const wchar_t *, unsigned int) (char *, int) (char *, int, unsigned int)const char *_Str1 (const char *, const char *, unsigned int)const char *_Str2const char *_Srcvoid *_Pvint _Csize_t _N (void *, int, unsigned int)const char *_SubStr (char *, const char *)int _Chconst char *_Control (char *, const char *, unsigned int, localeinfo_struct)char *_String (char *, localeinfo_struct)char (&_String)[_Size] (char (&)[_Size], localeinfo_struct) (char *, unsigned int, localeinfo_struct) (char (&)[_Size]) (char *, unsigned int)const char *_Delimchar **_Context (char *, const char *, char **) (const char *, int) (char *, unsigned int, int, unsigned int) (char (&)[_Size], const char *, unsigned int) (char *, unsigned int, const char *, unsigned int) (const char *, const char *, unsigned int, localeinfo_struct)char (&_Buffer)[_Size]int _ErrorMessage (char (&)[_Size], int)char *_Buf (char *, unsigned int, int)const char *_ErrorMessage (char (&)[_Size], const char *) (const char *, const char *, localeinfo_struct)void *_Dstconst void *_Src (void *, const void *, unsigned int) (void *, unsigned int, const void *, unsigned int)size_t _DstSizeconst void *_Buf1const void *_Buf2 (const void *, const void *, unsigned int) (void *, const void *, int, unsigned int) (const void *, const void *, unsigned int, localeinfo_struct)const void *const void *_Buf (const void *, int, unsigned int)wcsstr_CONST_RETURNc:\program files\microsoft visual studio 8\vc\include\stdio.hc:\program files\microsoft visual studio 8\vc\include\swprintf.inlconst wchar_t *_Format_locale_t _Plocinfova_list _Ap (wchar_t *, const wchar_t *, localeinfo_struct, char) (wchar_t *, const wchar_t *, localeinfo_struct, ...) (wchar_t *, const wchar_t *, char) (wchar_t *, const wchar_t *, ...) (wchar_t *, unsigned int, const wchar_t *, localeinfo_struct, char) (wchar_t *, unsigned int, const wchar_t *, localeinfo_struct, ...) (wchar_t *, unsigned int, const wchar_t *, char) (wchar_t *, unsigned int, const wchar_t *, ...)FILE *_File (int, _iobuf *) (_iobuf *)int _FileHandleconst char *_Format (int, const char *)const char *_Directoryconst char *_FilePrefixconst void *_DstBuf (const void *, unsigned int, unsigned int, _iobuf *)__int64 _Offsetint _Origin (_iobuf *, __int64, int)long _Offset (_iobuf *, long, int)void *_DstBufsize_t _ElementSize (void *, unsigned int, unsigned int, unsigned int, _iobuf *) (void *, unsigned int, unsigned int, _iobuf *)wint_twint_t _Ch (unsigned short, _iobuf *) (wchar_t, _iobuf *)const wchar_t *_ModeFILE **_FileFILE *_OldFile (_iobuf **, const wchar_t *, const wchar_t *, _iobuf *) (const wchar_t *, const wchar_t *, _iobuf *) (_iobuf **, const wchar_t *, const wchar_t *) (int, const wchar_t *) (const wchar_t *, localeinfo_struct, ...) (const wchar_t *, ...) (const wchar_t *, unsigned int, const wchar_t *, localeinfo_struct, ...) (const wchar_t *, unsigned int, const wchar_t *, ...) (const wchar_t *, const wchar_t *, localeinfo_struct, ...) (const wchar_t *, const wchar_t *, ...) (_iobuf *, const wchar_t *, localeinfo_struct, ...) (_iobuf *, const wchar_t *, ...)va_list _ArgList (const wchar_t *, localeinfo_struct, char) (const wchar_t *, char)const wchar_t *_Directoryconst wchar_t *_FilePrefixva_list _Args (wchar_t *, unsigned int, unsigned int, const wchar_t *, localeinfo_struct, char) (wchar_t *, unsigned int, unsigned int, const wchar_t *, localeinfo_struct, ...) (_iobuf *, const wchar_t *, localeinfo_struct, char) (_iobuf *, const wchar_t *, char) (wchar_t (&)[_Size], unsigned int, const wchar_t *, char) (wchar_t *, unsigned int, unsigned int, const wchar_t *, char) (wchar_t (&)[_Size], unsigned int, const wchar_t *, ...) (wchar_t *, unsigned int, unsigned int, const wchar_t *, ...) (wchar_t (&)[_Size], const wchar_t *, char) (wchar_t (&)[_Size], const wchar_t *, ...) (const wchar_t *, _iobuf *)int _SizeInWords (wchar_t *, int, _iobuf *)wchar_t _C (wchar_t)int _ShFlag (const wchar_t *, const wchar_t *, int) (char *, unsigned int, unsigned int, const char *, localeinfo_struct, char) (char *, unsigned int, const char *, localeinfo_struct, char) (char *, unsigned int, unsigned int, const char *, localeinfo_struct, ...) (char *, unsigned int, const char *, localeinfo_struct, ...) (const char *, localeinfo_struct, char) (const char *, localeinfo_struct, ...) (char *, const char *, localeinfo_struct, char) (char *, const char *, localeinfo_struct, ...) (_iobuf *, const char *, localeinfo_struct, char) (_iobuf *, const char *, localeinfo_struct, ...) (const char *, char) (char *, unsigned int, const char *, char) (_iobuf *, const char *, char) (char *, unsigned int, const char *, ...) (_iobuf *, const char *, ...) (char *, const char *, char) (char *, const char *, ...) (char (&)[_Size], const char *, char) (char (&)[_Size], unsigned int, const char *, char) (char *, unsigned int, unsigned int, const char *, char)char *_Bufferchar (&_Buf)[_Size]rsize_t _Size (_iobuf **) (const char *, unsigned int, const char *, localeinfo_struct, ...) (const char *, unsigned int, const char *, ...) (const char *, const char *, localeinfo_struct, ...) (const char *, const char *, ...) (char (&)[_Size], const char *, ...) (char (&)[_Size], unsigned int, const char *, ...) (char *, unsigned int, unsigned int, const char *, ...) (_iobuf *, char *, int, unsigned int)unsigned int _Formatint _Max (_iobuf *, char *)const char *_OldFilenameconst char *_NewFilenameint _Wordconst char *_Modeconst void *_Strconst fpos_t *_Pos (_iobuf *, const __int64 *) (_iobuf **, const char *, const char *, _iobuf *) (const char *, const char *, _iobuf *) (const char *, _iobuf *) (_iobuf **, const char *, const char *)const char *_DirNameint _MaxCount (char *, int, _iobuf *)fpos_t *_Pos (_iobuf *, __int64 *) (const char *, const char *, int)struct _iobuf_SYS_OPEN_P_tmpdirc_putwc_nolock((),stdout)_c_getwc_nolock(stdin)_putc_nolock((),stdout)_getc_nolock(stdin)_fputc_nolock(, )_stream_fgetc_nolock()(--()->_cnt >= 0 ? 0xff & (*()->_ptr++ = (char)()) : _flsbuf((),()))(--()->_cnt >= 0 ? 0xff & *()->_ptr++ : _filbuf())_fgetwc_nolock()_stm_fputwc_nolock(,)fputwc(,)fgetwc()_CRT_DEPRECATE_TEXT("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS.")(wint_t)(0xFFFF)0x00800x00400x00200x00100x00080x00040x00000x00020x0001(&__iob_func()[2])(&__iob_func()[1])(&__iob_func()[0])((long)())fp(sizeof(_P_tmpdir) + 16)(sizeof(_P_tmpdir) + 12)L"\\""\\"(-1)512_NSTREAM_c:\program files\microsoft visual studio 8\vc\include\ctype.hwint_t _Cwctype_t _Type (unsigned short, unsigned short) (unsigned short, localeinfo_struct) (unsigned short, unsigned short, localeinfo_struct) (int, localeinfo_struct)int _Type (int, int, localeinfo_struct)const wctype_t *const unsigned short []__iscsym__iscsymf__toascii__isascii(_iswalnum_l(, ) || (() == '_'))_p(_iswalpha_l(, ) || (() == '_'))(_isalnum_l(, ) || (() == '_'))(_isalpha_l(, ) || (() == '_'))(iswalnum() || (() == '_'))(iswalpha() || (() == '_'))(isalnum() || (() == '_'))(isalpha() || (() == '_'))( () & 0x7f )_Char( (unsigned)() < 0x80 )( ()-'a'+'A' )( ()-'A'+'a' )_ischartype_l(, _CONTROL, )_Locale_ischartype_l(, _PUNCT|_ALPHA|_DIGIT, )_ischartype_l(, _BLANK|_PUNCT|_ALPHA|_DIGIT, )_ischartype_l(, _ALPHA|_DIGIT, )_ischartype_l(, _PUNCT, )_ischartype_l(, _SPACE, )_ischartype_l(, _HEX, )_ischartype_l(, _DIGIT, )_ischartype_l(, _LOWER, )_ischartype_l(, _UPPER, )_ischartype_l(, _ALPHA, )( (()!=NULL && (((_locale_t)())->locinfo->mb_cur_max) > 1) ? _isctype_l(, (), ) : _chvalidchk_l(,,))_Flag(==NULL ? __chvalidchk(, ) : ((_locale_t))->locinfo->pctype[] & ())(__PCTYPE_FUNC[()] & ())(0x0100|_UPPER|_LOWER)0x80000x800x400x200x100x80x4__pctype_func()c:\libtasn1\lib\libtasn1.hc:\program files\microsoft visual studio 8\vc\include\sys\types.hc:\program files\microsoft visual studio 8\vc\include\time.hc:\program files\microsoft visual studio 8\vc\include\wtime.inlconst time_t *_Time (wchar_t *, unsigned int, const __int64 *) (const __int64 *)c:\program files\microsoft visual studio 8\vc\include\time.inltime_ttime_t *_Time (__int64 *)tm *_Tm (tm *) (tm *, const __int64 *)tm * (char *, unsigned int, const __int64 *)time_t _Time1time_t _Time2 (__int64, __int64)char * [2]const __time64_t *_Time (wchar_t (&)[_Size], const __int64 *)const tm *_Tm (wchar_t *, unsigned int, const wchar_t *, const tm *, localeinfo_struct) (wchar_t *, unsigned int, const wchar_t *, const tm *)const __time32_t *_Time (wchar_t (&)[_Size], const long *) (wchar_t *, unsigned int, const long *) (const long *)const tm *_Time (wchar_t (&)[_Size], const tm *) (wchar_t *, unsigned int, const tm *) (const tm *)unsigned int _MilliSec (tm *, unsigned int)__time64_t *_Time (char (&)[_Size], const __int64 *)__time64_t _Time1__time64_t _Time2__time32_t__time32_t *_Time (long *)size_t _Max_size (char *, unsigned int, const char *, const tm *, localeinfo_struct) (char *, unsigned int, const char *, const tm *) (tm *, const long *)__time32_t _Time1__time32_t _Time2clock_t (char (&)[_Size], const long *) (char *, unsigned int, const long *) (char (&)[_Size], const tm *) (char *, unsigned int, const tm *)size_t *_ReturnValueint _Index (unsigned int *, char *, unsigned int, int)long *_Timezonelong *_Daylight_savings_biasint *_Daylightlong *CLOCKS_PER_SEC(__tzname())(*__timezone())(*__dstbias())(*__daylight())1000 (node_asn_struct, const char *) (node_asn_struct *, const char *, int *, int *) (node_asn_struct, node_asn_struct *, const char *, const char *) (node_asn_struct, node_asn_struct *) (node_asn_struct, const void *, int, const char *, int *, int *) (node_asn_struct *, const char *, const void *, int, char *) (node_asn_struct *, const void *, int, char *) (node_asn_struct, const char *, void *, int *, char *) (node_asn_struct, const char *, int *) (node_asn_struct, const char *, void *, int *) (node_asn_struct, const char *, const void *, int) (node_asn_struct *) (node_asn_struct, const char *, node_asn_struct *) (_iobuf *, node_asn_struct, const char *, int) (const static_struct_asn *, node_asn_struct *, char *) (const char *, node_asn_struct *, char *)struct static_struct_asnstruct node_asn_structnode_asn_struct *NULL0x1B0x050x0A0x060x180x170x030x040x110x020x010xC00x00128"0.3.0"c:\libtasn1\lib\mem.hstrduprealloccalloc_asn1_free_asn1_malloc/O2 /I "../../lib" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/O2 /I "../../lib" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /DSIZEOF_UNSIGNED_LONG_INT=4 /DSIZEOF_UNSIGNED_INT=4 /D_M_X86 (node_asn_struct) (node_asn_struct *, unsigned int) (node_asn_struct *, node_asn_struct *) (node_asn_struct *, const char *) (node_asn_struct *, const unsigned char *, unsigned int)char [128+1] (FILE *, node_asn_struct, const char *, int) (node_asn_struct **, node_asn_struct *) (node_asn_struct, char *, char *) (node_asn_struct *, char *, int) (unsigned char *, int, node_asn_struct *) (node_asn_struct *, unsigned char *, int *, int *) (node_asn_struct *, char *) (node_asn_struct *, char *, char *) (const unsigned char *, node_asn_struct *, int *) (node_asn_struct *, const unsigned char *, int, int *)FEACP aborted because NCB getEarlyExit() returned truemoccac:\libtasn1\windows\libtasn1.ncbC:\libtasn1\windows\test-tree\test-tree.vcproj/O2 /FD /EHsc /MT /Fo"\\" /Fd"\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/ACWD "c:\libtasn1\windows\test-tree\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\test-tree\c:\libtasn1\tests\test_tree.cc:\libtasn1\tests\test_tree_asn1_tab.cconst ASN1_ARRAY_TYPE []int argcchar *argv[] (int, char *[])test_type []__unnamed_0020_1/O2 /I "..\..\lib" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/O2 /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86C:\libtasn1\windows\test-parser\test-parser.vcproj/ACWD "c:\libtasn1\windows\test-parser\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\test-parser\c:\libtasn1\tests\test_parser.cint lineNumberchar *lineFILE *file__unnamed_0022_1"Test_parser_ERROR.asn"C:\libtasn1\windows\asn1-parser\asn1-parser.vcproj/ACWD "c:\libtasn1\windows\asn1-parser\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\asn1-parser\c:\libtasn1\src\asn1parser.c/O2 /I "..\..\lib" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /DVERSION="0.3.0" /D_M_X86C:\libtasn1\windows\gnulib\gnulib.vcproj/ACWD "c:\libtasn1\windows\gnulib\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\gnulib\c:\libtasn1\gl\strdup.hc:\libtasn1\gl\getopt_.hint ___argcchar *const *___argvconst char *__shortoptsconst option *__longoptsint *__longind (int, char *const *, const char *, const option *, int *) (int, char *const *, const char *)(0)majminc:\libtasn1\gl\getopt_int.hchar **___argv_getopt_data *__data (int, char **, const char *, const option *, int *, _getopt_data *)int __long_onlyint __posixly_correct (int, char **, const char *, const option *, int *, int, int, _getopt_data *)_getopt_data::__unnamed_0026_1 (int, char **, const char *, const option *, int *, int, int){ 1, 1 }c:\libtasn1\gl\gettext.hString((const char *) ())DomainnameCodesetDirname((const char *) ())(() == 1 ? (const char *) () : (const char *) ())Msgid1Msgid2Category(() == 1 ? (const char *) () : (const char *) ())Msgidc:\libtasn1\gl\getopt.cchar *const *argvconst char *optstringchar **argvconst option *longoptsint *longindint long_onlyint posixly_correct_getopt_data *d (int, char **, const char *, int, _getopt_data *) (char **, _getopt_data *)_getopt_data(argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')ch1ch2gettext ()c:\libtasn1\gl\getopt1.cconst char *optionsconst option *long_optionsint *opt_indexchar *__getopt_argv_constc:\libtasn1\gl\getopt.h`unused-module'\ °Zz>Ë®ÃEQ ’XÆ”iu]§‚¯³íÄlj©À&Tr0I€Výu .ÏyߌŒüQùÛ°„¼9/É~nao ÃÝrÓ"N*FMõ€c¢ÌUEU,eŒf§Ä´‰£Ò&ò'Pu ¢e!`‡1a¨µî(õFHpae’ u ?2)‡³ˆHÒ“ ½zŠ|l›5­E©k,r˜ò_îH”—j",ã‚x]ûÅ€ ÀB'Q.”xñ¨öc’-wTn)²!lf‘\E•u †%ŽÇ–ß•°@0 Qp¤teBpx©ÅSd ]¨•Þz«‰¾ #%#OPŽî&±i* •šRÁ{2i熄¡c{ÄWfWS$ó‚(£3§ý±Ð¸Ç·k¯È*°¶ ­®ÏL0j ­H‘äÆZ‹|ÑÈ­µ¹JævØÜPPÔ(W ;jý¯Œ §ê ö\¹TƒI†¬Õ€Z”BÇYjpB*ÅãJ øgÈ+ë—·!&PM²yZh¡!¨A49*]zhQ¤Á“Åuh¥¡™µï ?R°9oW®'À~¾D‚dnËµÌ Nv†G2IH²ÌeJ„Ÿ€˜¯·°É°Ø½©PÀÿU1%¼løoôopêǽ€§‚a<…ûu,µWÈLeê£D*KƒMlmTŒ•›‡«CÒM}«`°l´l3xbUÈFn‹«¡X·µ‹Éæy½]„×3÷)´Z„m`ÚJ•¡€>)\„–ÇÛ(œfq'_*o[ª¥´Ò%a+wƤ[î¹Àlc†z~òŽäoǃÜoØo˜MÐo¥NÔoàoèoìoðo…ÒtÉ’ z%+(S)GE}j{ÂCqwMŸAFùCŸ¢ô¢k„ú|4¥ø”ªwl«Ê±à¯L¥s>zO9pxίWµÌ†³~´籟²€ ¸>ºÂ8ÀÁ·Þ“ņksdG•Æc¨f?Eln Wƒ#8}kXþdzøi&u¯ƒ2s`—»©ô´«DKoµ¨.0jB«tŽ'ÀŒ@B*[JUO;ƒ¸ª)|j¦ED§1Au ­»Q£dƒ»dÌ_§JFÙ©†¢¤+‘dcû!OªoŸ¥TÈÑKÇ"tÅ’d3†Š o¤o˜oœooŠf”oˆoŒo€o„o©sÝ€Hd2- H¦Šo͈BG"‚c$²bH_s­s5z•Ò•U–mhšø¡x-)”csÊ¥o°šmÆ”Çæ X`«§øÇgÌDv¥Úfop S•|••QÕµ3pÕŒZö±‰P?x‰n_ppÅÔXÜ/ª¯'–_yp2u¶{¬”=£ÌoÈoÄoÀo¼o¸o´o°o¬o¨oáy[¦®zàƒÚ† hVp*„¥:‰tLœÇn²Èk £.o´.Z1ªÄx¢ðtGb¿2SFºH,N!s%‹ÔS¡yiGh Š*ÆÝp§¤~þ‡Y6j„§ß jz•NâªÐµ$ÂßOpµþ~ÆH›÷ÂE¥ …ñmË.S¥Z¥o¥ìM¦’L¥[­ýc=pGGæÅ·+Ü`Y˜¿SórwÄO/' Cl“ˆœ–(/Pl̬â¿ý€µ€z(UMvz$ Zµ“šk(†îwFw’[kCŒÆµTgU«wXmt<)Ñ'¶]¯‘µG±«œ”Œ•_Mœ‚Š@·`¸ú¼·³î“”Ü.ïu^Ê{t2W'pjp¹‡+‚yÕ! ‹oÆg'aÁ5JO>€K•§„…¯¬PŸ²*2¼î•Ûmz§l ¬‚›¨Z¤_R)è¹î¹þïþïÖ˜YYBISONYYBISON_VERSIONYYSKELETON_NAMEYYPUREYYLSP_NEEDEDyyparse_asn1_yyparseyylex_asn1_yylexyyerror_asn1_yyerroryylval_asn1_yylvalyychar_asn1_yycharyydebug_asn1_yydebugyynerrs_asn1_yynerrsYYTOKENTYPEyytokentypeASSIGNUMIDENTIFIEROPTIONALINTEGERSIZEOCTETSTRINGSEQUENCEBITUNIVERSALPRIVATEAPPLICATIONDEFAULTCHOICEOFOBJECTSTR_IDENTIFIERBOOLEANTRUEFALSETOKEN_NULLANYDEFINEDBYSETEXPLICITIMPLICITDEFINITIONSTAGSBEGINENDUTCTimeGeneralizedTimeGeneralStringFROMIMPORTSENUMERATEDint.herrors.hparser_aux.hstructure.hFILEfile_asn1asn1_retCoderesult_parsenode_asnp_treelineNumberlastTokenMAX_NAME_SIZE_asn1_identifierMissingfileNameYYDEBUGYYERROR_VERBOSEYYTOKEN_TABLEYYSTYPEYYSTYPE_IS_DECLAREDconstantstrnodeyystypeYYSTYPE_IS_TRIVIALYYTYPE_UINT8yytype_uint8YYTYPE_INT8yytype_int8__STDC____C99__FUNC____cplusplus_MSC_VERYYTYPE_UINT16yytype_uint16YYTYPE_INT16yytype_int16YYSIZE_T__SIZE_TYPE__size_tc:\program files\microsoft visuastruct::value_lennode_asn_struct::downnode_asn_struct::rightnode_asn_struct::leftMEM_HHAVE_ALLOCAHAVE_ALLOCA_H_asn1_calloc_asn1_reallocc:\libtasn1\lib\libtasn1.hc:\libtasn1\lib\defines.hc:\libtasn1\lib\mem.hlibtasn1definesmemc:\libtasn1\tests\test_tree_asn1_tab.cTest_tree_asn1_tabACT_NULLACT_CREATEACT_DELETEACT_WRITEACT_READACT_VISITACT_ENCODINGACT_DECODINGACT_PRINT_DERACT_EXPAND_ANYACT_DECODING_ELEMENTACT_EXPAND_OCTETACT_NUMBER_OF_ELEMENTSACT_DECODING_START_ENDACT_READ_DEFINITIONSACT_READ_TAG_CLASSACT_OID_2_STRUCTUREACT_READ_LENGTHACT_ENCODING_LENGTHACT_READ_BITACT_SET_DERACT_DELETE_ELEMENTactionpar1par2par3errorNumbertest_typetest_arraymainargcargvasn1_elementtesterrorCountertestCountervalueLenstr_ptreefile__unnamed_0020_1__unnamed_0020_1::action__unnamed_0020_1::par1__unnamed_0020_1::par2__unnamed_0020_1::par3__unnamed_0020_1::errorNumberlinefileCorrectNamefileErroredName_FILE_readLinecreateFilefileInfileOutlineReadfileInLineNumber__unnamed_0022_1__unnamed_0022_1::lineNumber__unnamed_0022_1::line__unnamed_0022_1::errorNumber__unnamed_0022_1::errorDescriptionconfig.hHAVE_UNISTD_HunistdHAVE_GETOPT_Hgetoptversion_manVERSIONhelp_manHAVE_GETOPT_LONGoptionlong_optionsno_argumentrequired_argumentoption_indexoption_resultcheckSyntaxOnlyparse_resultopterrgetopt_longoptargoptindSTRDUP_H_HAVE_DECL_STRDUP_GETOPT_H__need_getopt__GETOPT_PREFIXgetopt_long_onlyoptopt__GETOPT_CONCAT__GETOPT_XCONCAT__GETOPT_ID__getopt_argv_const__GNU_LIBRARY____THROW__GNUC_PREREQmajhas_argflagoptional_argument___argc___argv__shortopts__longopts__longindoption::nameoption::has_argoption::flagoption::val_GETOPT_INT_H_getopt_internal__long_only__posixly_correct_getopt_data__initialized__nextcharREQUIRE_ORDERPERMUTERETURN_IN_ORDER__ordering__first_nonopt__last_nonopt_LIBCUSE_NONOPTION_FLAGS__nonoption_flags_max_len__nonoption_flags_len_GETOPT_DATA_INITIALIZER_getopt_internal_r__data_getopt_long_r_getopt_long_only_r_getopt_data::optind_getopt_data::opterr_getopt_data::optopt_getopt_data::optarg_getopt_data::__initialized_getopt_data::__nextchar_getopt_data::__unnamed_0026_1_getopt_data::RETURN_IN_ORDER_getopt_data::PERMUTE_getopt_data::REQUIRE_ORDER_getopt_data::__ordering_getopt_data::__posixly_correct_getopt_data::__first_nonopt_getopt_data::__last_nonopt_LIBGETTEXT_H__sun__GNUG__cstdlib_GLIBCXX_HAVE_LIBINTL_HgettextMsgidDomainnamedcgettextCategoryngettextMsgid1Msgid2dngettextdcngettexttextdomainbindtextdomainDirnamebind_textdomain_codesetCodesetgettext_noopStringgetopt.hunistd.hVMSunixlibc:\libtasn1\gl\gettext.h_USE_IN_LIBIOwcharattribute_hiddenc:\libtasn1\gl\getopt_int.hgetopt_dataHAVE_DECL_GETENV__libc_argc__libc_argv__getopt_nonoption_flagsSWAP_FLAGSch1ch2__tmpexchangemiddletemnew_str__mempcpy_getopt_initializeoptstringposixly_correctorig_strlongoptslongindlong_onlyprint_errorsNONOPTION_Pnameendpfoundexactambigindfoundbuf__asprintf_IO_flockfileold_flags2_IO_FILE_flags2_IO_FLAGS2_NOTCANCEL__fxprintf_IO_funlockfilePOSIXLY_CORRECTTESTdigit_optindthis_option_optind__unnamed_0028_1optionsopt_indexc:\libtasn1\gl\getopt.hTest_tree_asn1_tab.cP ®m3võEÀ\pd"ße9÷PÆ‚µ9Œ:‡ XOÍ‘…’k¦k5’D_Äî 9MA^ÓjË#P)ä{Þ,h÷Q;K¹¨`;€nBPªÙe¯Pg<7\Ò]Tqx’ð8ãP*\,YßO TBáh±ƒAU…‚vLîhiÏ#v{F·d¤Rye‡×[‘°5¹‰í[Ù—Um ztV>ïSÔs†•ä\†˜®84 =Û•0†WhLdF\}Ê3ômóñ@¢”ÌLÿg^¬zk!DWa€ë]w}*L]ƒ(EÄBÓnz‚ö§cüå`€ |¾èi»ƒ`s["/k+°O p¢W[{Uëg c·Tÿ_ži ŽäŒZ—€QMœgý jp†°Eï>ÜA‡âSq2—F±iCˆWtK rn Pûn p½€<Àfˆ[¬9Æ &:þLÚ†l‘o‰û‡rÈ„²3ŠwÉ_1+ù83[þ3¶>I6ëM¤968}K9ž&`H'bÏTâ•-ˆÈ8½g°x{,!$+{‡€ž‡ÉQ‹ –øÉw4áqÝgr­6*P pÌw•d&"Á]—LÔpÓ/Û\›‰f˜MhÕ„#Ië„âAùñd˜b>ŒsCó?ojC5‹•AIŒ1l6˜/~–{qY8vÁ| }0Ä <Å”vŒç\W®>L „¹Z2?´DÔ}âwÙT†@_ð2Gv:s2?æ:yU¸NŒVÖ~|EwlGÍB°S{oRXI&y<Þup ‡—%#fÄ$U7fj™TQ?þNbMD—7Ù’ÂNéoR2>”Ãu4R!ñŽeH‘ëCŽ+¦•÷6Y‡ùUGÞaR^^:ýS-QjÔ"ë“Yòcq·1Gr 4‘0Lèhx-—N òYªd|KòL°]³@)”GksUnqA˜K3žR’÷”–fd`@Nv&9—zøo•ä'C0!¦F}•ù$mž@GRÇ\.^‰§s;zc={Á.7´zŠI^ÆAÈ=wq^‰IFIí—‹ V€Ëj#)^æ3rämÍ’i.†[샚fÛx¥è1S‹@a k0CE}æ9G‚,¢drP¦{'YìlÊsEnt»K@<?~Ø3†|€Y*g¿m†ÚP>‡x{Ú5HEŽ¢KaBEHNk-ÿB-‹¥‘Ò*÷D¡rOŒ@óA‚ÏXÐ> 7E:^@ˆD$|D_]YTr ÿª¹ ñ/{hk J8rNC?±‰ ‹æ=ÊfºM4x±já;n :Š5¼]»Y†’r¬ÑR÷TèL\qxŽ4­axz–pÔqætçeC/Tù}|e©‰†³CÎ@ÈDd[ö‡ŽéAf YØ…½‘4 F³Q…ûguHß`p®†š]!Lf–Ÿvd¬I ,TΆ[ÜEc’ÑPÙ9"w†±/Êœ(iMuÓa+¡—Ž8bˆNbsg^¸V›.“boSdCŠ&3ª+î!ji[B„p!‹èƒn’ý=£Bzœ‚-#¡e~'†HÒ‰ð|1i.XXpúOBéYs*B@LK¶ ü@JwM”5üö5>>Ð /-{/`"ƒŽ —T^b¤l`]·a. lIÄ?ÛYæ-Ö#‹~+#oýE {lgc~¬n>lâ|$CWa\wÒvå@h+&—õýd>#¢h16mHúiÐ#~yä8NÛŠŸO¼!`›l¬D¡4P:NÄL+B“üzŽ(òiª'KF;?o,gw‰y¾>Z~…cx„ý-£[r“ŽÕ^o{P>xv6`ÔŸø‰Ò‚Õœ`žÈ{=…8„o6Zv¶r64f%HypxôŠ”†§e~AÃFdÝI3EYJziQ€0Y·6%JÄŽ&P>C¿•×,€}g/Ah+nhOMC€ëhGq·WØ-Æ<E3’«²rêj¸Q¢’äcŒh“‹r«ª\®3pV® ± t\m„µ…ápÒdT+™ZHj8A¹Fr‹d{œZO³B½ XQ¦'8'1|ë?Î1ˆiÒGgeÀ}1rÏeDÚ8Q± D^i•ï…Ï„µHQ5mb‘¨ŽÇNa3ƒ=ÌJZuœEƒ{<¨ £80X=Gðz‹'|RpÎg¨#=r«qrBëlñyÊLEJ^lk¨ø…F÷—à;6a5z\Z1q”">}S"ë°ˆ:gé‚i€ÃŠËVH_i‘G’>ƒU´<’M>3íb+t»=©˜9M@ VTG‡QP\94;›?C# o1F¤y^Q‰CfàKØfŠN×NQ˜ä7‘Îxä†NUàMÃr*49ˆøuŽ :êe[>]F‡!é<ÀSÎI°ëö-WW•…_j¸ŠÒ@'Så6à5µ2Ýek&i É2g‰½%%·¢z¬ývq`t 2‚mo|&Íqêsv…ŒY3Œ{õhÌPQJ\BK“q_7Ã!@ȈYÑ ú^ EƒÏtÜt—š6mD 6êxóë ?N Ìzvå…Û@ÇW25dˆVÏK˜8¨N7WÂcn3ó\èXýh£1á3M)1¥Ñ ìFÄ@”l '¾[ìDC.d§€F:TcÅgÄ5.Df)`ŠŠhŸŒìaNw_‹\­+"Vfl}-T±-Ü“(áM•C(’€A-GO"ch@·s†l‡‘˜ÒTƒÜïkˆgÎSz…be*—0À4q½‚ÑKÄ0’«—y“ DYm:m5%ŸP8L²:U,r¹ yŠ;4¥ ^EæKŒn……©UýTÁzh=Êk€|Ù §~çk­Msw]…7“ÈEâ)Ï xC$r¯pdSd}åJ)dÃMv>TN·Ž$a¬7LNÝ‚do]D5²¼;fA¶.$e.—@O·f·8)>Öê+=Â6e^= ·)bt98yaL¬‰ ,2 Ü"6c£-Ï#zZ$Q]q$#F¿võã]÷3e“jXN5@Š2<„ˆã(I{«giŒÕ“4—Xjm—Øzg~kk¤bj®;RLù;Ãj)WyXóCk3‡< Js‘çF=©-fB1ƒù?‰}5#>CLÍ6i^ŽW‚P²N0xÁ;7hc† ÷Ÿ˜.' A×r<~jöV[ìIé•’‡Û”voK¦A´=q‚»'%€…æç€vŸTf4ŒsSF­uO&Ce2]hE{OK¡S[k޾IIDš–=V%6Ïpfq<—n·úŽÖE¦…¨a‚oï:˜^zwR1:ID“g’_= –\–6ÝN•%‰ꑊH¨‡‡o‡Ød«@ÏoÉ haÍ5–N>v#Pkè€ØzŸaÁ˜wÃqþ€ixGAÃ-[£gÛKmê–ys‡{â?pdWc¡j=Niô7 7zˆ€R¼Lýj\T– B´L7A‘ï|rÚLa-—˜ÁZ› @H(j*WRÆ~<ˆ˜hL1ÄV¿0‹Lu[€þ>=—\‚£6S e\:Î…´!Œƒ”™—€Æ +D>|Âe~T Ig‰ƒiÆ9´u7­R˜#a½pRÆU8=wt€¦DfHbP‘n/U©jë^cL¥†z= ¹t%s%‹Hø\¸÷R^8@–ªGwÔS"j  Qþ.º€š†(O=A/ÂoˆkÄ6 ŠñÔkÁvkYƒG]!˜V#TÂYP½HGî;ç»jØ!ŽN€@EuuT¸@ Š<"M’?o`<a˜¨‚M‹®"ÚDx)pg…2R&lWM4yF+Œ„1M[Œ§osŠmn…äiÓÇß\0pÆ1Þ`N…N0=â<ÿbTÍ?ØOpøÀÖ5br™_¤`.êuëŽÄGKt¬TZP±W'_»rôF:ë‹×wšˆ >©ƒTV. RP~œr¼’ˆ”M–DB#J³|b\¢×F²úK‡Aƒ 8Új¾@³?™Q©ªH=ŽIG@[9l£qeRS{UUGè~P—Y«<‰Où”.pp‡t?u—S]¢¶|w|:(¸k#GO’AqÁ7=P‚o”­[Aµ¿x$ùMGðGÜbØx_“o—>îYaOrEH‡qP·4ry›žHb?$ AiB%‹–è—a‡¼Ã{S#QúA®F£Er‡/Ó—Ñ<åZ9Ò3—cú``r@t Šótœdfì1`v^  uR,kM‰K—b3o.B“ôT6€q÷Nc 5îOnAmÙVr–Bn22—‘X$=±‚¡ƒae( - ÞŸV<µ~ØKhÍ€‘kÖoé!/j.xZl#LrºhpÅn7ÀUg8vA¶v£H –|€æhy$.V3¹)Š ¯€²ŽT8ìPene‚ÿ“zvá&krWÆ»#8†p.Lx`…ßFÜvißcÄO}ÄkÖŽXecf7GÕ>épJou‰?ƒj6ï`ï$³P‘SÓ˜|Ô‹Ê;´nÇ4O_1Ž3DŽtQòN+@¸Gì—ÁKF„éR– ±–ÞWÏ tþ•4w.Aö–P‰}‘™rû€ ]8>RŽ-o›lÒ×],]>kxECZQÎO¤Och( ·‡õašE!ÇO‡œA"R‰hüw+?*$xQ7 2B¨‹zO>±7™;˜5¹AÇp¿<'ÅaÙ< #?k‡H—§Ly?@tKHÃ>lTø!åCra‘@q=‹4ÿsë‡6a§”nˆ MYv$‘£_Ùq½?•–y\L=Fq~¾nái  ™U†6-ahm¿3qv‡ôsN_N:ŠMÃÞd¦R§rUŠ•‘or©“¹Ó;„ó‚lq8–úxIzàs0súHw“JN¤MY¨WÖEÄ|>¹›aYxÏßfü3\…‰÷ †w‹ð-¼o'!äEÉMã"Aw"51O`³g»8Í|]¾Eý\@j`XÅR?6¸—hUÎ&T9°kÄ#ŽNàX1‹b"‡nj\×\úqWiÔ7ÝCNC¶p*‡âðˆÕ€†€5Cb0zWî6ÿ&ÎÒ•Ý> Œd‚V5{ÿˆŽcx19‹¥P™HÁ EVs%<©PqFÝZ ‹«Y‡b¸`jˆ_ ¤ë’äD©>”ECS6^|+„Ô 6°TÀPjmGˆ"TYAZ§| ø’˜vÀ†¤JßÌW™~£@aK2ÛB z+3rufTˆão—?ˉ)l3TZj3¾:Jpm4‚“9K0·ljz/.H9{Pe³„°ñ!Ñm'dÂs:@¹„ËÄH‘e ‡©^Þ ²†Ž•6pe^»O–^'$0_;qs˜]áYKB[n}6¦uÜ<Ÿ3(w_¨€to’€-9šuN+qù<J%X*N¯H‰(Ðu•’¦Tw3 –¶dkùCV.[‘<_ëiáeÏ“ 3Ȭ„¤;ªZw—ä0$]\×6ŸGć™-Áud)qŽ˜PëN32–s׃ßLz9EM¶º(£ná.ñnÄ—çnâŽÈlÈ>OˆÌC?e1u?d®Š_)]ï3ó•Q]MDkÞ±#‘‰ÐDdcDØQ¢pÛt.9iåO†>óŠzÕY‰c„ŒS}jù…\I€EÕh@}²AKƒïw×g¦ˆûfM‰4€«}œk˜ìE0 ¯wK‘vo<ð!K!ÕL¢Nºâ‡EmÅ£wºDãU„r$Ú‡L<ÞG„!Ì4å+ìWþPSY~|>I¬ŠFQ5!ÈGs8*MOØR=€ ?/D¼!ù+µoœ$‹|°håÝJzhJ=ac†çB©Qûp‰‡”iÞR^`žs›C4€ÿ&‚©Í–x T‘ÛlE…Íh–<=bðÚpþ‚wxU_KZÅ N~~v5à „5/€=fÒMQ“®•euŠZî-ÖAÑ :·_L7«=‚Sd8pCé è%@ š[•ŠŽs 3 Æž+ÊTÉŽ¯vÑFiΪpµ:°0àŒ ¹q1]\Ù N«ðòo1çV:šoÃh›XŽ}¢‰Êr9üZj–IiÆ|^Ó9(áõ_õgo\K?F/6ó€Q4Ü õ @;&S”M FÜkÜrçvPiv”YEÀbÌ`¨.À6^»h–‡ã Vg’deO1>Œ`}+R*ªV:k´†Ô#¤Z¦ RQä„8futƒž<§vn}üW”H5J} ~‡Û+S&ps‚EqH§5š,zñJó†E—Ü2$h„ÊS*F³Y“‰]¹ƒƒh `‡d¹‘ažF_“d »9EWÜoÏŠ(/ »~‰S0•ÖÃ…A8‹úk|8‚'A|Cs§@ÑçQç‚O5õ3ÍUˆiôTnmITå‰QSÜ *MÀƒÏM!o‚ŒÓV®s¨v”2H!ÊvHeÓYo £,î54«bW’?QS\Z¦iÔ|%u§X•KÀ{zQ†9B†7ht0}ÿ5KOË'“ 4†_ X›€Ž!¿^ÉodÌdokvœY=Þ‘$[!wV@7oÜnÖ_á 6t¶E7rjg_llL;‚hˆYCòƒ‹/ö Ö{/Ì—#T½_›L"{ˆ9cI$îqY!kb…xþ‘l8TI…;î´{ú–JXµw ‘®e®’G;¶‘€Yˆl‡ ù>¡x(nl¡*î,Û#xj%Gg¬W::=9KL!Zr;ÏŒ¼wË-"ájN|6JJ¨†3!}]42NÖ?Š^¾‹âN“}XdXbÑ,ç}.PF$Õb®LÉ•¿CAσ;b­ŽÃt÷S>u¡A‚ŽcXl¯oob„Ï.µJÚN»>% :Q‰vX4ïrEÐ:æ5£_—wY<-e4Ÿ9 ~û³qn ]³ÌÂD Sdž$’ GàVP=!q–Gi?€u–NQ`Æ^†.w<ãgß—vinÿo p9ŒuxJMn]x±Ð˜B|B!OÈn]–Á^z=“ ÷KQ-u „õqhËHâz%7x=~fñvlòptjÎEá<a%@¥q†-ð)¹5ÉFEYu6““oiÌ-Sf.…“‚tsym1ŠÂ“T– .pÛ_`GØM yCG‚zvjedeñjöc÷]×—…j‹B„aOñ„ŒôMáz@.ð9'€DgŠ8Jje)‹ØŒçŠºRt oI-¤ ‹—ŠwÆŠz“qù“xÝ“}´|r!üwÐüz'*E!   00224CCEOOTTU¥´¶¼¾;ŠŠE}––® 24ORUX´¶¼¾Áùú®sH7oq7r·sI€D  ,F;<€n:D€qørup€uz€vŸFJ|ccddeeffgghhiijjppppqqqqrrss€|z}€}±iDéo«épßâ¦rn9Eòo«òpâruz|ryùÛ# F¦<[n,.[rÛtlÛxã[{9$$rl$xÔ¤yú$|rt F<G6T}~ ok–Ôú– ,on–pÊÌ.­r–s@xÒyèé–yú–{@V|qsÿo¬ÿsXwÅÈ !¦¬­®¯°±²³´ÈnMPÈ{PUwÑ ââ6¦¦Ñëö02Ñ,OU¶¾:s69ƒBƒFlSbõq Þ ]rêõú (8A)Þuƒ^z^|v§o¤§r'+§sF§|ƒ0Š0!`c¢³µ°TG—0p±0s50xÕ°xß0z0}’’ "Õ CEMNT`cx{|…ˆ¢¤³µ¸¹»½ÈÉÛÜÝÞßàçé:; 0‘íîøùûý&')+12345679;<=>?HIJKLMNORTUXZ[\^_`abcdeijklmnpqrwxy{|~€ƒ„…†ˆ©ª«¬­®¯°±³´µ¶¸¹»¼½¾ÁÄÅÆÇÈÉÊËÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèéùú "#$%&'(*,­q–íîøùûý&')+.12345679;<=>?HIJKLMNORTUXZ[\^_`abcdeijklmnpqrstuwxyz{|~€ƒ„…†ˆ©ª«¬­®¯°±³´µ¶¸¹»¼½¾ÁÄÅÆÇÈÉÊËÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèéùú "#$%&'(*,­™r&)b<=>?â?ó1133MMNNyy||……ˆˆÝÝààççéé…‘‘brbtcâwÎâz$&â|‡“KtaT  ššT#$%&T+F<Tn,ÔpÕTqó‘ÔqjkTrÔsLMÔ|†’½ V»¼ÄÅÆÒÔÕíîïñòóôöøùûýþÿ$,0GHI^apqrstu˜šœž ¢£©ª®¯ÄÆÔÕÖרÙ12>?@z{‚„…†‡ˆ‰Š‹²³½pÓ®=r={12†fw±o,RÁorïr/ïwÏo{<o|wxG45øo¬cøu†ˆxzx{>QÁAqòÁuAw»¼ÁzªMPªpÏc³@“³q“3vŽœ LORU[\ƒ„†‡¥´¶¼¾Áæèw´µ¶ùe9Þ ¢en4euxνÎ&úÎ@¼ïðGš›žŸ ?@‹±³Nv™Nw¼½¾ÎxâN|u×r-Wtb×wÍ oŸFKluw p¯ tg‰v V yæ‰yú‰}²p®’r%´t[}Š–{Ýä ¡¨ûni{o“–ûpâ¦ÄýÄ@AÕÕ1<<==>>??LLMN[[\\``ccxx{{ƒƒ„„…††‡‡ˆ»½ÈÈÉÉÛÛÜÜÞÞßßææçèèé##$$%%&&Ä|…‘-#QWÀø-opŸ6sD‚»¼¿ÁÄÅÆÊÌÏÐÑÒÔÕØÚéëíîïñòóôôööøùûýþÿ$,0@BGHI^apqrstu“•˜šœž ¢£©ª®¯ÄÆÔÕÖרÙ./011228>?@z{‚ƒ„…†‡ˆ‰Š‹­¯²³¶>Eùý'+7;=?ijklmnpqrstuwxy{|~€ƒ„…†‡ˆÍÎÏÐÑÒÔÕÖרÙÛÜÝÞßàâãäæçèé"$&(,6pµ¶pÑ6t_¶v©¶|„v¼ÁÊÌÏÐÕØÚïðòòóóóþÿÿ -.001123<=>?CGLMMNNORT[\`cfxy{|ƒ„……†‡ˆˆ• ¢¤³µ¸¹»»¼½½¾ÁÈÉÛÜÝÞßàæççèéé#$%&.:@„„………††ˆˆŠŠ‹­¯±³CòòóóRR¼¾ÁÁ„„……ŠŠ‘‘rhlŸv¤¥?@ABCDEFGHIJKLMNOPQØ Dÿÿ@BXZlnRyT`ht"z0`kN Ó !.9FOR^frc ,46DL\dpxzCT`ht“xh<T`ht,'?WkÄw`¤y ;?@HJhkltvz6 z,z02HJ`btv››G‚@ÿÿAšš;‚@ÿÿE™™2‚@ÿÿH˜˜&‚@ÿÿL——‚@ÿÿO––‚@ÿÿS••‚@ÿÿV””ü@ÿÿZ““ó@ÿÿ]’’æ@ÿÿa‘‘Ü@ÿÿdÐ@ÿÿhÇ@ÿÿkŽŽ»@ÿÿo²@ÿÿrŒŒ¦@ÿÿv‹‹@ÿÿyŠŠ‘@ÿÿ}‰‰ˆ@ÿÿ€ˆˆo@ÿÿƒ~~e@ÿÿ†}}[@ÿÿ‰||Q@ÿÿŒ{{F@ÿÿzz=@ÿÿ“yy2@ÿÿ—xx)@ÿÿšww!@ÿÿvv@ÿÿ uu@ÿÿ¤tt@ÿÿ§ssû€@ÿÿ«rró€@ÿÿ®qqè€@ÿÿ²ppà€@ÿÿµooÕ€@ÿÿ¹nnÍ€@ÿÿ¼mm€@ÿÿÀllº€@ÿÿÃkk¯€@ÿÿÇjj§€@ÿÿÊii›€@ÿÿÎhh’€@ÿÿÑgg‡€@ÿÿÕffÊT@ÿÿØee|€@ÿÿÜddt€@ÿÿßcci€@ÿÿãbba€@ÿÿæaaV€@ÿÿê``N€@ÿÿí__C€@ÿÿò^^4€@ÿÿö]]±@ÿÿ÷<<¢@ÿÿù::š@ÿÿú77l@ÿÿû,,t@ÿÿý**¹ƒ @ÿÿþvv±ƒ @ÿÿÿuu©ƒ @ÿÿtt¡ƒ @ÿÿssó‚ @ÿÿddÝ‚ @ÿÿcc—ƒ @ÿÿ bbŒƒ @ÿÿ aaé‚ @ÿÿ__Ò‚ @ÿÿ^^o @ÿÿ]]e @ÿÿ\\]ƒ @ÿÿWW[ @ÿÿQ @ÿÿ= @ÿÿ) @ÿÿ @ÿÿ!û€ @ÿÿ$è€ @ÿÿ'Õ€ @ÿÿ*€ @ÿÿ-¯€ @ÿÿ0›€ @ÿÿ3‡€ @ÿÿ6|€ @ÿÿ9i€ @ÿÿ<  V€ @ÿÿ?  Kƒ @ÿÿC  1ƒ @ÿÿGƒ @ÿÿJÓÓx @ÿÿK°°%€ @ÿÿL€ @ÿÿMVV€ @ÿÿNUUÿ @ÿÿOSSô @ÿÿPRRç @ÿÿQQQÜ @ÿÿRPPÒ @ÿÿSNNÈ @ÿÿTMMÁ @ÿÿULLº @ÿÿVKK‚ @ÿÿW44^ @ÿÿX&&1 @ÿÿY& @ÿÿZ*[¦e¦t¦*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦e¦ÄT»¦*[¦e¦t¦z•[¦ÄT–¦z•[¦Šfz•[¦ÄT–¦z•[¦Šf*^ŒÄTð¦*^ŒgE*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*[¦ÄT–¦*[¦Šf*^ŒgE*^ŒgE*^ŒgE*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒgE*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^ŒÄTð¦*^ŒgE*^Œ §ÄT§*^Œ §(f3§3§nED§›*›*nE]§f§p§z§„§%£«§®§%£«§Õ§%£«§û§%£«§!¨%£A¨%£a¨%£€¨%£7Ÿ¨¯¨µ¨¯¨Ï¨¯¨à¨¯¨ñ¨¯¨©©¯¨©E©¯¨©x©¯¨©©¯¨©»©¯¨©Ù©¯¨©õ©¯¨©ª¯¨©1ª¯¨©Oª¯¨©mª¯¨âª©èª¯¨âª©8«âläl77U«l«s«x«}«‚«‡«‹«°l´l7«77žG"‡€fÇŽ&?G‚š,EÐ3LP‚›9R¹ƒqv‚34€lkÙ"{ël]^_`abcdefghijklmnopqrstuvwxyz{|}~ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¢£¤¥¦§©ª«¬æèêìîðòô÷úý<=>?@ABCDEFGIJKLMNOPQRSUnopqt&*.ô Rââøù+8DQ4€]ÚÛÜÝÞßàáâãäçéëíïñóõøûþt€cÜêtƒ":KŠ$=‚–*C_Ý‚ªc]ƒW&3 &¦‹1Jæ‘4M&‚—7PdÏ IJKLMNOPQRSÏM¯€jo~]qv8>Ð8v€%VÚÚááââããççõöøùûü #*+,0789<CDEIPQRx‚°A- a-.^`bdfhjlnprtxz‰‹‘“•—™› £¥§ª¬É IJKLMNOPQRSÁ LVÜÜëë%2>Ka€aÛè!v¡ƒnsÊTeÝì3vó€qãúó’(A“‚¢ó‚¬d\9ÜPààââããóóøùûü)+,689BDEOQR|€dÜ'@ü“5N\‚œ-Fœ‚£%€[me}\pue‚:S…‚ Eƒ   N®Ž>ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œž¢¢££¤¤¥¥¦§©ª«¬®<=>?@ABCDEFGIJKLMNOPQRSÎ@ÐN€_Úæ\tw ÷9É—ƒb€ _aceimuvwyÀ{gÚÚÚÛÛÛÜÜÜÝÝÝÞÞÞßßßàààáááâââãããäää##$$%%&&''(())**++,,--..00112233445566778899::\\\]]]^^^___aaabbbcccdddà€oâ÷i+6;Â"i€b )wé‚«_‰ƒ00112233445566778899::aabbccdd©ƒot:ÑÑÓÓ²:LÒ Nßßññ(5AN€U’€gÞî2x²Œ%>2‚˜+DÒ‚©^{Ï»9»¾ÀÚÛÜÝÞßàáâãäçéëíïñóõøûþûR›€hû€r[|ot»2K;‚™8QdS*,7:<]^_`abcdefghijklmnopqrstuvwxyz{|}~ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¢£¤¥¦§©ª«¬®ÄÈÉÐnopq$. ä{#½Ø€S.GÍ€máô]¶>U^`bdfhjlnprtxz‰‹‘“•—™› £¥§ª¬         IIJJKKLLMMNNOOPPQQRRSSV€` au]]^^_`abcdefghijklmnopqrstuvwxyz{|}~ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¢£¤¥¦¦§§©ª«¬®®ÐÐæèêìîðòô÷úý<=>?@ABCDEFGIJKLMNOPQRSnopqÿ SÞÞïï'4@M€V?ƒ&       ¨ +^`bdfhjlnprtxz‰‹‘“•—™› £¥§ª¬IJKLMNOPQRSÈnopqèi›]^_`abcdefghijklmnopqrstuvwxyz{|}~ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¢£¤¥¦§©ª«¬®æççèééêëëìííîïïðññòóóôõö÷øùúûüýþÿ<<==>>??@@AABBCCDDEEFFGGIIJJKKLLMMNNOOPPQQRRSSUUnopqH 5CµÈ%MÝÝááââããííõöøùûü&*+,3789?CDELPQR€UUè€pˆˆ#<^‚”)B¨‚¤ƒÐÑ1±<>Q{ns‘‰0Ic‚•6Oq‚ž.G±‚¥1ƒ ±ƒpuš7º KVÛÛéé $1=Jº€kàòz‚ŸUãPC€^ l#½Øl$,.Œƒa•:<¦§®Õ€nbƒÑÓÚÛÜÝÞßàáâãäçéëíïñóöùüÿ^"$&ÓUþ‚®ç Qääþÿ-:FS§€ißððQÙ9¾ÄÆÙNuYƒ¢:>"ƒKƒ   Tii:ÑÑÓÓ=€]^¦§®=y½‚¦®#$%&'()*+,-<=>?@ABCDEF†.Æ9ÀÆÈsäýFzÆ‚§0123456789:IJKLMNOPQRSè~ DÿÿYY¥‘@ÿÿÒÕH‘@ÿÿÎÑ¢@ÿÿÊË× @ÿÿ ¨x’@0¢¢…’@0¥¥•’@0¦¦¢’@0§§¶‘@ÿÿˆˆA‘@ÿÿ„„[‘@ÿÿT‘@ÿÿqq5’ @ÿÿ®®÷ @ÿÿ­­ë @ÿÿ¬¬’ Dÿÿcc’ @ÿÿ"^^ê‘ @ÿÿ#MM}‘ @ÿÿ$*Å*Å?ÅWÅpÅÅ*Å*Å?ÅWÅpÅÅ*Å*Å?źÅKo*N*****Ô(ºl C C7ÞÅâÅæÅjB C('d--..//× ÐÔ÷­‡‘!%IŠÍG’ÊÎÒW’ÊÏÓ0’¦‰4"qH^A‘*44„²N#¢&00Êê‘KMÎÒk`gÙë¬[‘+55c’ÐÔD"#$¬W¢T‘)33q$’^$}‘•‘!/J¥‘(22Ò½‘-.Í‘./5’®ö--..®MîY§¶‘,66ˆÞ‘/0123456þ‘X’\acËÑÕ’]^`n’ÐÔO’ÊÎÒH‘'11Î(’¥¥¥•’@0¦¦¢’@0§§¶‘@ÿÿˆˆA‘@ÿÿ„„[‘@ÿÿT‘@ÿÿqq5’ @ÿÿ®®÷ @ÿÿ­­ë @ÿÿ¬¬’ Dÿÿcc’ @ÿÿ"^^ê‘ @ÿÿ#MM}‘ @ÿÿ$*Å*Å?ÅWÅpÅÅ*Å*Å?ÅWÅpÅÅ*Å*Å?źÅKo*N*****Ô(ºl C C7ÞÅâÅæÅjB C('d--..//× ÐÔ÷­‡‘!%IŠÍG’ÊÎÒW’ÊÏÓ0’¦‰4"qH^A‘*44„²N#¢&00Êê‘KMÎÒk`gÙë¬[‘+55c’ÐÔD"#$¬W¢T‘)33q$’^$}‘•‘!/J¥‘(22Ò½‘-.Í‘./5’®ö--ª¶£/O2/I../../lib/FD/EHsc/MT/FoDebug\\/FdDebug\vc80.pdb/nologo/c/TP/errorReport:prompt/DSIZEOF_UNSIGNED_LONG_INT=4/DSIZEOF_UNSIGNED_INT=4/D_M_X86_M_X86”ž/ACWDc:\libtasn1\windows\libtasn1\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"23C:\libtasn1\windows\c:\libtasn1\windows\libtasn1\ºÐã ½n/O2/I..\..\lib/FD/EHsc/MT/FoDebug\\/FdDebug\vc80.pdb/nologo/c/TP/errorReport:prompt/D_M_X86_M_X86 “ºŸ/ACWDc:\libtasn1\windows\test-tree\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"2¼4C:\libtasn1\windows\c:\libtasn1\windows\test-tree\ؽàp ½n/O2/I..\..\lib/FD/EHsc/MT/FoDebug\\/FdDebug\vc80.pdb/nologo/c/TP/errorReport:prompt/D_M_X86_M_X86 ¾¡/ACWDc:\libtasn1\windows\test-parser\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"¬¿6C:\libtasn1\windows\c:\libtasn1\windows\test-parser\PÀxùjË’/O2/I..\..\lib/I./I..\gnulib/I..\..\gl/FD/EHsc/MT/FoDebug\\/FdDebug\vc80.pdb/nologo/c/TP/errorReport:prompt/D_M_X86prompt /D_M_X86ƒÀ¡/ACWDc:\libtasn1\windows\asn1-parser\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"$Â6C:\libtasn1\windows\c:\libtasn1\windows\asn1-parser\÷Âè.f/O2/I./FD/EHsc/MT/FoDebug\\/FdDebug\vc80.pdb/nologo/c/TP/errorReport:prompt/D_M_X86_M_X86 Ü/ACWDc:\libtasn1\windows\gnulib\-IC:\Program Files\Microsoft Visual Studio 8\VC\include-IC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include-IC:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include-IC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include-AIC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727-AIC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\libdio 8\VC\atlmfc\lib"¼Ä1C:\libtasn1\windows\c:\libtasn1\windows\gnulib\,,,eÁ+ê0 ÑDÿÿ˜™š ›_$¸»ÜÞàâæèëíïñõ÷üþþ !.4JLVfimpæ+-FHTOT\^cþèôú ,6;?JO“©ª¬r’  § ª | A”&3C!248@BF»®ðÌ5”&3Cÿÿ:•7$&(+246<Œ§­²´¼¾ÆÍÛÞæèîðöøþ ,.248:CEJLMOWYZ_lnvy‚†‘˜š›Ÿ¤¦¬®¼¾ÄËÎÐÖÙáèêïðòúü "(*@JMORTóGKÛÝáãçéíòûî±®”&3Cÿÿ:âæ÷ÂÍÏ•(ì”&3Cÿÿ• *,029;CEGQVbjyy……ÃE9cï ”&3Cÿÿ("# #_&,8;=?lvŸ¡¦©Üàâèøüþ)/69;DPX[my…‡¥¯°¼6K—šž ¹ÄÅÑÕØõøüþ%(F#"q”&3Cÿÿ #NUXZh…PuDê¦Dÿÿ !iuFU ¨ =   !šøvX¨ =! !#za× ¦D ÿÿ !>z‘D   !›B~-¤úÈýC ÿÿ !mrm€ tD;ëC ÿÿp}†€cD ÿÿ   ™Ÿ€53r6D #   ˜¬‚ 1¦îCÿÿƒ$WŸúÈýCÿÿ  6ƒ¦îCÿÿ  "k„:¶úÈýCÿÿ !"(†ÌýCÿÿI†?ÆýC ÿÿ "$&(*,-/c†Å ”&3C ÿÿ"#( " !'[]adhj’ÇÊÎÐãæêìNQUW]‘fs~ ”&3C yþ("#) !KNadw}‹Ž”—°²¾ÀÉË×ÙÝàäæ’”ðô  DGSWbmy|˜¡¤¨ª›‘ 1ã”&3C ÿÿþ57¦{ZÞ”&3C ÿÿ $Y #%-/=?»ÊÏÒØ";;VmrŸ«[ Ñü¦D ÿÿ"##" $º« ;”&3C ÿÿ" "()+.138:Aü«d“”&3C n # *04:?ACFHKMRT[bilrÇÉãæ9¬ @”&3C ÿÿ,̬ $â”&3C ÿÿ Rëµ'Ÿ²? ÿÿ# f¼$!Ñ6ëC &!"#$Êÿÿÿÿ⿵6ëC"ÿÿ Z ªÙ%D#ÿÿ +!%(#%;DlnÅ$nÏ#D#ÿÿY%!7JL`b$Ê&D#ÿÿ$()#(êÅ2;Š"D(ÿÿ)(DgjKÇ #\Š"D(ÿÿ(*"$).?È0Gx#D(ÿÿ%'*&D!#%').0moq‹¥¹${#<?DHQV^n“²µº½ÅÈÎÝô÷üÿ 9L‘§»Îâ)VXd¨‹ÉŠ"D)ÿÿ%&"$S­ÊÿÿÿÿHÊË$D#ÿÿ#!* ‚@(@ €    @( @€ 9¬?È(f¼ k„m€ †€•(Ÿ€̬Å$Pu]‘iu‹É)›‘ÃEêÅ&ëµF¦#z $Ê%(†>z B~ HÊ+I†ZÂ#c†e|¬‚»øv ûƒ6ƒKÇ'Ÿ«º«â¿"ü«!*Ù‹–Æ9÷9iY<`<› )‰ºëƒN4Õ=v/—Ï IÃ…ë Y!ã"Ž!>#Ã!ø!-"b"ˆ"®"l#Û#­+$I$;&k&q$œ$ž&Î&Ä$'.'ï$%^'‹'B%j%•%½%è%&»'ä'£,(*?*9(e(>,o,Ž(s*¡*º(ã(Ò*+)8)d))¹)â)x ¾i «Œ¿"¨“A5îlSõªŠ{%ÔN<Új šÆp­]–Cnáçz˜d¥£.@UÃÅ^xG‡!I_1ÿ ƒ¼'nóï.Á¥ NõØÓ¤Þēއ ¦ cvðøÑ +<ª“ é G`Öá¹ '‘QÃÑ™;å… Ž r¨[ê‘’Ë0‡ Á bî $x ± TÜ p ¨ <Ñ ¹!E]½ Ô  Þ | S ƒ ÷ ® N  Å Æ j = p ã – =  _ . d 3 ö YoQoeé‚Ò‚ - :Ù9:ÁC–©ó  s $ ­ P M Ït K ô ( É œáŠ _ < < ¶^ 7 Ü  ¶ ‡ 2  ^tðá¢^àT+1+h+·Þ¸‰yÓ;î; % †[ù'†–yg<kk›[>—0C>CYC›C³CxC‰C€îÙ ©Qã]!Z÷Y0XiŒ"VùU\ZJX¼]š]ÙTçVVTVÕ^^§Xf=V©^÷]ìWÞWedSU_2RØQe^_·WR^yX’¤ZAUXd€RÂYJ\ª\vŒÌWÍU÷QÉQçQ"RŠ^|^pdEYœYêeãU–mY‚ÁEÜEýE®>õEFV@^@È>Õ>ìEFEHô?i?Q? :1ƒ8…@ ç«=Íi±i>l>>Ý>u çB—>N 1=rz9-9+3ˆ9C¤h€ðVgÈNÁƒFå·gBæ=5/:F,‚xGˆDd»Ó¬i¥ ¹ ¥†š†‰‡~‡%€@EÎ…È„¹„´†r‡È9ù8¤;ï…³?°ExE%Xw<Õ>3>˜|„pÈE¶E¢p§||½px{NvJp¬rnápXpq¿<do{ou+t uu|1q‡{`v¶|Ä|“q‡qÔ|¹qð|`pâ|Ãq}^E$xsw0x>x}—zŠzÖEÎEµ…¼;Ø…V3´<S;é<=ïrŠ< tï:ø…†8=P=$=ž<$|>|áqë’©“}‘Z—®’¼’“ë“Ü“ï‡úqÖ{^|¨vŸvچΆž‡’‡ÿš66Ä6·6î6å6:@+@äDÐDu6j6{&a5Bn 5gñy.…P‰m„ðˆ¬„„3R;en€nøopÂoÏoéoÜo§oppµoÕ€V€Kƒ—ƒŒƒ4€C€‡€û€…‚|€è€Â€¯€i€&‚‘e‚ó‚݂ƂÐP‚»;‚‚ü¦æ›€%@@åCÝC¤99K9€i•Wa-Q-ó†ä†·‡¨‡€|“9ÁF*F¸@«@óCëCSF1F1:&:µ:E::::Ò@•A‡AÛ@å@ñ@ü@.A+jggˆg¢‰Y‡Î‡O‡Ä‡"† Tn*g:g[nä„Õ„{FÚ8È8==N:m:^:¾nWrlv–<r¹t6tÃtÏtT9Nܾ:1|N|¦F¹F1rÈ{o|¯v±&C|:’rÃFÉFÑF×F²r§r0sšunt¦uÜvÎx¼wÛxGßF+>®;K3ÆAÑ<4;Ür‡tÐ:2HÊrˆ fHÃêstêuÞusÐukss`sts\w yAwúxØzðzÌzâzÒG GZu@teuMuVsJsJo4‡oh,h*‡‡ÿg˜hŒh ‡hh7hAhÍháhÃhÕhMhWhýhichnh(iiAi½g³g>‡3‡éAh@z@úA†@‘@ B|]€i”iviˆi¦i1Ghy(wwx0z£w…x“xRyÁz´zá;ù;-ok-ép±-G‡öÚ‡ 0 †Q…?o)2=F±‚œ‚á 6p0†k‡£6Í6÷6M@B@÷DìD}64DB;BDùC!}–{|r‹|ºX%uKt1u?uLxŠwYxhxÛtWtætótt´uztÁu^zjzÉwêxôstvvsøugw&yNwy€ubtŒuru~y4w¡xD€<"{5{+{I{={>vUGIDRDF=^=0=mG`GÈnG«<S{×wwâwïw–GŸG[{Œ:{ {¸GªGÒGÄG#vÌCCGzˆnˆ/jˆ„ˆDIzˆo{d{¦D¬D´DEEºDÂDÈD>O>'g‘Î2^ŽZ1Ž‚¦· ŽtGEŽå!ŽúRŽP=Åa>†w†ec‘e6ZÞdåZ$[[@[üZ¸`®eú^Ç\x_Û_6`Q]ÿb©U ]£_q`Ì`Ušf7\˜^–\.^…\NU YZ³Y·T~fqYpVhUDfSfôŠcffÞa¨`EU/U\d[†[Æ^¾[í[íbu[V[š[×[\*\­[ƒU™U2]aWaç©>¾>Ð> –Æ – –(-Zr;?ï>MnœÿBm5°5§5Rppyp±‰®†I…¦…CSeRITÔS8T|bRÅR1SžRÞRéRë^âSWR‡b™_dSÊSºRGR'S¼o‰g‰¹‰¿•ó•J”ÀfµÏ„Ø3^‰—?9é•$]ŠHÌo<¬TæE3îÜbbYàX4—Ö_>»8®8£ÆUd}Hpªp¯p¶p¦Tn}ÇpÔpGv‘v6;ŒœªoÚp?dw}ÀU#oq·_toŽN!q+q€};qYv˜vAqTqÇ4fq\qö€qwq¥qq³q¶v¿vÍq‚zxz”HØèÔqÙq½?Í?¢Í–H‘¥‘õqîq¦•@–‰}kvqv~‰u‰”ƽñ¬û³„=bî5æ5Eþ‚Í€N€¡ƒ¹ƒ±ƒÊTó€z‚t€à€º€§€a€‚ˆq‚\‚½‚ÇG‚²2‚‚óÜ’€™HuT~TÓnÜnV>z£-i.ž@&96c«bÀb"c „Tchceo)d5d16?6/-‘‰…‰6 6©-žH¨Žf4èX^b„›X»9¹5¾@~A8A AIŒ£gsg/`àV“g«gZõgœg›‰Ò•ë_=‹¸—&3í\Yë„a3½Hð8T‘A‘[‘×ü5’¶‘É_J}h¢d·d—FQ˜rr6--a·a‘ar$r£H,rŽ}zv€vK?C?¡A¬9³CTr[r÷R‹r,]“}U7+½_¡r™r€5v5ûno oŸÃr»rÍ5Ä5 L7]Y,YÿssÖACs:sM‹ëNšo oc RÎgÙVÒTòi$hRÅg{hëiÊ;°h‡úiØOjdëhõhdi jãgëgj1i9ij!jIiPiâAhi_ióAB(jžiªH—zw¬z¢zuHHS}+B}-Á\}Ž“Žþ•×,¨.î,¬‰»‰]…7o–sŒs§sžs©ƒ…!¨‚“‚z/TSS#TR­R¸Q‘S™ZQS°SobÑRÀS¡SoSïSýSTT÷RwRSˉe‡Š5ö5NI66¯Hk °T‰v,„r)]Ö5Ј©®s·sçvñvÂsÊsàsÔs—c%s"zwývwQjHjXj_jçkojfjvjXlYˆfl›l~jl¡j—j©j»j±jnl…jjwlÃjËjl†lÓjÚj DêjájDÄB˜B+D”l_lÔkTBKB•3vŽÊvÒv{üz®3`NOKOÇNwM]M•KºM "MEMÑK³£ßLèLQ¸NOMWMN1MŠMe»MCLÀ4÷3¤OKL¢NSN0{·4°OL¹\LcLlLRLþLòL=MàM)ÕLÚL­M NŸ3¶4¡4ÁK4§K*MÙáM MùMËÏÛ‹L›L©HŽ/vLï3— Š­÷.ì¯Uÿð£üÇ3ÿÕÏþóù=–»§µ{}ç.ÞÛêé|¯E¿bÝ~¬úËPmž?®û¸ðàgÿ1s_Hã`ü8ó ¬Fàdo>bψ¦¯/¾ò?¸…ž[›SÈ.þ?š¾íœ±a(Ícð¯gýùóü¿ÿø¹_•«~žWö=M6òhíù9þý¾ÕæŸ}¶Ú¥&wUÇèð“Ltä5šUññ>çݳ_áç¢Ãß®¼ÃñšmÒ ¹°riùö*YÙ—Ÿ«k9¿ÊkÞóÆã=øLœt‹ Ïg‡‰ý¼µŸ¯˜g9¿7Ê¥ç&ñ#uðfœPÂö–ç1¿Ô8â:ã0×_\‹7|bð—Ý?3öÈÀ×".Át9ã=>g逡oÒvƒÑèÊ'Ž~Œû¸¡ã+¬û8;1ä²/>c¶'þÙ“ÀHrJ»@j8’|tRq_V)ùðÁG¦žUžôÇøàóóò*ë‹­oü'¯Òò?Ü*ï”öy|õJ>ã?U±éµ#¼L WoÜeÅ|Ž ;è/ŸN‰LžŽ.ûT063šâøï‘X˜¢ÈÀÆCŽã5 ×Ó¤ hÄf‘s<>Ü„X%U4ÞŒK¹ÕI]\ºaS-zèåð—® .ZSÂ'2ü‚.8à ˜/8¢¬È'¸Jã¡’Z0.‹ˆªì }–"¶•ɉÑ"ƒYUÒèbŒdÜG•'žÇOcƒ÷·ù†îìãᬠ7¾*Þ˜yê§|nà™ó†8z”MNÇÏ6ÇsØÑÁü`ª€€ @ž@©À=[*Ž £@¸kÍ– (( ¿§@F)«@¦§ÄkÙ–(³@QZ(=V Êk¾¸@¤¤f 1+X[Y'¾@£Ôkê–(Ä@)½eW&ÜkTV0¼Î@F+oV%Ò@¢çkö–(Áxk=»Û@¡ïkT+W—(Eå@ pV#úkˆ$lSºñ@Ÿ‘#Þh+V—((Y&'?‚V#"ü@žl&—(" *—(e¹V#}+U¦! Aõm()l4— ((%.—(A&l² ŸV# =—(AŽ+{¸D—(» 1l‚ ªVH—('AÇž+>l½P—(·.Aœ¸V  ÐZ— ((– ª+­+S8Aš›ÄV Ü£¶ËVCAXl 1m—(æ«ÓV _l¼ÙV dŸ (w—(flóàV µ  ¹µYAnlGçV üÁ ‡—(wlÛ+fA—(‚8lÏ´nAå+™—(†l‚ê+vAd_eÛ1lW¡—(~A˜‚”lù+«—(çW³‡A–—&‚›líV²ñU±¤lW  ¸—((2‚•A” ,,üT°Ä—(;‚)W¡A“S¯·lÌ—(¦AG‚ R®Ó—(7WQ­Ù—(²AP‚Èl!P¬£ß—(¹AEW#O«\‚è—(ì—((NªÆA’e‚>,?,M©Ûl%WW$÷—(q‚6L¨ÖA‘ìl1ÅdW%>K§ÜAz‚ ˜(âA…‚  JJ¦éArW   ˜(m5RI¥˜(óAŽ “‚ YH¤o,>\G£úAç!˜(œ‚ m@cF¢BŒ W¨‚ ? B‹6˜(rE¡¼$mE±‚ W BzD ¢W   öA˜(CŸ ?½‚¨W  (5mM¬W  #)($*…Bž±W Æ‚Q˜(( +BŠ·WA£,GEmS”@œ2BÒ‚U!a˜()œ?›;Bˆ‰Ÿ>šÇW Ý‚Qf˜()£=™ÌW UmhDB†¬<˜KBƒé‚Ts˜()µ;—TB…ó‚P@_dÞW  hml[BÑ,†˜(Á:–þ‚ aBìW  ×,Æ9•ymyfB‚Ì8”ƒÐ7“—˜)rB„_ üW #Ø6’ƒj î,+Šm€Ÿ˜)|B X "ƒè5‘›m„‹Bx-*1ƒi?ö4˜B€û3®mˆ%X -)Á˜ 2ŽL?ƒ£B0X  Eƒ -(¿m‹˜Kƒh ³Bà˜#/-%YƒÑm]ƒXJX  ÄB~A-¸ ÍB|}?äm¨I-6! "tƒÂ`X ;0ÛBzQ-$Ë jX ôm¬ ™#()E  .  "· çB‰ƒa- #ŒƒSyX  R/n  "#()à k-;—ƒR_  % ÿByë  áƒO -™%h.C‘X }-©ƒNo-"Cù†-›X±ƒMCvz,-¹ƒL§XC„X Àƒ™-&Cu£-Bne’ #+0Ctσ©-׃Mnd±-:)__>CsTnc ÏX [nbª*4èƒÃ-NC샳enaòƒàX Ì-»ŒYCrIèX W  "#rn_Ø-„Ë‹€n" „[blpCæ-‡nÙ"xCqY ð-„Œnico‘ná‰ö-' Y  „Z —ný-‰Cpn+„{.Y  £nõY‚¬n.›Coþ 'Y (   ´n,Y Š.¾n^—ˆ$.³CnÈn]/.EYÓn\"²Ün[SYÌC/!C.m„ ]Yçn<x„ÆÝClmÊñnV.„ÏåCjH qY  ûnZ ëChi?ØŒ„oYÝT@óCfßi.€Y ùCdeo.]ç oXˆY  „DbîŒY  oWôk '$* Da”Y .ù¬„#oVD`ýœY †.w ³„.-oUD_¹„€ ”.!D^«Y7oT›.³YJ  È„+D]Ž?oSÏ„¨.3D\!Jo7Õ„ÂY %œ(>DW¶..Yo ä„©ID[ÕYë„;doQÛYRDYZ?ñ„¶‡áYD  #$'()$Ï.9F¿]DéYtoNîY ($*{oRòY VÍ á.mD÷Y „o]Ô‡oMZI €DšoPˆDþ.8@ oO Z¡.…c~§oL!Z 8…b/¯oDVµoK-Z /7¦DU”¼oI…Y¬DT6Z  ÂoJ (/Q…a´DSÉo?CZ  ºDRÏoI]…O5/6KZ $ ÂDQ`…°ÖoÈDPg…TZA/ÜoH¹ãoÐDOn…\Z F/Á « éoGv…ÚDòo~…ÎäDN?øoF……Ó ÿoìDMØxZ (…zZ g/pE÷DL•… ppD…EKŠZ d ­Z pCEJ¦…`l”Z pq™Z/ EI&p‹/µ…J{¬¤ZEH0p6pBÃ…Nˆ(EG ¹ZÎ…_3EFJp# ÁZ Ø…I±/ (Rp@E.XpÐZ å…M4 LE`pï…^ÝZhp·ø…HGåZ? Ó/ ^EEppNyphE†LX „prE†]üZ@  xECDñ/ p †Gi €E–påŽ[= '†K@uE¢p|0†\”Eªp8†$[>  œEˆ ¯p¶p£EB†0  ½p›°EAÇp¶E?@@[<  Y†Ïp¾EÔp#®  '$*c†Úp*ÈE=´'V[1 ¹ÎE;<áp4p†K0 ÖE9Ãépw†DEd[; ÜE8òp†FäEÏÑûpJ‰†ìE7u[:  †q õE6”†â^q ýE5š†@Aë†[2 îfq}0F4¥†B÷ !q ®†>š[3 F3þw´†=+qF21qÀ†#F­[5 ;qdž*F1AqΆ;1F/0Gq¾[4 #°0Ú†<=FTq,ä†9\qIF×[7 :³ífqSF-ó†:nqF]FÁì‡8wqÿí[0 R?Ë ‡7€qä0qF] (l‡qþÖ_‡c \6 {F,Þg©“q‡56ƒFAÿÿÿÿèqývª*‡3\9 ¥qü1ö  $*3‡12øë«q—Fïÿÿÿÿ†ÿêpažF³qû>‡/§*\8 ¹qú¦F+ éG‡.—¨7\P ®FÃqùO‡-)1è ¢Íqø¹F*Y‡, çªÔq÷¬¦J\ÃF)Ùqöe‡ÉF(.æáqõk‡+»¥ÑF']\r‡*L1×F&Äa\  îqóôe\>å ßF$%~‡'(õqñj\Fäo\ úqðÓ¤t\‰‡)rîìFQãz\ríôF’‡$\  rì "#()^âç…\   G"ž‡%x1rëk¨‡"rê< G –\   <$réráar,rèG!·‡#1rçª\„7r#Gć!‰à=r@£1£· 1G"¢7GÀ\›ß_dÚ‡=GÇ\ +¡TræCG⇨Þ[rå4 ×\ brï‡UGß\ Î1ºÝä\ orGû‡ç\`GNŸ|räó\ Ì܈mGø\ „rãÔÛý\aì1‹râÚÚ xG=ÿÿÿÿˆiž’rááÙˆ[ ] ] T  ™rÞëv¡ràðØGÿÿÿÿ-ˆ§rÝ–Gû×$]0 9ˆ2²rߟG)]2 ,]1 CˆÖ»rØ2]Q ªG—œÃrÜOˆÍde ÊrÛ¸GYˆ@32ª!ÌG] ×rÄGbˆQ]R ÜrÚ·›nˆÒG`]   <ïrÙR2zˆÞGËšEË„ˆ sÖ×ðGˆ Þ ™|] sº»q2]Õšˆ ‰] HsÓÔ¦ˆ mÔ÷š]  %sµ¶°ˆH20sÑÓ%H:sΰ] CsБ2H ˜¼]  —ÒJs͵2 @HVsÏEH ¨Ñ2Ò] KH`sÊ8×]  ðˆÉ2!VHks̹ÐC —ã] tsÉ`HÿˆÜ2"fH ʉsËmH[÷] ÓÏqH$*F‰uHŒsÇð2&h–^ H–sÈëžsÅÆŠH H §sÔH 3'ùΙH®sÁ‡žH?)^  ·sÀ£H.^  ªH Ê _Âs¿¯H&3)ÿÿÿÿ  #()!P‰ Éun+3Ês¾µH¤•A^  ȽHI^ Ôs¼^‰ $ÇÄH>3g‰R^ às½0ÆE3o‰K3ês¸u‰Ä<Åe^ V3ôs·C ~‰@Ï…‰a3 ÿs³TÄt±j3$‘‰l3|^  n3úH›‰t°bÃw3Š^  ¢‰{3ð”t¯pÂI†3¬‰˜^  ±‰ZxÁ+t®3¹‰©^ 6t­#I‰‡ÀŸ3†@t¬ˉ@–¿Ò‰¿^ Kt«®3…œ¾4²3Æ^N +“Wtª ©½å‰ ¿3'Õ^ bt©Ê3'(¶¼XI#nt¨ø‰Ò3(Jë^ Ø3''N’zt§Èá3lI.Ï» Šæ3'\ú^   "#‡t¦ï3„õ3áº÷3ƒI:Šü3(_ þ3w t¥ŽI>ó¹  41Š&€‘IB'_  ¸¹t¤4‚CŠ0“0_ ·¬IXÃt£<_ *4  ¶UŠ4D_ Ït¢§¾Ic«;4( µÛt¡²gŠ?¶O_ U_ ÎIgæt À7 ´ybÅQ4yŠCÝIkÈótŸX4]4K ³užìI{ŠŠPx_   f4w#(lßm4 u•ŠQ_ ²u4Š_  J ŠR_ uœ’_  "(4ù¬ŠS™_ %u›s ±‰4)$*J‡£_L 4¸ŠT1uš Œ#J•‡ °ÊU4¡4€?u™·_ ¯‹ÏŠV½_ 8J™Mu– ®ÛŠW+5É_ ·4~Zu˜3ŠçŠXÀ4}­ ­ JJ¥Ö_ Ç4x#("eu—Û_   Ì4  "#(ôŠC YJµE4½ ¬ru“N‰Å «hJ¹ ‹€u•õ_  ‹Ô ª‹a3ÿ_ ‹Œu”xJÒ‹‹kã © ` !‹šu’%‹)‹` -‹|ˆ¦u‘1‹ 58÷ ¨ep5‹!` 9‹=‹& ´u5Ž2)` ¤Jù5/`¶  §•1"5Áu 6`   M‹  žµJúÐuŒ ¦_‹!°Q` ÞuŽ·ÌJü»,3 ¥^`  êuÂw‹"d` = ¤ÝJýøu‰q`   Õ‡a5"N £ñJÿ‹#v‹m5!æ0_ ¢v5 vŠKî /Œ` j ¡€5¨‹'ö†#v8œ` Š5K|  ¤`  .”53v?¾‹(¨`    ö˜58v'K …>vˆŽ Ÿ¸`  §5Gv‡Ô‹)› ž°5Nv†;K% -Ì`   ¹50 „Yv…¨ `v„LKÄ5± œë‹*@ ƒÍ5kv<ƒå` qv‚Á ›Ö5aK N ‚ï` zv;€Œ+à5€v~Ñ šú` æ5oK ‰v}î5a Ü ™|K ‘v|Œ,k ö5˜v{aO  u €ÿ5Ÿvyzî ˜‰K 6€ ¨vw•K3Œ-† $a 6¯vv —_pK¶vu-a ¢K6§K| –¿vt6a IŒ%6OŒ=a @a Êvs¥ ~16»K •Òvr[ŒÁK{± ;6Üvq?6iŒ¹ }Wa   ÏK'2 ”deÑKzI6çvpØKvŒÆ < “ÛKñvoha T6àKÏ |<æK„Œ " #ÿÿÿÿra ývnM ’o(Ù {ya wmj6á z÷K„a úKr6wkl^ ‘ë yu6 þK LŸŒ‘a }6 whiL†6›a t _p(wfŸa 6 L¹Œ¨a L–64we­a š6 !Š *L·a £6 Awcd<0L!ÏŒ­67LNw`a'!Åa ØŒ  Ž·6àŒCLy0!\w^5!Óa À6KLxÄ6xL*MÎ 1Mn"– ‚Àb LxK9M&"±7-"tYxJEMmå Õb Á7® OMlÜb hxIWMkú ]MjÔ7íbM wxHÆ €fMS"kMä7[" Ž …xGÿbH b"swMiÞ ô7“xFM!Ž cF ŠMh¡xE8’M1Ž ö ~"c ˆ"r°xDMg8 }¤MEŽ ¿xC6c ­Mf'8RŽ  |ÎxBºMe^Ž ®"q98Nc ÃMÛxAÉMTc   "A8. {ÏM ÒMqŽ J8êx@ØMdc = zxŽ hc    "#T8àMX}Ž ‚Ž úx>Ô"^8‡Ž "ëMÜ"zc g8S yôM y?“Ž " "ã"pùMds8‰c Ž " "y<NcŽc |8i x)¨Ž  "# "#() Nb—c² …8­Ž "#()&y=²Ž "#()"N c x wŽ8N·Ž Na§c 4y˜8#‡ vÄŽ "*NÉŽ "£8#“ u2NÂc %#®87ÖŽ "=NRy>-#?¦ t»86⎠5#JNëŽ >#oÈ84hy;ßcTN¹ sñŽ äcúŽ ry`N`Ú8òc~y:öc  ä8Ñ rrN‰y9dð85dxl#n–y8ù83…Nd   é q) $ ŠNŽN    "#(¤y9 –N9®y'd$*9)d  p; 9 ¢N_9¨N5d ˜#&9#²N$)$R ?d-91o¸N^¨#LdÂN±#'n=9ÇN]i Xd»#H9K9×NÄ#<medñy T92Ë#ÝNâNÐ#pd\9‡"Ö#ëNN #(Œ ""Û#me9zQl}d()&òNdd zp9z‡d`kœ""ŒdOz9dz’d"z¬""†9œdˆ9þvj<³""$¢d,zO0z“9û¼""!O$|2·f¤; ‘RÍ‘$1QÀf®;í:QN|1Êf()Þ‘$FQ¼;ìªQ^|0LQê‘$ÿÿÿÿ)$**Øf)();&fRQÊ;Žßf  "#(ÿÿÿÿXQo|/Ó;ë^Qþ‘)$*ÃPiQá;€|.’$$ÖOt tQ‹|-î;ê’$$zQk&L€Qù;˜|$’$(’($*<ðNQ0’($*§|gÄ5’ $$<™Q Q*g¶|< M©QG’&$**%<:gÃÄ|ž&eO’&$*C¸QW’&$*L2<GgÁÔ|c’&$**ÉQ  @<VgÀâ|n’&$*5KL<ØQ x’$ð|jgºÎ&KY<éçQ  …’$sg`¹`<èNJ}zgg<çg¸÷Q•’$o<ˆg·} w<梒$R  « #“g´lI€<å R § !} ®’&&œg³(R. 'dŠ<â£g²0}¼’ (&&()j–<ä«g±"R  8}ŠH³g¯ž<á?@}Í’&E}2R½g°«<ãJ},Åg­®Ù’&(´<ÞS}+.'JÎg©ª¨GGR \} ¿<à×gë’&&()%Æ<d} ÝgWR ãg¤n}Ñ<ßø’&(ëg£w}ÆFeR Ü<“&(õg¢â<€}^'cé<Ø“&(ÿg ‰}wR ' ÚEŽ}hž“}€R “&(ù<™}h'“&(R  hœ=ÝõD«}_7“&($h›=מR ‹'I,hšB“&(=ÜÀ}b­R& C7h™$=ÖQ“&(Ah˜ºR 0=ÛÔ}g_“&()&8=Õ%BMh—ÅR e“&(Wh–»'bF=ÚÑR , ç}jch•P=Ôy“&(ÞR AAnh”ù}x^=ÙéR {h“h= ~´““&(÷R% ä'Hƒh]@S Œh‘x=~¹©“&&%ƒ=p?˜h’S+ ¢h=/~ÄS ƒ>(a“ (&&()j°hŒ'S =?~Ò“=1S »h«=Õ“&Ãh‰ŠP~Õ´=Ü“)&&)¥<CS Íh‡»=Õh…†9(Fë“)&&)c~òQS È=áhƒ¼;q~#Õ=Óëh‚ÿ“&dS ~~$õh~(oS( æ=Ó:ýh}”&‹~%e(`i|S) ™~&ý=iz{)”&ï9>Ñ "#()‘S iv§~' >>Ð?(iw>”&¡S # Ž(E>ϵ~(1icu>Î 89ibt°S-Æ~)S”&Ais1>IirÀS 8>Ö~*'7Piaq>>ÊS Wiº(_o” &ÔS  _ioè~$ÿÿÿÿO>ÍS>hipV>Ì?C6âS oi[>ˈ” &vimnb>ïS* U5€ikã(DýS$ ˆiijv>|>§” &”ign4T ! †>&zžifT  >¦ie1y —>#T )^‡3±i¿Å” &/T" ©>ÊH8T  ®>ÉÛ” &¶>¥2Íi¾¾>ÈIT ^x8)CÃ>È>ÇVTáilJ÷”&äiÐ>Æ\TèiÕ>ÅtKÃ1ëi_$jfTÝ>òi^lT‚wúi]•&uT d)]j\ï>Ä~T á0 j[ù>šIjZþ>T"()¢HT jY0•&—T  !jX™T ?ÿ/(jWŸT±G)B/j»¦T"?ºv¬T`"c#?ÁuM•&°TÂ.Èt@jV·TG "#Ï2?HjTUÒs ;?ÃÙQjRÜr ÊT> i• ''ct.-¹)\Xj QC? ãÒT  ¦  "(çq_jPK?ÁÙTw•'Q?ÀfjNOð}•'ôpojLI,û†•'ÿovjKb?€Ž•'i?¿~jJ€nâ)A÷T …jI^+ýT  "#€jHy?€m¦• ''(?¾€—jFGU  V  "#®•'%€l´•'¡jDz*?UU #©jC4€F—?¨½*[¿•''ag›?±jAB=€É•'/UK "#¦?»j?C€E–)reÒ•''(eÃj >N€D³?¸Û•'AU  Ëj =V€gCâ•'½?¼ "(Ój<­(é•''sta€BNU S "#Ä?Új ;?*@i€fAó•''] áj9Í?º»êj:Ö?Ä't€@þ•''ñj67hU  "#|€e? –''ciâ?ýj8‡€d=ë?Ø&yU–'kó?’€<? –''ƒU  $  "#k23ù?s*Z›€c;U  "ó%k4§€:  @™U /  "#8–'¯€b9&k0@¶·@–''/k/º€8@©UE $€a7%@´:k.M–'¡*=+@³Í€6Dk-5@ÀU  "cÕ€`5:@²ÆU "Pk+f–(.#__ÍU B@±à€4 j–([k,è€_3r–(M@°dk*ó€2V@¯ lk(ãU Ò*Yû€^1^@®N"vk)‹–(( –(h@­0 ~k&'ùU ]/r@š–(ˆk$ –((z@¬.k"#n!un!-V †@«œk ±–)(+<)\,‘@ª ¦k2+"V °küËC:\libtasn1\windows\libtasn1\libtasn1.vcproj/O2 /I "." /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/ACWD "c:\libtasn1\windows\libtasn1\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\libtasn1\c:\libtasn1\lib\asn1.cc:\program files\microsoft visual studio 8\vc\include\stddef.hc:\program files\microsoft visual studio 8\vc\include\crtdefs.hc:\program files\microsoft visual studio 8\vc\include\sal.hexpr__inner_fallthrough__inner_data_entrypoint()category__inner_control_entrypoint()__inner_blocksOn()resource__inner_callback__inner_override__inner_typefix()ctype__inner_checkReturn__pre __null__readableTo(sentinel(0))__inner_success()__deref_opt_inout_bcount_opt()size__deref_opt_inout_ecount_opt()__deref_opt_inout_opt__deref_opt_inout_bcount_opt() __pre __deref __nullterminated __post __deref __nullterminated__deref_opt_inout_ecount_opt() __pre __deref __nullterminated __post __deref __nullterminated__deref_opt_inout_opt __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_bcount_full_opt() __exceptthat __maybenull__deref_inout_ecount_full_opt() __exceptthat __maybenull__deref_inout_bcount_part_opt(,) __exceptthat __maybenulllength__deref_inout_ecount_part_opt(,) __exceptthat __maybenull__deref_inout_bcount_opt() __exceptthat __maybenull__deref_inout_ecount_opt() __exceptthat __maybenull__deref_inout_opt __exceptthat __maybenull__deref_opt_out_bcount_opt()__deref_opt_out_ecount_opt()__deref_opt_out_opt__deref_opt_out_bcount_opt() __post __deref __nullterminated__deref_opt_out_ecount_opt() __post __deref __nullterminated__post __deref __valid __refparam __exceptthat __maybenull __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull __post __deref __nullterminated__deref_out_bcount_full_opt() __exceptthat __maybenull__deref_out_ecount_full_opt() __exceptthat __maybenull__deref_out_bcount_part_opt(,) __exceptthat __maybenull__deref_out_ecount_part_opt(,) __exceptthat __maybenull__deref_out_bcount_opt() __exceptthat __maybenull__deref_out_ecount_opt() __exceptthat __maybenull__deref_out_opt __exceptthat __maybenull__deref_bcount_opt() __exceptthat __maybenull__deref_ecount_opt() __exceptthat __maybenull__deref_opt_inout_bcount()__deref_opt_inout_ecount()__deref_opt_inout__deref_opt_inout_bcount() __pre __deref __nullterminated __post __deref __nullterminated__deref_opt_inout_ecount() __pre __deref __nullterminated __post __deref __nullterminated__deref_opt_inout __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_bcount_full() __exceptthat __maybenull__deref_inout_ecount_full() __exceptthat __maybenull__deref_inout_bcount_part(,) __exceptthat __maybenull__deref_inout_ecount_part(,) __exceptthat __maybenull__deref_inout_bcount() __exceptthat __maybenull__deref_inout_ecount() __exceptthat __maybenull__deref_inout __exceptthat __maybenull__deref_out_bcount_full() __exceptthat __maybenull__deref_out_ecount_full() __exceptthat __maybenull__deref_out_bcount_part(,) __exceptthat __maybenull__deref_out_ecount_part(,) __exceptthat __maybenull__deref_out_bcount() __exceptthat __maybenull__deref_out_ecount() __exceptthat __maybenull__deref_opt_out __post __deref __nullterminated__deref_out __exceptthat __maybenull__deref_bcount() __exceptthat __maybenull__deref_ecount() __exceptthat __maybenull__deref_inout_bcount_opt()__deref_inout_ecount_opt()__deref_inout_opt__deref_inout_bcount_opt() __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_ecount_opt() __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_opt __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_bcount_full() __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_ecount_full() __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_bcount_part(,) __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_ecount_part(,) __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_bcount() __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout_ecount() __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_inout __pre __deref __exceptthat __maybenull __post __deref __exceptthat __maybenull__deref_out_bcount_opt()__deref_out_ecount_opt()__deref_out_opt__deref_out_bcount_opt() __post __deref __nullterminated__deref_out_ecount_opt() __post __deref __nullterminated__post __deref __valid __refparam __execeptthat __maybenull __post __deref __nullterminated__deref_out_bcount_full() __post __deref __exceptthat __maybenull__deref_out_ecount_full() __post __deref __exceptthat __maybenull__deref_out_bcount_part(,) __post __deref __exceptthat __maybenull__deref_out_ecount_part(,) __post __deref __exceptthat __maybenull__deref_out_bcount() __post __deref __exceptthat __maybenull__deref_out_ecount() __post __deref __exceptthat __maybenull__deref_out __post __deref __exceptthat __maybenull__deref_bcount() __post __deref __exceptthat __maybenull__deref_ecount() __post __deref __exceptthat __maybenull__deref_inout_ecount()__deref_inout__deref_inout_ecount() __pre __deref __nullterminated __post __deref __nullterminated__deref_inout_bcount_part(,)__deref_inout_ecount_part(,)__deref_inout_bcount() __pre __deref __byte_readableTo() __post __deref __byte_readableTo()__deref_inout_ecount() __pre __deref __elem_readableTo() __post __deref __elem_readableTo()__deref_inout __pre __deref __byte_writableTo() __post __deref __byte_writableTo()__deref_inout __pre __deref __elem_writableTo() __post __deref __elem_writableTo()__deref_inout __pre __deref __nullterminated __post __deref __nullterminated__notnull __elem_readableTo(1) __pre __deref __valid __post __deref __valid __refparam__deref_out_ecount()__deref_out__deref_out_ecount() __post __deref __nullterminated__post __deref __valid __refparam __post __deref __nullterminated__deref_out_bcount_part(,)__deref_out_ecount_part(,)__deref_out_bcount() __post __deref __byte_readableTo()__deref_out_ecount() __post __deref __elem_readableTo()__deref_bcount() __post __deref __valid __refparam__deref_ecount() __post __deref __valid __refparam__deref_ecount(1) __post __deref __valid __refparam__ecount(1) __post __elem_readableTo(1) __post __deref __notnull __post __deref __byte_writableTo()__ecount(1) __post __elem_readableTo(1) __post __deref __notnull __post __deref __elem_writableTo()__inout_bcount_opt()__inout_ecount_opt()__inout_opt__inout_ecount_opt() __pre __nullterminated __post __nullterminated__inout_opt __pre __nullterminated __post __nullterminated__inout_bcount_full() __exceptthat __maybenull__inout_ecount_full() __exceptthat __maybenull__inout_bcount_part(,) __exceptthat __maybenull__inout_ecount_part(,) __exceptthat __maybenull__inout_bcount() __exceptthat __maybenull__inout_ecount() __exceptthat __maybenull__inout __exceptthat __maybenull__out_bcount_opt() __post __nullterminated__out_ecount_opt() __post __nullterminated__out_bcount_full_opt() __post __nullterminated__out_ecount_full_opt() __post __nullterminated__out_bcount_part_opt(,) __post __nullterminated__out_ecount_part_opt(,) __post __nullterminated__out_bcount_full() __exceptthat __maybenull__out_ecount_full() __exceptthat __maybenull__out_bcount_part(,) __exceptthat __maybenull__out_ecount_part(,) __exceptthat __maybenull__out_bcount() __exceptthat __maybenull__out_ecount() __exceptthat __maybenull__out __exceptthat __maybenull__in_bcount_opt()__in_ecount_opt()__in_opt__in_bcount_opt() __pre __nullterminated__in_ecount_opt() __pre __nullterminated__in_opt __pre __nullterminated__in_bcount() __exceptthat __maybenull__in_ecount() __exceptthat __maybenull__in __exceptthat __maybenull__bcount() __exceptthat __maybenull__ecount() __exceptthat __maybenull__inout_bcount()__inout_ecount()__inout__inout_bcount() __pre __nullterminated __post __nullterminated__inout_ecount() __pre __nullterminated __post __nullterminated__inout __pre __nullterminated __post __nullterminated__inout_bcount_part(,)__inout_ecount_part(,)__out_bcount_part(,) __pre __valid __pre __byte_readableTo()__out_ecount_part(,) __pre __valid __pre __elem_readableTo()__out_bcount() __pre __valid__out_ecount() __pre __valid__pre __valid __post __valid __refparam__bcount() __post __valid __refparam__ecount() __post __valid __refparam__post __valid __refparam __post __exceptthat __maybenull__post __valid __refparam __post__out_bcount_full() __post __nullterminated__out_ecount_full() __post __nullterminated__out_bcount_part(,) __post __nullterminated__out_ecount_part(,) __post __nullterminated__bcount() __post __valid __refparam __post __nullterminated__ecount() __post __valid __refparam __post __nullterminated__post __valid __refparam __post __nullterminated __exceptthat __maybenull__post __valid __refparam __post __nullterminated__out_bcount_part(,)__out_ecount_part(,)__out_bcount() __post __byte_readableTo()__out_ecount() __post __elem_readableTo()__ecount(1) __post __valid __refparam__in_bcount()__in_ecount()__in__in_bcount() __pre __nullterminated__in_ecount() __pre __nullterminated__in __pre __nullterminated__in __pre __byte_readableTo()__in __pre __elem_readableTo()__pre __valid __pre __deref __readonly__notnull __byte_writableTo()__notnull __elem_writableTo()extent__declspec(nothrow)c:\program files\microsoft visual studio 8\vc\include\vadefs.hchar *__w64 unsigned int(  = (va_list)0 )ap( *( *)(( += _INTSIZEOF()) - _INTSIZEOF()) )t(  = (va_list)_ADDRESSOF() + _INTSIZEOF() )v( (sizeof() + sizeof(int) - 1) & ~(sizeof(int) - 1) )n(__alignof())(sizeof())( &reinterpret_cast() )__w648struct threadlocaleinfostructintunsigned intunsigned long [6]LC_ID [6]wchar_t *int *threadlocaleinfostruct::__unnamed_0002_1 [6]lconv *unsigned short *const unsigned short *const unsigned char *__lc_time_data *struct tagLC_ID *struct tagLC_IDunsigned shortstruct localeinfo_struct *struct localeinfo_structpthreadlocinfopthreadmbcinfostruct threadmbcinfostruct *struct threadlocaleinfostruct *__time64_t__int64__w64 long__w64 intsize_t(void)x_CRT_INSECURE_DEPRECATE()  size_t __cdecl ( *,  ,   ,   );_DeclSpec_FuncName_SecureFuncName_SecureDstType_DstType_Dst_TType1_TArg1_TType2_TArg2_TType3_TArg3_CRT_INSECURE_DEPRECATE()  size_t __cdecl ( *,  ,   );_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , ...); _CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , va_list _Args);_ReturnType_ReturnPolicy_VFuncName_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , ...); _CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *,   ,   , va_list _Args);_CRT_INSECURE_DEPRECATE()   __cdecl ( * ,   , ...); _CRT_INSECURE_DEPRECATE()   __cdecl ( * ,   , va_list _Args);_SecureVFuncName_CRT_INSECURE_DEPRECATE()   __cdecl ( ,   ,  * );_HType1_HArg1_HType2_HArg2_CRT_INSECURE_DEPRECATE()   __cdecl ( ,  * ,   );_CRT_INSECURE_DEPRECATE()   __cdecl ( *,   ,   ,   ,  );_TType4_TArg4_CRT_INSECURE_DEPRECATE()   __cdecl ( *,   ,   ,   );_CRT_INSECURE_DEPRECATE()   __cdecl ( *,   ,   );_CRT_INSECURE_DEPRECATE()   __cdecl ( *,   );_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *);_CRT_INSECURE_DEPRECATE()   __cdecl ( *);_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( * ,   ,   , ...); _CRT_INSECURE_DEPRECATE()   __cdecl ( * ,   ,   , va_list _Args);_CRT_INSECURE_DEPRECATE(_s)   __cdecl ( *);_FunctionCall__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(, , _s, , , , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE_EX(, , _s, , , , , , , )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST_EX(, , , , _s, , _s, , , ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4_EX(, , , , _s, , , , ,  ,  ,  ,  ,  , )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX(, , , , _s, , , , ,  ,  ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(, , , , _s, , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_EX(, , , , _s, , , , )__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_EX(, , , , _s, , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE_EX(, , _s, , , , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE_EX(, , _s, , , , , , , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX(, , , , , _s, , , , ,  ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX(, , , , _s, , _s, , , ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1_EX(, , , , _s, , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4_EX(, , , , _s, , , , ,  ,  ,  ,  ,  , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_EX(, , , , _s, , , , ,  ,  ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX(, , , , _s, , , , , ,  ,  )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(, , , , _s, , , , )__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_EX(, , , , _s, , )extern "C++" { template inline  __CRTDECL (__in const  *, __out_ecount_opt(_DriveSize)  (&_Drive)[_DriveSize], __out_ecount_opt(_DirSize)  (&_Dir)[_DirSize], __out_ecount_opt(_NameSize)  (&_Name)[_NameSize], __out_ecount_opt(_ExtSize)  (&_Ext)[_ExtSize]) { return (, _Drive, _DriveSize, _Dir, _DirSize, _Name, _NameSize, _Ext, _ExtSize); } }_Srcextern "C++" { __pragma(warning(push)); __pragma(warning(disable: 4793)); template inline  __CRTDECL ( (&)[_Size],  ,   , ...) { va_list _ArgList; _crt_va_start(_ArgList,  ); return (, _Size, ,  , _ArgList); } __pragma(warning(pop)); }extern "C++" { __pragma(warning(push)); __pragma(warning(disable: 4793)); template inline  __CRTDECL ( (&)[_Size],  , ...) { va_list _ArgList; _crt_va_start(_ArgList, ); return (, _Size, , _ArgList); } __pragma(warning(pop)); }extern "C++" { template inline  __CRTDECL ( ,  ,  (&)[_Size]) { return (, , , _Size); } }extern "C++" { template inline  __CRTDECL ( ,  (&)[_Size],  ,   ,   ) { return (, , _Size, ,  ,  ); } }extern "C++" { template inline  __CRTDECL ( ,  (&)[_Size],  ,   ) { return (, , _Size, ,  ); } }extern "C++" { template inline  __CRTDECL ( ,  (&)[_Size],  ) { return (, , _Size, ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size],  ,  ,   ,   ) { return (, _Size, , ,  ,  ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size],  ,  ,   ) { return (, _Size, , ,  ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size],  ,  ) { return (, _Size, , ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size],  ) { return (, _Size, ); } }extern "C++" { template inline  __CRTDECL ( (&)[_Size]) { return (, _Size); } }((size_t)-1)100__cdecl__declspec(restrict)__declspec(noalias)__declspec(align())const_CRT_DEPRECATE_TEXT("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: "  ". See online help for details.")_NewName10_CRT_DEPRECATE_TEXT("This function or variable has been superceded by newer library or operating system functionality. Consider using"  "instead. See online help for details.")_NewItem0xFD_CRT_INSECURE_DEPRECATE()_Replacement_CRT_DEPRECATE_TEXT("This function or variable may be unsafe. Consider using "  " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")__declspec(deprecated())_Text__STDC_SECURE_LIB__200411L_CRTIMP__declspec(dllimport)__CRT_WIDE()_StringL__CRT_STRINGIZE()_Valueerrno_tint *_Value (int *)int _Value (int) ()(size_t)&reinterpret_cast(((( *)0)->))sm(*_errno())c:\program files\microsoft visual studio 8\vc\include\stdlib.hc:\program files\microsoft visual studio 8\vc\include\limits.hSIZE_MAXUINT_MAX0xffffffffffffffffui649223372036854775807i64(-9223372036854775807i64 - 1)0xffffffffui322147483647i32(-2147483647i32 - 1)0xffffui1632767i16(-32767i16 - 1)0xffui8127i8(-127i8 - 1)0xffffffffUL2147483647L(-2147483647L - 1)0xffffffff2147483647(-2147483647 - 1)0xffff32767(-32768)5SCHAR_MAXSCHAR_MIN0xff127(-128)_onexit_t_onexit_t _Funcunsigned long _Valchar *_Dstbufint _Radix (unsigned long, char *, int)voidchar *_Buf1char *_Buf2int _SizeInBytes (char *, char *, int)const char *_EnvString (const char *)long _Valchar *_DstBuf (long, char *, int)int _Val (int, char *, int)double _Valint _NumOfDigits (double, int, char *)int _NumOfDecint *_PtDecint *_PtSign (double, int, int *, int *)unsigned long _Duration (unsigned long)unsigned int _Frequencyunsigned int _Duration (unsigned int, unsigned int)int _Modeconst wchar_t *_Pathwchar_t (&_Drive)[_DriveSize]wchar_t (&_Dir)[_DirSize]wchar_t (&_Name)[_NameSize]wchar_t (&_Ext)[_ExtSize] (const wchar_t *, wchar_t (&)[_DriveSize], wchar_t (&)[_DirSize], wchar_t (&)[_NameSize], wchar_t (&)[_ExtSize])size_t _DriveSizesize_t _DirSizesize_t _NameSizesize_t _ExtSizeconst wchar_t *_FullPathwchar_t *_Drivesize_t _DriveSizeInWordswchar_t *_Dirsize_t _DirSizeInWordswchar_t *_Filenamesize_t _FilenameSizeInWordswchar_t *_Extsize_t _ExtSizeInWords (const wchar_t *, wchar_t *, unsigned int, wchar_t *, unsigned int, wchar_t *, unsigned int, wchar_t *, unsigned int) (const wchar_t *, wchar_t *, wchar_t *, wchar_t *, wchar_t *)const wchar_t *_Filenameconst wchar_t *_EnvVarwchar_t *_ResultPath (const wchar_t *, const wchar_t *, wchar_t *)wchar_t (&_ResultPath)[_Size] (const wchar_t *, const wchar_t *, wchar_t (&)[_Size])size_t _Sizesize_t _SizeInWords (const wchar_t *, const wchar_t *, wchar_t *, unsigned int)const wchar_t *_Nameconst wchar_t *_Value (const wchar_t *, const wchar_t *)const wchar_t *_EnvString (const wchar_t *)const wchar_t *_ErrMsgconst wchar_t *_Driveconst wchar_t *_Dirconst wchar_t *_Ext (wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *) (wchar_t (&)[_Size], const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *)wchar_t *_PathResult (wchar_t *, unsigned int, const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *)wchar_t *_FullPath (wchar_t *, const wchar_t *, unsigned int)const char *_Destchar (&_Drive)[_DriveSize]char (&_Dir)[_DirSize]char (&_Name)[_NameSize]char (&_Ext)[_ExtSize] (const char *, char (&)[_DriveSize], char (&)[_DirSize], char (&)[_NameSize], char (&)[_ExtSize])const char *_FullPathchar *_Drivechar *_Dirchar *_Filenamesize_t _FilenameSizechar *_Ext (const char *, char *, unsigned int, char *, unsigned int, char *, unsigned int, char *, unsigned int) (const char *, char *, char *, char *, char *)const char *_Filenameconst char *_EnvVarchar *_ResultPath (const char *, const char *, char *)char (&_ResultPath)[_Size] (const char *, const char *, char (&)[_Size])size_t _SizeInBytes (const char *, const char *, char *, unsigned int)unsigned __int64unsigned __int64 _Valint _Shift (unsigned __int64, int)unsigned int _Val (unsigned int, int)const char *_Nameconst char *_Value (const char *, const char *)const char *_ErrMsgchar *_Pathconst char *_Driveconst char *_Dirconst char *_Ext (char *, const char *, const char *, const char *, const char *)char (&_Path)[_Size] (char (&)[_Size], const char *, const char *, const char *, const char *)char *_PathResult (char *, unsigned int, const char *, const char *, const char *, const char *)unsigned long (unsigned long, int)_CRT_FLOAT *_Resultchar *_Str_locale_t _Locale (__unnamed_0005_3 *, char *, localeinfo_struct)_LDOUBLE *_Result (__unnamed_0005_1 *, char *, localeinfo_struct)_CRT_DOUBLE *_Result (__unnamed_0005_2 *, char *, localeinfo_struct) (__unnamed_0005_3 *, char *) (__unnamed_0005_1 *, char *) (__unnamed_0005_2 *, char *)char (&_Dest)[_Size]double _Value (char (&)[_Size], double, int) (char *, unsigned int, double, int) (char (&)[_Size], double, int, int *, int *) (char *, unsigned int, double, int, int *, int *)int _NumOfDightschar *_FullPathconst char *_Path (char *, const char *, unsigned int)const wchar_t *_Strwchar_t **_EndPtr (const wchar_t *, wchar_t **, int, localeinfo_struct) (const wchar_t *, wchar_t **, int) (const wchar_t *, localeinfo_struct)wchar_t *_DstBuf (unsigned __int64, wchar_t *, int) (unsigned __int64, wchar_t *, unsigned int, int)__int64 _Val (__int64, wchar_t *, int) (__int64, wchar_t *, unsigned int, int)longdoubleconst wchar_t *_Commandwchar_t **_Buffersize_t *_BufferSizeInWordsconst wchar_t *_VarName (wchar_t **, unsigned int *, const wchar_t *)size_t *_ReturnSizewchar_t (&_Dest)[_Size] (unsigned int *, wchar_t (&)[_Size], const wchar_t *)size_t _DstSizeInWords (unsigned int *, wchar_t *, unsigned int, const wchar_t *) (const wchar_t *, wchar_t **, localeinfo_struct) (const wchar_t *, wchar_t **)unsigned long _Valuewchar_t *_Dest (unsigned long, wchar_t *, int) (unsigned long, wchar_t (&)[_Size], int) (unsigned long, wchar_t *, unsigned int, int)long _Value (long, wchar_t *, int) (long, wchar_t (&)[_Size], int) (long, wchar_t *, unsigned int, int) (int, wchar_t *, int) (int, wchar_t (&)[_Size], int) (int, wchar_t *, unsigned int, int)void *void *_Memorysize_t _Countsize_t _Alignmentsize_t _Offset (void *, unsigned int, unsigned int, unsigned int, unsigned int) (void *, unsigned int, unsigned int, unsigned int) (void *, unsigned int, unsigned int) (unsigned int, unsigned int, unsigned int) (void *)size_t _NewSize (void *, unsigned int) (unsigned int)size_t _NumOfElementssize_t _SizeOfElementschar *_Destconst wchar_t *_Sourcesize_t _MaxCount (char *, const wchar_t *, unsigned int, localeinfo_struct)size_t *_PtNumOfCharConverted (unsigned int *, char (&)[_Size], const wchar_t *, unsigned int, localeinfo_struct)char *_Dstsize_t _DstSizeInBytesconst wchar_t *_Srcsize_t _MaxCountInBytes (unsigned int *, char *, unsigned int, const wchar_t *, unsigned int, localeinfo_struct) (char *, const wchar_t *, unsigned int) (unsigned int *, char (&)[_Size], const wchar_t *, unsigned int) (unsigned int *, char *, unsigned int, const wchar_t *, unsigned int)int *_SizeConvertedchar *_MbChwchar_t _WCh (int *, char *, unsigned int, wchar_t, localeinfo_struct)rsize_t _SizeInBytes (int *, char *, unsigned int, wchar_t) (char *, wchar_t, localeinfo_struct) (char *, wchar_t) (unsigned long, char (&)[_Size], int) (unsigned long, char *, unsigned int, int)const char *_Commandconst char *_Strchar **_EndPtr (const char *, char **, int, localeinfo_struct) (const char *, char **, int) (const char *, char **, localeinfo_struct) (const char *, char **)unsigned int _Seedconst char *_Source (wchar_t *, const char *, unsigned int, localeinfo_struct) (unsigned int *, wchar_t (&)[_Size], const char *, unsigned int, localeinfo_struct)const char *_SrcBuf (unsigned int *, wchar_t *, unsigned int, const char *, unsigned int, localeinfo_struct) (wchar_t *, const char *, unsigned int) (unsigned int *, wchar_t (&)[_Size], const char *, unsigned int) (unsigned int *, wchar_t *, unsigned int, const char *, unsigned int)wchar_t *_DstChconst char *_SrcChsize_t _SrcSizeInBytes (const char *, unsigned int, localeinfo_struct) (const char *, unsigned int) (const char *, localeinfo_struct)const char *_Ch (long, char (&)[_Size], int) (long, char *, unsigned int, int)ldiv_tlong _A1long _A2 (long, long)long _Numeratorlong _Denominatorconst char *_String (unsigned __int64, char *, int) (unsigned __int64, char *, unsigned int, int) (__int64, char *, int) (__int64, char *, unsigned int, int) (int, char (&)[_Size], int) (int, char *, unsigned int, int)char **_PBuffersize_t *_PBufferSizeInBytesconst char *_VarName (char **, unsigned int *, const char *) (unsigned int *, char (&)[_Size], const char *)rsize_t _DstSize (unsigned int *, char *, unsigned int, const char *)div_tint _Numeratorint _Denominator (int, int)unsigned __int64 _Int64 (unsigned __int64)unsigned long _Longunsigned short _Short (unsigned short)void *_Baseint (*_PtFuncCompare)(const void *, const void *) (void *, unsigned int, unsigned int, int (*)(const void *, const void *))rsize_t _NumOfElementsrsize_t _SizeOfElementsint (*_PtFuncCompare)(void *, const void *, const void *)void *_Context (void *, unsigned int, unsigned int, int (*)(void *, const void *, const void *), void *)const void *_Keyconst void *_Base (const void *, const void *, unsigned int, unsigned int, int (*)(const void *, const void *)) (const void *, const void *, unsigned int, unsigned int, int (*)(void *, const void *, const void *), void *) (__int64)long _X (long)int _Xunsigned int _Flagsunsigned int _Maskint _Codechar (* )[_SizeOfArray]_CountofType (&_Array)[_SizeOfArray] (_CountofType (&)[_SizeOfArray])typename _CountofTypesize_t _SizeOfArrayunsigned int *_Value (unsigned int *)int *_PModewchar_t **_Value (wchar_t **)char **_Value (char **)wchar_t **char **unsigned long *_Value (unsigned long *)unsigned long *_invalid_parameter_handler_invalid_parameter_handler _Handler (void)void (* )(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t)_purecall_handler_purecall_handler _Handlervoid (* )(void)_locale_t (localeinfo_struct)__unnamed_0005_5unsigned char [12]__unnamed_0005_4long double__unnamed_0005_3float__unnamed_0005_2__unnamed_0005_1unsigned char [10]struct _ldiv_tstruct _div_tint (* )(void)_environ_sys_nerr_sys_errlist(309+40)sizeof(*__countof_helper())_Array(*__sys_nerr())(__sys_errlist())(*__doserrno())0x20x132256260((() < ()) ? () : ())ab((() > ()) ? () : ())__mb_cur_max0x7fff((unsigned char *)(&()->ld))const char *inputFileNameconst char *outputFileNameconst char *vectorNamechar *errorDescription (const char *, const char *, const char *, char *)asn1_retCodeconst char *file_nameASN1_TYPE *definitions (const char *, ASN1_TYPE *, char *)int error (int, char *)const int []const char * []YYSTYPEconst char *yymsgint yytypeYYSTYPE *yyvaluep (const char *, int, YYSTYPE *)const yytype_uint8 []const yytype_int16 []yytype_int16shortsigned charunsigned charchar [MAX_NAME_SIZE+1]node_asn *char *s (char *)const char *char []FILE *295294293292291290289288287286285284283282281280279278277276275274273272271270269268267266265264263262261259258(yyvsp -= (), yyssp -= ())N10000200RuleBottomTopTitleTypeValueLocationArgsyylex ()((void) 0)FileLocdo if (YYID ()) { ().first_line = YYRHSLOC (, 1).first_line; ().first_column = YYRHSLOC (, 1).first_column; ().last_line = YYRHSLOC (, ).last_line; ().last_column = YYRHSLOC (, ).last_column; } else { ().first_line = ().last_line = YYRHSLOC (, 0).last_line; ().first_column = ().last_column = YYRHSLOC (, 0).last_column; } while (YYID (0))CurrentRhs(()[])Kdo if (yychar == YYEMPTY && yylen == 1) { yychar = (); yylval = (); yytoken = YYTRANSLATE (yychar); YYPOPSTACK (1); goto yybackup; } else { yyerror (YY_("syntax error: cannot back up")); YYERROR; } while (YYID (0))Token(!!yyerrstatus)goto yyerrlabgoto yyerrorlabgoto yyabortlabgoto yyacceptlab(-2)(yychar = YYEMPTY)(yyerrstatus = 0)-9-84((unsigned int) () <= YYMAXUTOK ? yytranslate[] : YYUNDEFTOK)YYX189984352do { YYSIZE_T yyi; for (yyi = 0; yyi < (); yyi++) ()[yyi] = ()[yyi]; } while (YYID (0))ToFromCount(() * (sizeof (yytype_int16) + sizeof (YYSTYPE)) + YYSTACK_GAP_MAXIMUM)(sizeof (union yyalloc) - 1)freemallocYYSIZE_MAXIMUMYYFREEYYMALLOC()((void) ())emsgid((YYSIZE_T) -1)_asn1_yynerrs_asn1_yydebug_asn1_yychar_asn1_yylval_asn1_yyerror_asn1_yylex_asn1_yyparse"yacc.c""2.1b"c:\libtasn1\lib\coding.cc:\libtasn1\lib\parser_aux.hASN1_TYPE node (ASN1_TYPE)node_asn *pointerconst char *name (node_asn *, const char *)node_asn *node (node_asn *)long vchar *str (long, char *)unsigned int value (node_asn *, unsigned int)node_asn *down (node_asn *, node_asn *)node_asn *rightconst unsigned char *valueunsigned int len (node_asn *, const unsigned char *, unsigned int)unsigned int typec:\libtasn1\lib\element.hchar *nameint name_size (node_asn *, char *, int)const char *valueunsigned char *value_outint value_out_sizeint *len (const char *, unsigned char *, int, int *)ASN1_TYPE elementvoid *iderchar *ErrorDescription (ASN1_TYPE, const char *, void *, int *, char *)unsigned char *derint der_len (unsigned char *, int, node_asn *)int *counterint *max_len (node_asn *, unsigned char *, int *, int *)const unsigned char *strint bit_lenint *der_len (const unsigned char *, int, unsigned char *, int *)const char []unsigned char *str (unsigned char *, unsigned char *, int *)int str_lenunsigned int tag_valueunsigned char *ansint *ans_len (int, unsigned int, unsigned char *, int *)unsigned long len (unsigned long, unsigned char *, int *) (node_asn *, char *)16c:\libtasn1\lib\decoding.cc:\libtasn1\lib\structure.hnode_asn *rootconst char *source_namenode_asn *source_nodechar *output_file_namechar *vector_name (node_asn *, char *, char *)ASN1_TYPE definitionsASN1_TYPE *elementconst char *octetNameconst char *objectName (ASN1_TYPE, ASN1_TYPE *, const char *, const char *) (ASN1_TYPE, ASN1_TYPE *)const void *iderint lenconst char *name_elementint *startint *end (ASN1_TYPE, const void *, int, const char *, int *, int *)ASN1_TYPE *structureconst char *elementName (ASN1_TYPE *, const char *, const void *, int, char *) (ASN1_TYPE *, const void *, int, char *)const unsigned char *der (const unsigned char *, int *) (const unsigned char *, node_asn *, int *)int *ret_len (node_asn *, const unsigned char *, int, int *)int str_sizeint *bit_len (const unsigned char *, int, int *, unsigned char *, int, int *) (const unsigned char *, int, int *, unsigned char *, int)int *str_lenunsigned char * (const unsigned char *, int, unsigned char *) (const unsigned char *, int, int *)4c:\libtasn1\lib\element.cint *tagValueint *classValue (node_asn *, const char *, int *, int *)ASN1_TYPE rootvoid *ivalue (ASN1_TYPE, const char *, void *, int *)ASN1_TYPE node_rootconst void *ivalue (ASN1_TYPE, const char *, const void *, int)*len = strlen() + 1; if ( < strlen()+(*len)) { return ASN1_MEM_ERROR; } else { strcat(, ); }ptrptr_sizedata*len = strlen() + 1; if ( < *len) { return ASN1_MEM_ERROR; } else { strcpy(, ); }*len = ; if ( < ) { return ASN1_MEM_ERROR; } else { memcpy( , , ); }data_sizec:\libtasn1\lib\errors.cc:\libtasn1\lib\errors.hc:\libtasn1\lib\int.h(1<<30)(1<<29)(1<<28)(1<<27)(1<<26)(1<<24)(1<<23)(1<<22)(1<<21)(1<<20)(1<<19)(1<<18)(1<<17)(1<<16)(1<<15)(1<<14)(1<<13)(1<<12)(1<<11)(1<<10)(1<<9)(1<<8)272120191817151413121110976(&0xFF)1024const char *fmt... (const char *, ...)asn1_retCode error (asn1_retCode)const libtasn1_error_entry []LIBTASN1_ERROR_LOOP( if(p->number == error) { ; break; } )const libtasn1_error_entry *p; for(p = error_algorithms; p->name != NULL; p++) {  ; }{ ,  }namec:\libtasn1\lib\gstr.cchar *destsize_t dest_tot_sizeconst char *src (char *, unsigned int, const char *)c:\libtasn1\lib\parser_aux.cc:\libtasn1\lib\gstr.h_asn1_str_cat(,MAX_ERROR_DESCRIPTION_SIZE,)y_asn1_str_cpy(,MAX_ERROR_DESCRIPTION_SIZE,)const char *req_versionconst char *sint *majorint *minorint *micro (const char *, int *, int *, int *)int *number (const char *, int *)list_type *struct list_structlist_struct *c:\libtasn1\lib\structure.cconst char *oidValue (ASN1_TYPE, const char *)int *num (ASN1_TYPE, const char *, int *)FILE *outASN1_TYPE structureint mode (FILE *, ASN1_TYPE, const char *, int) (ASN1_TYPE, const char *, ASN1_TYPE *)node_asn **node (node_asn **, node_asn *)const char *element_name (ASN1_TYPE *)const ASN1_ARRAY_TYPE *array (const ASN1_ARRAY_TYPE *, ASN1_TYPE *, char *)ASN1_TYPE pointer (ASN1_TYPE, char *, char *)c:\libtasn1\lib\windows\config.hc:\libtasn1\lib\defines.hc:\program files\microsoft visual studio 8\vc\include\string.hconst wchar_t *_Str1const wchar_t *_Str2wchar_t *_Str (wchar_t *)wchar_t _Val (wchar_t *, wchar_t) (wchar_t *, wchar_t, unsigned int) (const wchar_t *, const wchar_t *, unsigned int)const wchar_t *_SubStr (wchar_t *, const wchar_t *)wchar_t _Chconst wchar_t *_Control (const wchar_t *, const wchar_t *, unsigned int, localeinfo_struct) (const wchar_t *, const wchar_t *, localeinfo_struct)wchar_t *_Dst (wchar_t *, const wchar_t *, unsigned int, localeinfo_struct)wchar_t *_String (wchar_t *, localeinfo_struct)wchar_t (&_String)[_Size] (wchar_t (&)[_Size], localeinfo_struct) (wchar_t *, unsigned int, localeinfo_struct) (wchar_t (&)[_Size]) (wchar_t *, unsigned int) (wchar_t *, unsigned int, wchar_t) (wchar_t *, unsigned int, wchar_t, unsigned int)wchar_t (&_Buffer)[_Size]const wchar_t *_ErrorMessage (wchar_t (&)[_Size], const wchar_t *)wchar_t *_Buffer (wchar_t *, unsigned int, const wchar_t *)int _Error (wchar_t (&)[_Size], int)wchar_t *_Bufint _ErrNum (wchar_t *, unsigned int, int)const wchar_t *_Delimwchar_t **_Context (wchar_t *, const wchar_t *, wchar_t **)const wchar_t * (const wchar_t *, wchar_t) (wchar_t (&)[_Size], const wchar_t *, unsigned int)rsize_t _MaxCount (wchar_t *, unsigned int, const wchar_t *, unsigned int) (const wchar_t *, unsigned int) (char *, int) (char *, int, unsigned int)const char *_Str1 (const char *, const char *, unsigned int)const char *_Str2const char *_Srcvoid *_Pvint _Csize_t _N (void *, int, unsigned int)const char *_SubStr (char *, const char *)int _Chconst char *_Control (char *, const char *, unsigned int, localeinfo_struct)char *_String (char *, localeinfo_struct)char (&_String)[_Size] (char (&)[_Size], localeinfo_struct) (char *, unsigned int, localeinfo_struct) (char (&)[_Size]) (char *, unsigned int)const char *_Delimchar **_Context (char *, const char *, char **) (const char *, int) (char *, unsigned int, int, unsigned int) (char (&)[_Size], const char *, unsigned int) (char *, unsigned int, const char *, unsigned int) (const char *, const char *, unsigned int, localeinfo_struct)char (&_Buffer)[_Size]int _ErrorMessage (char (&)[_Size], int)char *_Buf (char *, unsigned int, int)const char *_ErrorMessage (char (&)[_Size], const char *) (const char *, const char *, localeinfo_struct)void *_Dstconst void *_Src (void *, const void *, unsigned int) (void *, unsigned int, const void *, unsigned int)size_t _DstSizeconst void *_Buf1const void *_Buf2 (const void *, const void *, unsigned int) (void *, const void *, int, unsigned int) (const void *, const void *, unsigned int, localeinfo_struct)const void *const void *_Buf (const void *, int, unsigned int)wcsstr_CONST_RETURNc:\program files\microsoft visual studio 8\vc\include\stdio.hc:\program files\microsoft visual studio 8\vc\include\swprintf.inlconst wchar_t *_Format_locale_t _Plocinfova_list _Ap (wchar_t *, const wchar_t *, localeinfo_struct, char) (wchar_t *, const wchar_t *, localeinfo_struct, ...) (wchar_t *, const wchar_t *, char) (wchar_t *, const wchar_t *, ...) (wchar_t *, unsigned int, const wchar_t *, localeinfo_struct, char) (wchar_t *, unsigned int, const wchar_t *, localeinfo_struct, ...) (wchar_t *, unsigned int, const wchar_t *, char) (wchar_t *, unsigned int, const wchar_t *, ...)FILE *_File (int, _iobuf *) (_iobuf *)int _FileHandleconst char *_Format (int, const char *)const char *_Directoryconst char *_FilePrefixconst void *_DstBuf (const void *, unsigned int, unsigned int, _iobuf *)__int64 _Offsetint _Origin (_iobuf *, __int64, int)long _Offset (_iobuf *, long, int)void *_DstBufsize_t _ElementSize (void *, unsigned int, unsigned int, unsigned int, _iobuf *) (void *, unsigned int, unsigned int, _iobuf *)wint_twint_t _Ch (unsigned short, _iobuf *) (wchar_t, _iobuf *)const wchar_t *_ModeFILE **_FileFILE *_OldFile (_iobuf **, const wchar_t *, const wchar_t *, _iobuf *) (const wchar_t *, const wchar_t *, _iobuf *) (_iobuf **, const wchar_t *, const wchar_t *) (int, const wchar_t *) (const wchar_t *, localeinfo_struct, ...) (const wchar_t *, ...) (const wchar_t *, unsigned int, const wchar_t *, localeinfo_struct, ...) (const wchar_t *, unsigned int, const wchar_t *, ...) (const wchar_t *, const wchar_t *, localeinfo_struct, ...) (const wchar_t *, const wchar_t *, ...) (_iobuf *, const wchar_t *, localeinfo_struct, ...) (_iobuf *, const wchar_t *, ...)va_list _ArgList (const wchar_t *, localeinfo_struct, char) (const wchar_t *, char)const wchar_t *_Directoryconst wchar_t *_FilePrefixva_list _Args (wchar_t *, unsigned int, unsigned int, const wchar_t *, localeinfo_struct, char) (wchar_t *, unsigned int, unsigned int, const wchar_t *, localeinfo_struct, ...) (_iobuf *, const wchar_t *, localeinfo_struct, char) (_iobuf *, const wchar_t *, char) (wchar_t (&)[_Size], unsigned int, const wchar_t *, char) (wchar_t *, unsigned int, unsigned int, const wchar_t *, char) (wchar_t (&)[_Size], unsigned int, const wchar_t *, ...) (wchar_t *, unsigned int, unsigned int, const wchar_t *, ...) (wchar_t (&)[_Size], const wchar_t *, char) (wchar_t (&)[_Size], const wchar_t *, ...) (const wchar_t *, _iobuf *)int _SizeInWords (wchar_t *, int, _iobuf *)wchar_t _C (wchar_t)int _ShFlag (const wchar_t *, const wchar_t *, int) (char *, unsigned int, unsigned int, const char *, localeinfo_struct, char) (char *, unsigned int, const char *, localeinfo_struct, char) (char *, unsigned int, unsigned int, const char *, localeinfo_struct, ...) (char *, unsigned int, const char *, localeinfo_struct, ...) (const char *, localeinfo_struct, char) (const char *, localeinfo_struct, ...) (char *, const char *, localeinfo_struct, char) (char *, const char *, localeinfo_struct, ...) (_iobuf *, const char *, localeinfo_struct, char) (_iobuf *, const char *, localeinfo_struct, ...) (const char *, char) (char *, unsigned int, const char *, char) (_iobuf *, const char *, char) (char *, unsigned int, const char *, ...) (_iobuf *, const char *, ...) (char *, const char *, char) (char *, const char *, ...) (char (&)[_Size], const char *, char) (char (&)[_Size], unsigned int, const char *, char) (char *, unsigned int, unsigned int, const char *, char)char *_Bufferchar (&_Buf)[_Size]rsize_t _Size (_iobuf **) (const char *, unsigned int, const char *, localeinfo_struct, ...) (const char *, unsigned int, const char *, ...) (const char *, const char *, localeinfo_struct, ...) (const char *, const char *, ...) (char (&)[_Size], const char *, ...) (char (&)[_Size], unsigned int, const char *, ...) (char *, unsigned int, unsigned int, const char *, ...) (_iobuf *, char *, int, unsigned int)unsigned int _Formatint _Max (_iobuf *, char *)const char *_OldFilenameconst char *_NewFilenameint _Wordconst char *_Modeconst void *_Strconst fpos_t *_Pos (_iobuf *, const __int64 *) (_iobuf **, const char *, const char *, _iobuf *) (const char *, const char *, _iobuf *) (const char *, _iobuf *) (_iobuf **, const char *, const char *)const char *_DirNameint _MaxCount (char *, int, _iobuf *)fpos_t *_Pos (_iobuf *, __int64 *) (const char *, const char *, int)struct _iobuf_SYS_OPEN_P_tmpdirc_putwc_nolock((),stdout)_c_getwc_nolock(stdin)_putc_nolock((),stdout)_getc_nolock(stdin)_fputc_nolock(, )_stream_fgetc_nolock()(--()->_cnt >= 0 ? 0xff & (*()->_ptr++ = (char)()) : _flsbuf((),()))(--()->_cnt >= 0 ? 0xff & *()->_ptr++ : _filbuf())_fgetwc_nolock()_stm_fputwc_nolock(,)fputwc(,)fgetwc()_CRT_DEPRECATE_TEXT("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS.")(wint_t)(0xFFFF)0x00800x00400x00200x00100x00080x00040x00000x00020x0001(&__iob_func()[2])(&__iob_func()[1])(&__iob_func()[0])((long)())fp(sizeof(_P_tmpdir) + 16)(sizeof(_P_tmpdir) + 12)L"\\""\\"(-1)512_NSTREAM_c:\program files\microsoft visual studio 8\vc\include\ctype.hwint_t _Cwctype_t _Type (unsigned short, unsigned short) (unsigned short, localeinfo_struct) (unsigned short, unsigned short, localeinfo_struct) (int, localeinfo_struct)int _Type (int, int, localeinfo_struct)const wctype_t *const unsigned short []__iscsym__iscsymf__toascii__isascii(_iswalnum_l(, ) || (() == '_'))_p(_iswalpha_l(, ) || (() == '_'))(_isalnum_l(, ) || (() == '_'))(_isalpha_l(, ) || (() == '_'))(iswalnum() || (() == '_'))(iswalpha() || (() == '_'))(isalnum() || (() == '_'))(isalpha() || (() == '_'))( () & 0x7f )_Char( (unsigned)() < 0x80 )( ()-'a'+'A' )( ()-'A'+'a' )_ischartype_l(, _CONTROL, )_Locale_ischartype_l(, _PUNCT|_ALPHA|_DIGIT, )_ischartype_l(, _BLANK|_PUNCT|_ALPHA|_DIGIT, )_ischartype_l(, _ALPHA|_DIGIT, )_ischartype_l(, _PUNCT, )_ischartype_l(, _SPACE, )_ischartype_l(, _HEX, )_ischartype_l(, _DIGIT, )_ischartype_l(, _LOWER, )_ischartype_l(, _UPPER, )_ischartype_l(, _ALPHA, )( (()!=NULL && (((_locale_t)())->locinfo->mb_cur_max) > 1) ? _isctype_l(, (), ) : _chvalidchk_l(,,))_Flag(==NULL ? __chvalidchk(, ) : ((_locale_t))->locinfo->pctype[] & ())(__PCTYPE_FUNC[()] & ())(0x0100|_UPPER|_LOWER)0x80000x800x400x200x100x80x4__pctype_func()c:\libtasn1\lib\libtasn1.hc:\program files\microsoft visual studio 8\vc\include\sys\types.hc:\program files\microsoft visual studio 8\vc\include\time.hc:\program files\microsoft visual studio 8\vc\include\wtime.inlconst time_t *_Time (wchar_t *, unsigned int, const __int64 *) (const __int64 *)c:\program files\microsoft visual studio 8\vc\include\time.inltime_ttime_t *_Time (__int64 *)tm *_Tm (tm *) (tm *, const __int64 *)tm * (char *, unsigned int, const __int64 *)time_t _Time1time_t _Time2 (__int64, __int64)char * [2]const __time64_t *_Time (wchar_t (&)[_Size], const __int64 *)const tm *_Tm (wchar_t *, unsigned int, const wchar_t *, const tm *, localeinfo_struct) (wchar_t *, unsigned int, const wchar_t *, const tm *)const __time32_t *_Time (wchar_t (&)[_Size], const long *) (wchar_t *, unsigned int, const long *) (const long *)const tm *_Time (wchar_t (&)[_Size], const tm *) (wchar_t *, unsigned int, const tm *) (const tm *)unsigned int _MilliSec (tm *, unsigned int)__time64_t *_Time (char (&)[_Size], const __int64 *)__time64_t _Time1__time64_t _Time2__time32_t__time32_t *_Time (long *)size_t _Max_size (char *, unsigned int, const char *, const tm *, localeinfo_struct) (char *, unsigned int, const char *, const tm *) (tm *, const long *)__time32_t _Time1__time32_t _Time2clock_t (char (&)[_Size], const long *) (char *, unsigned int, const long *) (char (&)[_Size], const tm *) (char *, unsigned int, const tm *)size_t *_ReturnValueint _Index (unsigned int *, char *, unsigned int, int)long *_Timezonelong *_Daylight_savings_biasint *_Daylightlong *CLOCKS_PER_SEC(__tzname())(*__timezone())(*__dstbias())(*__daylight())1000 (node_asn_struct, const char *) (node_asn_struct *, const char *, int *, int *) (node_asn_struct, node_asn_struct *, const char *, const char *) (node_asn_struct, node_asn_struct *) (node_asn_struct, const void *, int, const char *, int *, int *) (node_asn_struct *, const char *, const void *, int, char *) (node_asn_struct *, const void *, int, char *) (node_asn_struct, const char *, void *, int *, char *) (node_asn_struct, const char *, int *) (node_asn_struct, const char *, void *, int *) (node_asn_struct, const char *, const void *, int) (node_asn_struct *) (node_asn_struct, const char *, node_asn_struct *) (_iobuf *, node_asn_struct, const char *, int) (const static_struct_asn *, node_asn_struct *, char *) (const char *, node_asn_struct *, char *)struct static_struct_asnstruct node_asn_structnode_asn_struct *NULL0x1B0x050x0A0x060x180x170x030x040x110x020x010xC00x00128"0.3.0"c:\libtasn1\lib\mem.hstrduprealloccalloc_asn1_free_asn1_malloc/O2 /I "../../lib" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/O2 /I "../../lib" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /DSIZEOF_UNSIGNED_LONG_INT=4 /DSIZEOF_UNSIGNED_INT=4 /D_M_X86 (node_asn_struct) (node_asn_struct *, unsigned int) (node_asn_struct *, node_asn_struct *) (node_asn_struct *, const char *) (node_asn_struct *, const unsigned char *, unsigned int)char [128+1] (FILE *, node_asn_struct, const char *, int) (node_asn_struct **, node_asn_struct *) (node_asn_struct, char *, char *) (node_asn_struct *, char *, int) (unsigned char *, int, node_asn_struct *) (node_asn_struct *, unsigned char *, int *, int *) (node_asn_struct *, char *) (node_asn_struct *, char *, char *) (const unsigned char *, node_asn_struct *, int *) (node_asn_struct *, const unsigned char *, int, int *)FEACP aborted because NCB getEarlyExit() returned truemoccac:\libtasn1\windows\libtasn1.ncbC:\libtasn1\windows\test-tree\test-tree.vcproj/O2 /FD /EHsc /MT /Fo"\\" /Fd"\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/ACWD "c:\libtasn1\windows\test-tree\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\test-tree\c:\libtasn1\tests\test_tree.cc:\libtasn1\tests\test_tree_asn1_tab.cconst ASN1_ARRAY_TYPE []int argcchar *argv[] (int, char *[])test_type []__unnamed_0020_1/O2 /I "..\..\lib" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/O2 /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86C:\libtasn1\windows\test-parser\test-parser.vcproj/ACWD "c:\libtasn1\windows\test-parser\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\test-parser\c:\libtasn1\tests\test_parser.cint lineNumberchar *lineFILE *file__unnamed_0022_1"Test_parser_ERROR.asn"C:\libtasn1\windows\asn1-parser\asn1-parser.vcproj/ACWD "c:\libtasn1\windows\asn1-parser\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\asn1-parser\c:\libtasn1\src\asn1parser.c/O2 /I "..\..\lib" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /DVERSION="0.3.0" /D_M_X86C:\libtasn1\windows\gnulib\gnulib.vcproj/ACWD "c:\libtasn1\windows\gnulib\" -I "C:\Program Files\Microsoft Visual Studio 8\VC\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include" -I "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include" -I "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include" -AI "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -AI "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"C:\libtasn1\windows\;c:\libtasn1\windows\gnulib\c:\libtasn1\gl\strdup.hc:\libtasn1\gl\getopt_.hint ___argcchar *const *___argvconst char *__shortoptsconst option *__longoptsint *__longind (int, char *const *, const char *, const option *, int *) (int, char *const *, const char *)(0)majminc:\libtasn1\gl\getopt_int.hchar **___argv_getopt_data *__data (int, char **, const char *, const option *, int *, _getopt_data *)int __long_onlyint __posixly_correct (int, char **, const char *, const option *, int *, int, int, _getopt_data *)_getopt_data::__unnamed_0026_1 (int, char **, const char *, const option *, int *, int, int){ 1, 1 }c:\libtasn1\gl\gettext.hString((const char *) ())DomainnameCodesetDirname((const char *) ())(() == 1 ? (const char *) () : (const char *) ())Msgid1Msgid2Category(() == 1 ? (const char *) () : (const char *) ())Msgidc:\libtasn1\gl\getopt.cchar *const *argvconst char *optstringchar **argvconst option *longoptsint *longindint long_onlyint posixly_correct_getopt_data *d (int, char **, const char *, int, _getopt_data *) (char **, _getopt_data *)_getopt_data(argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')ch1ch2gettext ()c:\libtasn1\gl\getopt1.cconst char *optionsconst option *long_optionsint *opt_indexchar *__getopt_argv_constc:\libtasn1\gl\getopt.h`unused-module'c:\libtasn1\windows\gnulib\getopt.hc:\libtasn1\windows\asn1-parser\config.h/O2 /I "..\..\lib" /I "." /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/O2 /I "..\..\lib" /I "." /I "..\gnulib" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86/O2 /I "..\..\lib" /I "." /I "..\gnulib" /I "..\..\gl" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /D_M_X86\ °Zz>Ë®ÃEQ ’XÆ”iu]§‚¯³íÄlj©À&Tr0I€Výu .ÏyߌŒüQùÛ°„¼9/É~nao ÃÝrÓ"N*FMõ€c¢ÌUEU,eŒf§Ä´‰£Ò&ò'Pu ¢e!`‡1a¨µjËî(õFHpae’ u ?2)‡³ˆHÒ“ ½zŠ|l›5­E©k,r˜ò_îH”—j",ã‚x]ûÅ€ ÀB'Q.”xñ¨öc’-wTn)²!lf‘\E•u †%ŽÇ–ß•°@0 Qp¤teBpx©Å$ÊSd ]¨•Þz«‰¾ #%#OPŽî&±i* •šRÁ{2i熄¡c{ÄWfWS$ó‚(£3§ý±Ð¸Ç·k¯È*°¶ ­®ÏL0j ­H‘äÆZ‹|ÑÈ­µ¹JævØÜPPÔ(W ;jý¯Œ §ê ö\¹TƒI†¬Õ€Z”BÇYjpB*ÅãJ øgÈ+ë—·!&PM²yZh¡!¨A49*]zhQ¤Á“Åuh¥¡™µï ?R°9oW®'À~¾D‚dnËµÌ Nv†G2IH²ÌeJ„Ÿ€˜¯·°É°Ø½©PÀÿU1%¼løoôopêǽ€§‚a<…ûu,µWÈLeê£D*KƒMlmTŒ•›‡«CÒM}«`°l´l3xbUÈFn‹«¡X·µ‹Éæy½]„×3÷)´Z„m`ÚJ•¡€>)\„–ÇÛ(œfq'_*o[ª¥´Ò%a+wƤ[î¹Àlc†z~òŽäoǃÜoØo˜MÐo¥NÔoàoèoìoðo…ÒtÉ’ z%+(S)GE}j{ÂCqwMŸAFùCŸ¢ô¢k„ú|4¥ø”ªwl«Ê±à¯L¥s>zO9pxίWµÌ†³~´籟²€ ¸>ºÂ8ÀÁ·Þ“ņksdG•Æc¨f?Eln Wƒ#8}kXþdzøi&u¯ƒ2s`—»©ô´«DKoµ¨.0jB«tŽ'ÀŒ@B*[JUO;ƒ¸ª)|j¦ED§1Au ­»Q£dƒ»dÌ_§JFÙ©†¢¤+‘dcû!OªoŸ¥TÈÑKÇ"tÅ’d3†Š o¤o˜oœooŠf”oˆoŒo€o„o©sÝ€Hd2- H¦Šo͈BG"‚c$²bH_s­s5z•Ò•U–mhšø¡x-)”csÊ¥o°šmÆ”Çæ X`«§øÇgÌDv¥Úfop S•|••QÕµ3pÕŒZö±‰P?x‰n_ppÅÔXÜ/ª¯'–_yp2u¶{¬”=£ÌoÈoÄoÀo¼o¸o´o°o¬o¨oáy[¦®zàƒÚ† hVp*„¥:‰tLœÇn²Èk £.o´.Z1ªÄx¢ðtGb¿2SFºH,N!s%‹ÔS¡yiGh Š*ÆÝp§¤~þ‡Y6j„§ß jz•NâªÐµ$ÂßOpµþ~ÆH›÷ÂE¥ …ñmË.S¥Z¥o¥ìM¦’L¥[­ýc=pGGæÅ·+Ü`Y˜¿SórwÄO/' Cl“ˆœ–(/Pl̬â¿ý€µ€z(UMvz$ Zµ“šk(†îwFw’[kCŒÆµTgU«wXmt<)Ñ'¶]¯‘µG±«œ”Œ•_Mœ‚Š@·`¸ú¼·³î“”Ü.ïu^Ê{t2W'pjp¹‡+‚yÕ! ‹oÆg'aÁ5JO>€K•§„…¯¬PŸ²*2¼î•Ûmz§l ¬‚›¨Z¤_W)è¹î¹þïþïF™YYBISONYYBISON_VERSIONYYSKELETON_NAMEYYPUREYYLSP_NEEDEDyyparse_asn1_yyparseyylex_asn1_yylexyyerror_asn1_yyerroryylval_asn1_yylvalyychar_asn1_yycharyydebug_asn1_yydebugyynerrs_asn1_yynerrsYYTOKENTYPEyytokentypeASSIGNUMIDENTIFIEROPTIONALINTEGERSIZEOCTETSTRINGSEQUENCEBITUNIVERSALPRIVATEAPPLICATIONDEFAULTCHOICEOFOBJECTSTR_IDENTIFIERBOOLEANTRUEFALSETOKEN_NULLANYDEFINEDBYSETEXPLICITIMPLICITDEFINITIONSTAGSBEGINENDUTCTimeGeneralizedTimeGeneralStringFROMIMPORTSENUMERATEDint.herrors.hparser_aux.hstructure.hFILEfile_asn1asn1_retCoderesult_parsenode_asnp_treelineNumberlastTokenMAX_NAME_SIZE_asn1_identifierMissingfileNameYYDEBUGYYERROR_VERBOSEYYTOKEN_TABLEYYSTYPEYYSTYPE_IS_DECLAREDconstantstrnodeyystypeYYSTYPE_IS_TRIVIALYYTYPE_UINT8yytype_uint8YYTYPE_INT8yytype_int8__STDC____C99__FUNC____cplusplus_MSC_VERYYTYPE_UINT16yytype_uint16YYTYPE_INT16yytype_int16YYSIZE_T__SIZE_TYPE__size_tc:\program files\microsoft visuatf_IO_flockfileold_flags2_IO_FILE_flags2_IO_FLAGS2_NOTCANCEL__fxprintf_IO_funlockfilePOSIXLY_CORRECTTESTdigit_optindthis_option_optind__unnamed_0028_1optionsopt_indexc:\libtasn1\gl\getopt.hTest_tree_asn1_tab.cgetopt_.hc:\libtasn1\windows\asn1-parser\config.hc:\libtasn1\windows\gnulib\getopt.hc:\libtasn1\gl\getopt_.hP ®m3võEÀ\pd"ße9÷PÆ‚µ9Œ:‡ XOÍ‘…’k¦k5’D_Äî 9MA^ÓjË#P)ä{Þ,h÷Q;K¹¨`;€nBPªÙe¯Pg<7\Ò]Tqx’ð8ãP*\,YßO TBáh±ƒAU…‚vLîhiÏ#v{F·d¤Rye‡×[‘°5¹‰í[Ù—Um ztV>ïSÔs†•ä\†˜®84 =Û•0†WhLdF\}Ê3ômóñ@¢”ÌLÿg^¬zk!DWa€ë]w}*L]ƒ(EÄBÓnz‚ö§cüå`€ |¾èi»ƒ`s["/k+°O p¢W[{Uëg c·Tÿ_ži ŽäŒZ—€QMœgý jp†°Eï>ÜA-™‡âSq2—F±iCˆWtK rn Pûn p½€<Àfˆ[¬9Æ &:þLÚ†l‘o‰û‡rÈ„²3ŠwÉ_1+ù83[þ3¶>I6ëM¤968}K9ž&`H'bÏTâ•-ˆÈ8½g°x{,!$+{‡€ž‡ÉQ‹ –øÉw4áqÝgr­6*P pÌw•d&"Á]—LÔpÓ/Û\›‰f˜MhÕ„#Ië„âAùñd˜b>ŒsCó?ojC5‹•AIŒ1l6˜/~–{qY8vÁ| }0Ä <Å”vŒç\W®>L „¹Z2?´DÔ}âwÙT†@_ð2Gv:s2?æ:yU¸NŒVÖ~|EwlGÍB°S{oRXI&y<Þup ‡—%#fÄ$U7fj™TQ?þNbMD—7Ù’ÂNéoR2>”Ãu4R!ñŽeH‘ëCŽ+¦•÷6Y‡ùUGÞaR^^:ýS-QjÔ"ë“Yòcq·1Gr 4‘0Lèhx-—N òYªd|KòL°]³@)”GksUnqA˜K3žR’÷”–fd`@Nv&9—zøo•ä'C ™0!¦F}•ù$mž@GRÇ\.^‰§s;zc={Á.7´zŠI^ÆAÈ=wq^‰IFIí—‹ V€Ëj#)^æ3rämÍ’i.†[샚fÛx¥è1S‹@a k0CE}æ9G‚,¢drP¦{'YìlÊsEnt»K@<?~Ø3†|€Y*g¿m†ÚP>‡x{Ú5HEŽ¢KaBEHNk-ÿB-‹¥‘Ò*÷D¡rOŒ@óA‚ÏXÐ> 7E:^@ˆD$|D_]YTr ÿª¹ ñ/{hk J8rNC?±‰ ‹æ=ÊfºM4x±já;n :Š5¼]»Y†’r¬ÑR÷TèL\qxŽ4­axz–pÔqætçeC/Tù}|e©‰†³CÎ@ÈDd[ö‡ŽéAf YØ…½‘4 F³Q…ûguHß`p®†š]!Lf–Ÿvd¬I ,TΆ[ÜEc’ÑPÙ9"w†±/Êœ(iMuÓa+¡—Ž8bˆNbsg^¸V›.“boSdCŠ&3ª+î!ji[B„p!‹èƒn’ý=£Bzœ‚-#¡e~'†HÒ‰ð|1i.XXpúOBéYs*B@LK¶ ü@JwM”5üö5>>Ð /-{/`"ƒŽ —T^b¤l`]·a. lIÄ?ÛYæ-Ö#‹~+#oýE {lgc~¬n>lâ|$CWa\wÒvå@h+&—õýd>#¢h16mHúiÐ#~yä8NÛŠŸO¼!`›l¬D¡4P:NÄL+B“üzŽ(òiª'KF;?o,gw‰y¾>Z~…cx„ý-£[r“ŽÕ^o{P>xv6`ÔŸø‰Ò‚Õœ`žÈ{=…8„o6Zv¶r64f%HypxôŠ”†§e~AÃFdÝI3EYJziQ€0Y·6%JÄŽ&P>C¿•×,€}g/Ah+nhOMC€ëhGq·WØ-Æ<E3’«²rêj¸Q¢’äcŒh“‹r«ª\®3pV® ± t\m„µ…ápÒdT+™ZHj8A¹Fr‹d{œZO³B½ XQ¦'8'1|ë?Î1ˆiÒGgeÀ}1rÏeDÚ8Q± D^i•ï…Ï„µHQ5mb‘¨ŽÇNa3ƒ=ÌJZuœEƒ{<¨ £80X=Gðz‹'|RpÎg¨#=r«qrBëlñyÊLEJ^lk¨ø…F÷—à;6a5z\Z1q”">}S"ë°ˆ:gé‚i€ÃŠËVH_i‘G’>ƒU´<’M>3íb+t»=©˜9M@ VTG‡QP\94;›?C# o1F¤y^Q‰CfàKØfŠN×NQ˜ä7‘Îxä†NUàMÃr*49ˆøuŽ :êe[>]F‡!é<ÀSÎI°ëö-WW•…_j¸ŠÒ@'Så6à5µ2Ýek&i É2g‰½%%·¢z¬ývq`t 2‚mo|&Íqêsv…ŒY3Œ{õhÌPQJ\BK“q_7Ã!@ȈYÑ ú^ EƒÏtÜt—š6mD 6êxóë ?N Ìzvå…Û@ÇW25dˆVÏK˜8¨N7WÂcn3ó\èXýh£1á3M)1¥Ñ ìFÄ@”l '¾[ìDC.d§€F:TcÅgÄ5.Df)`ŠŠhŸŒìaNw_‹\­+"Vfl}-T±-Ü“(áM•C(’€A-GO"ch@·s†l‡‘˜ÒTƒÜïkˆgÎSz…be*—0À4q½‚ÑKÄ0’«—y“ DYm:m5%ŸP8L²:U,r¹ yŠ;4¥ ^EæKŒn……©UýTÁzh=Êk€|Ù §~çk­Msw]…7“ÈEâ)Ï xC$r¯pdSd}åJ)dÃMv>TN·Ž$a¬7LNÝ‚do]D5²¼;fA¶.$e.—@O·f·8)>Öê+=Â6e^= ·)bt98yaL¬‰ ,2 Ü"6c£-Ï#zZ$Q]q$#F¿võã]÷3e“jXN5@Š2<„ˆã(I{«giŒÕ“4—Xjm—Øzg~kk¤bj®;RLù;Ãj)WyXóCk3‡< Js‘çF=©-fB1ƒù?‰}5#>CLÍ6i^ŽW‚P²N0xÁ;7hc† ÷Ÿ˜.' A×r<~jöV[ìIé•’‡Û”voK¦A´=q‚»'%€…æç€vŸTf4ŒsSF­uO&Ce2]hE{OK¡S[k޾IIDš–=V%6Ïpfq<—n·úŽÖE¦…¨a‚oï:˜^zwR1:ID“g’_= –\–6ÝN•%‰ꑊH¨‡‡o‡Ød«@ÏoÉ haÍ5–N>v#Pkè€ØzŸaÁ˜wÃqþ€ixGAÃ-[£gÛKmê–ys‡{â?pdWc¡j=Niô7 7zˆ€R¼Lýj\T– B´L7A‘ï|rÚLa-—˜ÁZ› @H(j*WRÆ~<ˆ˜hL1ÄV¿0‹Lu[€þ>=—\‚£6S e\:Î…´!Œƒ”™—€Æ +D>|Âe~T Ig‰ƒiÆ9´u7­R˜#a½pRÆU8=wt€¦DfHbP‘n/U©jë^cL¥†z= ¹t%s%‹Hø\¸÷R^8@–ªGwÔS"j  Qþ.º€š†(O=A/ÂoˆkÄ6 ŠñÔkÁvkYƒG]!˜V#TÂYP½HGî;ç»jØ!ŽN€@EuuT¸@ Š<"M’?o`<a˜¨‚M‹®"ÚDx)pg…2R&lWM4yF+Œ„1M[Œ§osŠmn…äiÓÇß\0pÆ1Þ`N…N0=â<ÿbTÍ?ØOpøÀÖ5br™_¤`.êuëŽÄGKt¬TZP±W'_»rôF:ë‹×wšˆ >©ƒTV. RP~œr¼’ˆ”M–DB#J³|b\¢×F²úK‡Aƒ 8Új¾@³?™Q©ªH=ŽIG@[9l£qeRS{UUGè~P—Y«<‰Où”.pp‡t?u—S]¢¶|w|:(¸k#GO’AqÁ7=P‚o”­[Aµ¿x$ùMGðGÜbØx_“o—>îYaOrEH‡qP·4ry›žHb?$ AiB%‹–è—a‡¼Ã{S#QúA®F£Er‡/Ó—Ñ<åZ9Ò3—cú``r@t Šótœdfì1`v^  uR,kM‰K—b3o.B“ôT6€q÷Nc 5îOnAmÙVr–Bn22—‘X$=±‚¡ƒae( - ÞŸV<µ~ØKhÍ€‘kÖoé!/j.xZl#LrºhpÅn7ÀUg8vA¶v£H –|€æhy$.V3¹)Š ¯€²ŽT8ìPene‚ÿ“zvá&krWÆ»#8†p.Lx`…ßFÜvißcÄO}ÄkÖŽXecf7GÕ>épJou‰?ƒj6ï`ï$³P‘SÓ˜|Ô‹Ê;´nÇ4O_1Ž3DŽtQòN+@¸Gì—ÁKF„éR– ±–ÞWÏ tþ•4w.Aö–P‰}‘™rû€ ]8>RŽ-o›lÒ×],]>kxECZQÎO¤Och( ·‡õašE!ÇO‡œA"R‰hüw+?*$xQ7 2B¨‹zO>±7™;˜5¹AÇp¿<'ÅaÙ< #?k‡H—§Ly?@tKHÃ>lTø!åCra‘@q=‹à˜4ÿsë‡6a§”nˆ MYv$‘£_Ùq½?•–y\L=Fq~¾nái  ™U†6-ahm¿3qv‡ôsN_N:ŠMÃÞd¦R§rUŠ•‘or©“¹Ó;„ó‚lq8–úxIzàs0súHw“JN¤MY¨WÖEÄ|>¹›aYxÏßfü3\…‰÷ †w‹ð-¼o'!äEÉMã"Aw"51O`³g»8Í|]¾Eý\@j`XÅR?6¸—hUÎ&T9°kÄ#ŽNàX1‹b"‡nj\×\úqWiÔ7ÝCNC¶p*‡âðˆÕ€†€5Cb0zWî6ÿ&ÎÒ•Ý> Œd‚V5{ÿˆŽcx19‹¥P™HÁ EVs%<©PqFÝZ ‹«Y‡b¸`jˆ_ ¤ë’äD©>”ECS6^|+„Ô 6°TÀPjmGˆ"TYAZ§| ø’˜vÀ†¤JßÌW™~£@aK2ÛB z+3rufTˆão—?ˉ)l3TZj3¾:Jpm4‚“9K0·ljz/.H9{Pe³„°ñ!Ñm'dÂs:@¹„ËÄH‘e ‡©^Þ ²†Ž•6pe^»O–^'$0_;qs˜]áYKB[n}6¦uÜ<Ÿ3(w_¨€to’€-9šuN+qù<J%X*N¯H‰(Ðu•’¦Tw3 –¶dkùCV.[‘<_ëiáeÏ“ 3Ȭ„¤;ªZw—ä0$]\×6ŸGć™-Áud)qŽ˜PëN32–s׃ßLz9EM¶º(£ná.ñnÄ—çnâŽÈlÈ>OˆÌC?e1u?d®Š_)]ï3ó•Q]MDkÞ±#‘‰ÐDdcDØQ¢pÛt.9iåO†>óŠzÕY‰c„ŒS}jù…\I€EÕh@}²AKƒïw×g¦ˆûfM‰4€«}œk˜ìE0 ¯wK‘vo<ð!K!ÕL¢Nºâ‡EmÅ£wºDãU„r$Ú‡L<ÞG„!Ì4å+ìWþPSY~|>I¬ŠFQ5!ÈGs8*MOØR=€ ?/D¼!ù+µoœ$‹|°håÝJzhJ=ac†çB©Qûp‰‡”iÞR^`žs›C4€ÿ&‚©Í–x T‘ÛlE…Íh–<=bðÚpþ‚wxU_KZÅ N~~v5à „5/€=fÒMQ“®•euŠZî-ÖAÑ :·_L7«=‚Sd8pCé è%@ š[•ŠŽs 3 Æž+ÊTÉŽ¯vÑFiΪpµ:°0àŒ ¹q1]\Ù N«ðòo1çV:šoÃh›XŽ}¢‰Êr9üZj–IiÆ|^Ó9(áõ_õgo\K?F/6Ö˜ó€Q4Ü õ @;&S”M FÜkÜrçvPiv”YEÀbÌ`¨.À6^»h–‡ã Vg’deO1>Œ`}+R*ªV:k´†Ô#¤Z¦ RQä„8futƒž<§vn}üW”H5J} ~‡Û+S&ps‚EqH§5š,zñJó†E—Ü2$h„ÊS*F³Y“‰]¹ƒƒh `‡d¹‘ažF_“d »9EWÜoÏŠ(/ »~‰S0•ÖÃ…A8‹úk|8‚'A|Cs§@ÑçQç‚O5õ3ÍUˆiôTnmITå‰QSÜ *MÀƒÏM!o‚ŒÓV®s¨v”2H!ÊvHeÓYo £,î54«bW’?QS\Z¦iÔ|%u§X•KÀ{zQ†9B†7ht0}ÿ5KOË'“ 4†_ X›€Ž!¿^ÉodÌdokvœY=Þ‘$[!wV@7oÜnÖ_á 6t¶E7rjg_llL;‚hˆYCòƒ‹/ö Ö{/Ì—#T½_›L"{ˆ9cI$îqY!kb…xþ‘l8TI…;î´{ú–JXµw ‘®e®’G;¶‘€Yˆl‡ ù>¡x(nl¡*î,Û#xj%Gg¬W::=9KL!Zr;ÏŒ¼wË-"ájN|6JJ¨†3!}]42NÖ?Š^¾‹âN“}XdXbÑ,ç}.PF$Õb®LÉ•¿CAσ;b­ŽÃt÷S>u¡A‚ŽcXl¯oob„Ï.µJÚN»>% :Q‰vX4ïrEÐ:æ5£_—wY<-e4Ÿ9 ~û³qn ]³ÌÂD Sdž$’ GàVP=!q–Gi?€u–NQ`Æ^†.w<ãgß—vinÿo p9ŒuxJMn]x±Ð˜B|B!OÈn]–Á^z=“ ÷KQ-u „õqhËHâz%7x=~fñvlòptjÎEá<a%@¥q†-ð)¹5ÉFEYu6““oiÌ-Sf.…“‚tsym1ŠÂ“T– .pÛ_`GØM yCG‚zvjedeñjöc÷]×—…j‹B„aOñ„ŒôMáz@.ð9'€DgŠ8Jje)‹ØŒçŠºRt oI-¨ ”.1šD¶aé/@•œHðeWf¼ /names/ncb/targetinfo/ncb/moduleinfo/ncb/modulecommandlines/ncb/iinstdefs/ncb/auxnamemap/ncb/directorywatch/ncb/module/c:\libtasn1\lib\asn1.c/ncb/module/c:\program files\microsoft visual studio 8\vc\include\stddef.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\crtdefs.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\sal.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\vadefs.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\stdlib.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\limits.h/ncb/module/c:\libtasn1\lib\coding.c/ncb/module/c:\libtasn1\lib\parser_aux.h/ncb/module/c:\libtasn1\lib\element.h/ncb/module/c:\libtasn1\lib\decoding.c/ncb/module/c:\libtasn1\lib\structure.h/ncb/module/c:\libtasn1\lib\element.c/ncb/module/c:\libtasn1\lib\errors.c/ncb/module/c:\libtasn1\lib\errors.h/ncb/module/c:\libtasn1\lib\int.h/ncb/module/c:\libtasn1\lib\gstr.c/ncb/module/c:\libtasn1\lib\parser_aux.c/ncb/module/c:\libtasn1\lib\gstr.h/ncb/module/c:\libtasn1\lib\structure.c/ncb/module/c:\libtasn1\lib\windows\config.h/ncb/module/c:\libtasn1\lib\defines.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\string.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\stdio.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\swprintf.inl/ncb/module/c:\program files\microsoft visual studio 8\vc\include\ctype.h/ncb/module/c:\libtasn1\lib\libtasn1.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\sys\types.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\time.h/ncb/module/c:\program files\microsoft visual studio 8\vc\include\wtime.inl/ncb/module/c:\program files\microsoft visual studio 8\vc\include\time.inl/ncb/module/c:\libtasn1\lib\mem.h/ncb/targetmap/ncb/filenameimodmap/ncb/moduleinfofreelist/ncb/versioninfo/ncb/module/c:\libtasn1\tests\test_tree.c/ncb/module/c:\libtasn1\tests\test_tree_asn1_tab.c/ncb/module/c:\libtasn1\tests\test_parser.c/ncb/module/c:\libtasn1\src\asn1parser.c/ncb/module/c:\libtasn1\gl\strdup.h/ncb/module/c:\libtasn1\gl\getopt_.h/ncb/module/c:\libtasn1\gl\getopt_int.h/ncb/module/c:\libtasn1\gl\gettext.h/ncb/module/c:\libtasn1\gl\getopt.c/ncb/module/c:\libtasn1\gl\getopt1.c/ncb/module/c:\libtasn1\gl\getopt.h/ncb/module/c:\libtasn1\windows\gnulib\getopt.h/ncb/module/c:\libtasn1\windows\asn1-parser\config.h/ncb/module/`unused-module'9^‘&ýÿ¡®álïÿH,Í£Aà *°0cé&N x$Uò8]- 9ö'k ;n Î7É\4ð”!t83ˆ7'€(z2ã1u.Â%; :¿5r >ß"ª†/^ ©6• )# ?,  <Ì)9+=(Ä žík ¨$xñÐ7м’l0<úTV`î*v% €l>Æ,PÔ4´_Ö !€²*¨¤hÌ Žâà rX¾VB*xyzklmTnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽz{|UVWXYZ[\]^_`abcdefghij¤¥¦§©ª«¬¯±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR°|¼½¾¿ÀÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:@;<=ABCDEFGHIJKL‰>efghijklm‘’“”•–—˜™š›œžŸ ¡¢£¤¥¬­®“”•–—˜™š›œžŸ ¡RSTUVÁÂÃÄÅÆÇÈÉÊË?¨­®SMNOPQXYZ¢£ab`W\]^_cd[noplibtasn1-4.16.0/windows/test-parser/0000755000000000000000000000000013615400132014224 500000000000000libtasn1-4.16.0/windows/test-parser/test-parser.vcproj0000755000000000000000000000620313246341643017661 00000000000000 libtasn1-4.16.0/windows/libtasn1/0000755000000000000000000000000013615400132013470 500000000000000libtasn1-4.16.0/windows/libtasn1/libtasn1.vcproj0000755000000000000000000001032213246341643016366 00000000000000 libtasn1-4.16.0/windows/asn1-parser/0000755000000000000000000000000013615400132014107 500000000000000libtasn1-4.16.0/windows/asn1-parser/config.h0000755000000000000000000000003013246341643015454 00000000000000#define HAVE_GETOPT_H 1 libtasn1-4.16.0/windows/asn1-parser/asn1-parser.vcproj0000755000000000000000000000643713246341643017440 00000000000000 libtasn1-4.16.0/windows/libtasn14win.mk0000644000000000000000000000343313246341643014561 00000000000000# Copyright (C) 2011-2013 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Written by Simon Josefsson October 2011. PACKAGE = libtasn1 distdir = $(PACKAGE)-$(VERSION) TGZ = $(distdir).tar.gz URL = ftp://ftp.gnu.org/gnu/$(PACKAGE)/$(TGZ) all: @echo 'Usage examples:' @echo ' make -f libtasn14win.mk libtasn14win VERSION=2.10' @echo ' make -f libtasn14win.mk libtasn14win32 VERSION=2.10 CHECK=check' libtasn14win: libtasn14win32 libtasn14win64 libtasn14win32: $(MAKE) -f libtasn14win.mk doit ARCH=32 HOST=i686-w64-mingw32 CHECK=check libtasn14win64: $(MAKE) -f libtasn14win.mk doit ARCH=64 HOST=x86_64-w64-mingw32 doit: rm -rf tmp && mkdir tmp && cd tmp && \ cp ../../$(TGZ) . || wget $(URL) && \ tar xfa $(TGZ) && \ cd $(distdir) && \ ./configure --host=$(HOST) --build=x86_64-unknown-linux-gnu --prefix=$(PWD)/tmp/root && \ make $(CHECK) install && \ cd .. && \ cd root && \ zip -r ../../$(distdir)-win$(ARCH).zip * upload: ../build-aux/gnupload --to ftp.gnu.org:$(PACKAGE) $(distdir)-win32.zip $(distdir)-win64.zip cp $(distdir)-win32.zip $(distdir)-win32.zip.sig $(distdir)-win64.zip $(distdir)-win64.zip.sig ../../releases/$(PACKAGE)/ libtasn1-4.16.0/windows/libtasn1.suo0000755000000000000000000004700013246341643014157 00000000000000ÐÏࡱá>þÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿ þÿÿÿ #!"$þÿÿÿ%þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ ñd€Z<Æ@2ProjInfoExÿÿÿÿÿÿÿÿÿÿÿÿTaskListUserTasks$ÿÿÿÿÿÿÿÿVsToolboxService"ÿÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿ þÿÿÿþÿÿÿHf*þÿÿÿ!"#'pþÿÿÿþÿÿÿ0)þÿÿÿ+,-./312945678=:;<D>?@ABChEFGnIJKLMNOPQRSTUVWXYZ[\]^_`abcde°gþÿÿÿijklmþÿÿÿovqrstuwþÿÿÿ¶yz{|}þÿÿÿ€°ˆÅEQóG¤¹N­›„¥ðC *C:\libtasn1\windows\nC:\Program Files\Microsoft Visual Studio 8\VC\crt\src\|DebuggerWatches ÿÿÿÿÿÿÿÿDebuggerBreakpoints( ÿÿÿÿ6DebuggerExceptions&ÿÿÿÿDebuggerFindSource&ÿÿÿÿÿÿÿÿC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc\|C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\atl\|C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\DebuggerFindSymbol&ÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿDebuggerMemoryWindows,ÿÿÿÿ ÿÿÿÿTExternalFilesProjectContents: ÿÿÿÿÿÿÿÿþÿÿÿDocumentWindowPositions0 ÿÿÿÿÿÿÿÿ' d‰ ÿÿ\X°[XÈ\XÃÊIÍ«4ïþîÿ.Í«4ïþîÿMultiStartupProj=;4{4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.dwStartupOpt=;StartupProject=&{4DE20933-A72B-4261-9B63-0DE9AF31DAB2};?{4DE20933-A72B-DocumentWindowUserData.ÿÿÿÿÿÿÿÿ¬SolutionConfiguration,ÿÿÿÿÿÿÿÿÿÿÿÿ’ObjMgrContentsV8"ÿÿÿÿ‚ClassViewContents$ÿÿÿÿÿÿÿÿþÿÿÿ4261-9B63-0DE9AF31DAB2}.Release|Win32.fBatchBld=;={4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.Debug|Win32.fBatchBld=;4{53CDE0B4-BA0D-4911-8730-41B03CDC310AS$ ýA+ÁH±ÚªÏ¥WLÉlü #Oÿ‡øÏ¤ELç%Ò¯##G¶åá}'bm4S8fÂþÂL¤d®—ï9LÉlü #Oÿ‡øÏ¤ELç%Ò¯##G¶åá}'bm4ProjExplorerState$ÿÿÿÿ  UnloadedProjects"ÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿHiddenSlnFolders"ÿÿÿÿÿÿÿÿþÿÿÿOutliningStateDir$ÿÿÿÿÿÿÿÿÿÿÿÿ$ŒQ fC:\libtasn1\windows\asn1-parser\asn1-parser.vcprojfC:\libtasn1\windows\asn1-parser\asn1-parser.vcprojHeader FilesS Rc:\libtasn1\windows\asn1-$Bookmarks V001.01XÏ ource FilesRC:\libtasn1\windBookmarkStateÿÿÿÿ%(TaskListShortcuts$ÿÿÿÿÿÿÿÿÿÿÿÿ&XmlPackageOptions$ÿÿÿÿÿÿÿÿ(ROutliningState2 ÿÿÿÿÿÿÿÿx^C:\libtasn1\windows\LIBCMT.lib LIBCMT.lib}.dwStartupOpt=;?{53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Release|Win32.fBatchBld=;={53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Debug|Win32.fBatchBld=;4{CE8F8E2E-E5E9-43F6-A567-CB813B1ows\gnulib\gnulib.vcprojHeader FilesSource FilesZC:\libtasn1\windows\libtasn1\libtas8C58A}.dwStartupOpt=;?{CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Release|Win32.fBatchBld=;={CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Debug|Win32.fBatchBld=;4{3E96D323-99DD-497F-991A-93n1.vcprojZC:\libtasn1\windows\libtasn1\libtasn1.vcprojHeader FilesSource FilesfC:\libtasn1\windows\test-parser\te16C9FFA99A}.dwStartupOpt=;?{3E96D323-99DD-497F-991A-9316C9FFA99A}.Release|Win32.fBatchBld=;={3E96D323-99DD-497F-991A-9316C9FFA99A}.Debug|Win32.fBatchBld=;4{0C4318E2-FFD7-40DC-945C-40016B10665C}.dwStartupOpt=st-parser.vcprojfC:\libtasn1\windows\test-parser\test-parser.vcprojSource Files^C:\libtasn1\windows\test-tree\test-trú{0C4318E2-FFD7-40DC-945C-40016B10665C}|gnulib\gnulib.vcproj|c:\libtasn1\gl\getopt_.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}1234‰ ÿÿ\X°[XÈ\X{53CDE0B4-BA0D-4911-8730-41B03CDC310A}|test-tree\test-tree.vcproj|c:\libtasn1\tests\Test_tree.c||{8B382828-6202-11D1-8870-0000F87579D2}123456‰ ÿÿ\X°[XÈ\Xú{0C4318E2-FFD7-40DC-945C-40016B10665C}|gnulib\gnulib.vcproj|c:\libtasn1\gl\getopt1.c||{8B382828-6202-11D1-8870-0000F87579D2}1234‰ ÿÿ\X°[XÈ\Xø{0C4318E2-FFD7-40DC-945C-40016B10665C}|gnulib\gnulib.vcproj|c:\libtasn1\gl\getopt.c||{8B382828-6202-11D1-8870-0000F87579D2}123456‰ ÿÿ\X°[XÈ\X.{3E96D323-99DD-497F-991A-9316C9FFA99A}|asn1-parser\asn1-parser.vcproj|c:\libtasn1\windows\asn1-parser\config.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}‰ ÿÿ\X°[XÈ\X{3E96D323-99DD-497F-991A-9316C9FFA99A}|asn1-parser\asn1-parser.vcproj|c:\libtasn1\src\asn1Parser.c||{8B382828-6202-11D1-8870-0000FÍ«4ïþîÿ`Í«4ïþîÿÍ«4ïþîÿ-2Í«4ïþîÿÍ«4ïþîÿ;?{0C4318E2-FFD7-40DC-945C-40016B10665C}.Release|Win32.fBatchBld=;={0C4318E2-FFD7-40DC-945C-40016B10665C}.Debug|Win32.fBatchBld=; ActiveCfg= Debug|Win32;ee.vcproj^C:\libtasn1\windows\test-tree\test-tree.vcprojSparser\config.h 0c:\libtasn1\gl\getopt.c6c:\libtasn1\lib\libtasn1.h8c:\libtasn1\gl\getopt_int.h0c:\libtasn1\gl\getopt.hHc:\libtasn1\windows\gnulib\getopt.h :c:\libtasn1\src\asnource Files.vcprojSourc1Parser.c2c:\libtasn1\gl\geto6c:\libtasn1\lib\libtasn1.hÔOc"%1&''J)/-0D'FL+NU+Wf8ijrx}‚'„ÜÝ Ýßÿÿÿÿ:c:\libtasn1\src\asn1Parser.cBÙ]"#$'(OutliningState1 ÿÿÿÿÿÿÿÿÿÿÿÿ~OutliningState3  ÿÿÿÿƒ€OutliningState4 ÿÿÿÿÿÿÿÿÿÿÿÿ2OutliningState6 ÿÿÿÿÿÿÿÿÿÿÿÿ¢8‚þÿÿÿ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œþÿÿÿžŸ ¡þÿÿÿ£¤¥¦þÿÿÿ¨©ª«¬­®¯þÿÿÿ±²³´µþÿÿÿ·¸þÿÿÿº»þÿÿÿ½þÿÿÿ¿þÿÿÿÁÂÃÄÅÆÇÈþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2?:;.CNXjMkl-mtwKÎÿÿÿÿQÔÿÿÿÿ0c:\libtasn1\gl\getopt.c9i)ì  #$ '()!+)./231mn qŠ‹Œ C£0¥¸.™æçèí+ï0!#2ë')_w4z0{4~N€…Gˆ7‘™Aš¡2¤´Aµ¹EºÀGÁË#ÌÒ?ßñò)"##%4$5)<>)DGHK)QUVZ)^m)’“(–©/¬)² ´)º¼½¿)Å2ÇÈ2Ê)ÎÜ)ô ö)üþÿ@)@ ) 041)9KLNYCZ]^de)‘“Ÿ& )§º»¾)Îáâ#å 1) (),6@7Ac?'CSTU VWXY;]b d§ÿÿÿÿ2c:\libtasn1\gl\getopt1.c=$‰  "# &'8,15:;?6CHLQ S¬ÿÿÿÿ8c:\libtasn1\gl\getopt_int.hÂz„–"$*<,//47DRTWYZ^Db0gi lm;nÿÿÿÿ0c:\libtasn1\gl\getopt.hyе4OutliningState7 ÿÿÿÿ§ OutliningState11"ÿÿÿÿ¹œOutliningState10"ÿÿÿÿÿÿÿÿÿÿÿÿ¼bOutliningState9 ÿÿÿÿÿÿÿÿÿÿÿÿ¾l5!$6J)KL#MINXY]%^/`abc\dk5os0} ‚‹/ž£C¤  ©Š®²ÈÍÖÙÚ hÚßÿÿÿÿ87579D2}‰ ÿÿ\X°[XÈ\X{0C4318E2-FFD7-40DC-945C-40016B10665C}|gnulib\gnulib.vcproj|c:\libtasn1\windows\gnulib\getopt.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}123456pt1.c2c:\libtasn1\gl\getopt_.h<c:\libtasn1\tests\Test_tree.c <c:\libtasn1\tests\Test_tree.cØJc?@FF’”ÏÿÿÿÿRc:\libtasn1\windows\asn1-parser\config.huà·ÑÿÿÿÿHc:\libtasn1\windows\gnulib\getopt.hýø“uÿÿÿÿOutliningState5 ÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2c:\libtasn1\gl\getopt_.hyе45!$6J)KL#MINXY]%^/`abc\dk5os0} ‚‹/ž£C¤  ©Š®²ÈÍÖÙÚ hÚßÿÿÿÿlibtasn1-4.16.0/Makefile.in0000644000000000000000000013173613615375040012272 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # aminclude_static.am generated automatically by Autoconf # from AX_AM_MACROS_STATIC on Sat Feb 1 23:22:24 CET 2020 VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_DOC_TRUE@am__append_1 = doc examples subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ $(top_srcdir)/m4/ax_am_macros_static.m4 \ $(top_srcdir)/m4/ax_check_gnu_make.m4 \ $(top_srcdir)/m4/ax_code_coverage.m4 \ $(top_srcdir)/m4/ax_file_escapes.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4-gl/00gnulib.m4 \ $(top_srcdir)/m4-gl/__inline.m4 \ $(top_srcdir)/m4-gl/absolute-header.m4 \ $(top_srcdir)/m4-gl/extensions.m4 \ $(top_srcdir)/m4-gl/extern-inline.m4 \ $(top_srcdir)/m4-gl/gnulib-common.m4 \ $(top_srcdir)/m4-gl/gnulib-comp.m4 \ $(top_srcdir)/m4-gl/include_next.m4 \ $(top_srcdir)/m4-gl/ld-version-script.m4 \ $(top_srcdir)/m4-gl/limits-h.m4 \ $(top_srcdir)/m4-gl/longlong.m4 \ $(top_srcdir)/m4-gl/manywarnings.m4 \ $(top_srcdir)/m4-gl/minmax.m4 $(top_srcdir)/m4-gl/multiarch.m4 \ $(top_srcdir)/m4-gl/off_t.m4 $(top_srcdir)/m4-gl/ssize_t.m4 \ $(top_srcdir)/m4-gl/stdbool.m4 $(top_srcdir)/m4-gl/stddef_h.m4 \ $(top_srcdir)/m4-gl/stdint.m4 $(top_srcdir)/m4-gl/string_h.m4 \ $(top_srcdir)/m4-gl/strverscmp.m4 \ $(top_srcdir)/m4-gl/sys_types_h.m4 \ $(top_srcdir)/m4-gl/valgrind-tests.m4 \ $(top_srcdir)/m4-gl/visibility.m4 \ $(top_srcdir)/m4-gl/warn-on-use.m4 \ $(top_srcdir)/m4-gl/warnings.m4 $(top_srcdir)/m4-gl/wchar_t.m4 \ $(top_srcdir)/m4-gl/wint_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = lib/includes/libtasn1.h CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = lib src fuzz tests doc examples am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/aminclude_static.am \ $(top_srcdir)/build-aux/ar-lib $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/ltmain.sh \ $(top_srcdir)/build-aux/missing \ $(top_srcdir)/lib/includes/libtasn1.h.in AUTHORS ChangeLog \ INSTALL NEWS THANKS build-aux/ar-lib build-aux/compile \ build-aux/config.guess build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/mdate-sh \ build-aux/missing build-aux/texinfo.tex build-aux/ylwrap DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASN1_VERSION_MAJOR = @ASN1_VERSION_MAJOR@ ASN1_VERSION_MINOR = @ASN1_VERSION_MINOR@ ASN1_VERSION_NUMBER = @ASN1_VERSION_NUMBER@ ASN1_VERSION_PATCH = @ASN1_VERSION_PATCH@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FUZZ_LIBS = @FUZZ_LIBS@ GCOV = @GCOV@ GENHTML = @GENHTML@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTOOL = @LIBTOOL@ LIB_FUZZING_ENGINE = @LIB_FUZZING_ENGINE@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ ifGNUmake = @ifGNUmake@ ifnGNUmake = @ifnGNUmake@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc EXTRA_DIST = windows/asn1-parser/asn1-parser.vcproj \ windows/asn1-parser/config.h windows/libtasn1.ncb \ windows/libtasn1.sln windows/libtasn1.suo \ windows/gnulib/getopt.h windows/gnulib/gnulib.vcproj \ windows/libtasn1/libtasn1.vcproj \ windows/test-parser/test-parser.vcproj \ windows/test-tree/test-tree.vcproj windows/libtasn14win.mk \ CONTRIBUTING.md cfg.mk maint.mk AUTHORS NEWS ChangeLog THANKS \ LICENSE cfg.mk maint.mk .clcopying README.md SUBDIRS = lib src fuzz tests $(am__append_1) @CODE_COVERAGE_ENABLED_TRUE@GITIGNOREFILES = $(GITIGNOREFILES) $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap_0 = @echo " LCOV --capture" $(CODE_COVERAGE_OUTPUT_FILE); @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign_0 = @echo " LCOV --remove /tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN); @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml_0 = @echo " GEN " "$(CODE_COVERAGE_OUTPUT_DIRECTORY)"; @CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet = $(code_coverage_quiet_$(V)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet_0 = --quiet # sanitizes the test-name: replaces with underscores: dashes and dots @CODE_COVERAGE_ENABLED_TRUE@code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1))) @CODE_COVERAGE_ENABLED_TRUE@AM_DISTCHECK_CONFIGURE_FLAGS = $(AM_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage ACLOCAL_AMFLAGS = -I m4 -I m4-gl ABIDW_COMMON = --no-show-locs --no-corpus-path ABIGNORE_FILE = "$(top_srcdir)/devel/libtasn1.abignore" LIBGNUTLS_ABI_LAST_FILE = "$(top_srcdir)/devel/libtasn1-latest-$$(uname -m).abi" ABICHECK_COMMON = --no-added-syms all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/aminclude_static.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile 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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/aminclude_static.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 lib/includes/libtasn1.h: $(top_builddir)/config.status $(top_srcdir)/lib/includes/libtasn1.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." 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-hdr \ distclean-libtool distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool clean-local cscope cscopelist-am ctags ctags-am \ dist dist-all dist-bzip2 dist-gzip dist-hook dist-lzip \ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-local distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Code coverage # # Optional: # - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. # Multiple directories may be specified, separated by whitespace. # (Default: $(top_builddir)) # - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated # by lcov for code coverage. (Default: # $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info) # - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage # reports to be created. (Default: # $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage) # - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage, # set to 0 to disable it and leave empty to stay with the default. # (Default: empty) # - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov # instances. (Default: based on ) # - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov # instances. (Default: ) # - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov # - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the # collecting lcov instance. (Default: ) # - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov # instance. (Default: ) # - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering # lcov instance. (Default: empty) # - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov # instance. (Default: ) # - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the # genhtml instance. (Default: based on ) # - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml # instance. (Default: ) # - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore # # The generated report will be titled using the $(PACKAGE_NAME) and # $(PACKAGE_VERSION). In order to add the current git hash to the title, # use the git-version-gen script, available online. # Optional variables # run only on top dir @CODE_COVERAGE_ENABLED_TRUE@ ifeq ($(abs_builddir), $(abs_top_builddir)) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_DIRECTORY ?= $(top_builddir) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_BRANCH_COVERAGE ?= @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)" @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?= @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=$(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_IGNORE_PATTERN ?= # Use recursive makes in order to ignore errors during check @CODE_COVERAGE_ENABLED_TRUE@check-code-coverage: @CODE_COVERAGE_ENABLED_TRUE@ -$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check @CODE_COVERAGE_ENABLED_TRUE@ $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture # Capture code coverage data @CODE_COVERAGE_ENABLED_TRUE@code-coverage-capture: code-coverage-capture-hook @CODE_COVERAGE_ENABLED_TRUE@ $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS) @CODE_COVERAGE_ENABLED_TRUE@ $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS) @CODE_COVERAGE_ENABLED_TRUE@ -@rm -f "$(CODE_COVERAGE_OUTPUT_FILE).tmp" @CODE_COVERAGE_ENABLED_TRUE@ $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS) @CODE_COVERAGE_ENABLED_TRUE@ @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html" @CODE_COVERAGE_ENABLED_TRUE@code-coverage-clean: @CODE_COVERAGE_ENABLED_TRUE@ -$(LCOV) --directory $(top_builddir) -z @CODE_COVERAGE_ENABLED_TRUE@ -rm -rf "$(CODE_COVERAGE_OUTPUT_FILE)" "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" @CODE_COVERAGE_ENABLED_TRUE@ -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete @CODE_COVERAGE_ENABLED_TRUE@code-coverage-dist-clean: @CODE_COVERAGE_ENABLED_TRUE@ else # ifneq ($(abs_builddir), $(abs_top_builddir)) @CODE_COVERAGE_ENABLED_TRUE@check-code-coverage: @CODE_COVERAGE_ENABLED_TRUE@code-coverage-capture: code-coverage-capture-hook @CODE_COVERAGE_ENABLED_TRUE@code-coverage-clean: @CODE_COVERAGE_ENABLED_TRUE@code-coverage-dist-clean: @CODE_COVERAGE_ENABLED_TRUE@ endif # ifeq ($(abs_builddir), $(abs_top_builddir)) # Use recursive makes in order to ignore errors during check @CODE_COVERAGE_ENABLED_FALSE@check-code-coverage: @CODE_COVERAGE_ENABLED_FALSE@ @echo "Need to reconfigure with --enable-code-coverage" # Capture code coverage data @CODE_COVERAGE_ENABLED_FALSE@code-coverage-capture: code-coverage-capture-hook @CODE_COVERAGE_ENABLED_FALSE@ @echo "Need to reconfigure with --enable-code-coverage" @CODE_COVERAGE_ENABLED_FALSE@code-coverage-clean: @CODE_COVERAGE_ENABLED_FALSE@code-coverage-dist-clean: # Hook rule executed before code-coverage-capture, overridable by the user code-coverage-capture-hook: .PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook abi-dump-versioned: lib/libtasn1.la @echo "**************************************************" @echo "Generating versioned ABI files of current libtasn1" @echo "**************************************************" @abidw lib/.libs/libtasn1.so $(ABIDW_COMMON) --suppressions $(ABIGNORE_FILE) --out-file "$(srcdir)/devel/libtasn1-$(VERSION)-$$(uname -m).abi" abi-dump-latest: lib/libtasn1.la @echo "****************************************" @echo "Generating ABI files of current libtasn1" @echo "****************************************" @abidw lib/.libs/libtasn1.so $(ABIDW_COMMON) --suppressions $(ABIGNORE_FILE) --out-file $(LIBGNUTLS_ABI_LAST_FILE) @rm -f "./devel/libtasn1-latest-$$(uname -m).tmp" abi-check-latest: lib/libtasn1.la @echo "Checking whether the latest ABI dump matches" @abidiff --suppressions $(ABIGNORE_FILE) lib/.libs/libtasn1.so $(LIBGNUTLS_ABI_LAST_FILE) --hd2 "$(srcdir)/lib/includes/"; if test $$? != 0;then \ echo "*********************************************************"; \ echo "libtasn1 ABI has changed; use 'make files-update' "; \ echo "and use 'git diff' to check correctness before committing"; \ echo "*********************************************************"; \ false; \ fi @echo "********************************" @echo "Current release matches ABI dump" @echo "********************************" abi-check: lib/libtasn1.la @for file in $$(echo $(srcdir)/devel/libtasn1-*-$$(uname -m).abi);do \ echo "Comparing libtasn1 with $$file"; \ abidiff $${file} lib/.libs/libtasn1.so $(ABICHECK_COMMON) --suppressions $(ABIGNORE_FILE) --hd2 "$(srcdir)/lib/includes//"; \ if test $$? != 0;then \ echo "****************************************************************************"; \ echo "ABI check failed; If intentional add suppression in devel/libtasn1.abignore"; \ echo "****************************************************************************"; \ false; \ fi; \ done @echo "********************" @echo "ABI checks completed" @echo "********************" files-update: abi-dump-latest local-code-coverage-output: code-coverage-capture cat "GNU Libtasn1-$(VERSION)-coverage/index.html"|grep headerCovTableEntry|grep '%'|head -1|sed 's/^.*>\([0-9]\+\.[0-9]\+\s*%\)<.*$$/ coverage lines: \1/' || true clean-local: code-coverage-clean distclean-local: code-coverage-dist-clean dist-hook: if test -d "$(top_srcdir)/devel";then \ $(MAKE) -C $(top_srcdir) abi-check-latest; \ make -C doc/ compare-makefile; \ fi .PHONY: abi-check abi-dump-versioned abi-dump-latest # 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: libtasn1-4.16.0/doc/0000755000000000000000000000000013615400132011026 500000000000000libtasn1-4.16.0/doc/TODO0000644000000000000000000000216213447472162011456 00000000000000If you want to contribute (implement something from the current list, or anything), contact the developer's mailing list ..., in order to avoid having people working on the same thing. Current list: + Audit the code * Avoid the usage of any global state in array2tree or parser2tree functions. * Allow extracting the time in a reasonable format (e.g. time_t) * C structure generation instead of a single array * CHOICE in CHOICE (e.g., RDN in byName in ResponderID in OCSP) cannot be read directly. Also the OCTET string (ByKey) in the same choice is not encoded properly. - Add the checking of default value (e.g. 'INTEGER DEFAULT v1') - Check _asn1_objectid_der, crashes on "0" input, gives incorrect encoding? (+) Means high priority (*) Means medium priority (-) Means low priority (ie. nobody is interested to develop that) ---------------------------------------------------------------------- Copyright (C) 2002-2014 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. libtasn1-4.16.0/doc/man/0000755000000000000000000000000013615400132011601 500000000000000libtasn1-4.16.0/doc/man/asn1_read_value_type.30000644000000000000000000000723413615374720015722 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_read_value_type" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_read_value_type \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_read_value_type(asn1_node_const " root ", const char * " name ", void * " ivalue ", int * " len ", unsigned int * " etype ");" .SH ARGUMENTS .IP "asn1_node_const root" 12 pointer to a structure. .IP "const char * name" 12 the name of the element inside a structure that you want to read. .IP "void * ivalue" 12 vector that will contain the element's content, must be a pointer to memory cells already allocated (may be \fBNULL\fP). .IP "int * len" 12 number of bytes of *value: value[0]..value[len\-1]. Initialy holds the sizeof value. .IP "unsigned int * etype" 12 The type of the value read (ASN1_ETYPE) .SH "DESCRIPTION" Returns the type and value of one element inside a structure. If an element is OPTIONAL and this returns \fBASN1_ELEMENT_NOT_FOUND\fP, it means that this element wasn't present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the \fIroot\fP provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node. Note that there can be valid values with length zero. In these case this function will succeed and \fIlen\fP will be zero. .SH "INTEGER" VALUE will contain a two's complement form integer. integer=\-1 \-> value[0]=0xFF , len=1. integer=1 \-> value[0]=0x01 , len=1. .SH "ENUMERATED" As INTEGER (but only with not negative numbers). .SH "BOOLEAN" VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6. OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1"). LEN = strlen(VALUE)+1 .SH "UTCTIME" VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss\-hh'mm'". LEN=strlen(VALUE)+1. .SH "GENERALIZEDTIME" VALUE will be a null terminated string in the same format used to set the value. OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets. .SH "GENERALSTRING" VALUE will contain the generalstring and LEN will be the number of octets. BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits. .SH "CHOICE" If NAME indicates a choice type, VALUE will specify the alternative selected. .SH "ANY" If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used. .SH "RETURNS" \fBASN1_SUCCESS\fP if value is returned, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIname\fP is not a valid element, \fBASN1_VALUE_NOT_FOUND\fP if there isn't any value for the element selected, and \fBASN1_MEM_ERROR\fP if The value vector isn't big enough to store the result, and in this case \fIlen\fP will contain the number of bytes needed. On the occasion that the stored data are of zero\-length this function may return \fBASN1_SUCCESS\fP even if the provided \fIlen\fP is zero. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_get_length_der.30000644000000000000000000000253313615374717015527 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_get_length_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_get_length_der \- API function .SH SYNOPSIS .B #include .sp .BI "long asn1_get_length_der(const unsigned char * " der ", int " der_len ", int * " len ");" .SH ARGUMENTS .IP "const unsigned char * der" 12 DER data to decode. .IP "int der_len" 12 Length of DER data to decode. .IP "int * len" 12 Output variable containing the length of the DER length field. .SH "DESCRIPTION" Extract a length field from DER data. .SH "RETURNS" Return the decoded length value, or \-1 on indefinite length, or \-2 when the value was too big to fit in a int, or \-4 when the decoded length value plus \fIlen\fP would exceed \fIder_len\fP . .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_expand_any_defined_by.30000644000000000000000000000310013615374717017042 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_expand_any_defined_by" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_expand_any_defined_by \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_expand_any_defined_by(asn1_node_const " definitions ", asn1_node * " element ");" .SH ARGUMENTS .IP "asn1_node_const definitions" 12 ASN1 definitions .IP "asn1_node * element" 12 pointer to an ASN1 structure .SH "DESCRIPTION" Expands every "ANY DEFINED BY" element of a structure created from a DER decoding process (asn1_der_decoding function). The element ANY must be defined by an OBJECT IDENTIFIER. The type used to expand the element ANY is the first one following the definition of the actual value of the OBJECT IDENTIFIER. .SH "RETURNS" \fBASN1_SUCCESS\fP if Substitution OK, \fBASN1_ERROR_TYPE_ANY\fP if some "ANY DEFINED BY" element couldn't be expanded due to a problem in OBJECT_ID \-> TYPE association, or other error codes depending on DER decoding. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_der_decoding2.30000644000000000000000000000425713615374717015252 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_der_decoding2" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_der_decoding2 \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_der_decoding2(asn1_node * " element ", const void * " ider ", int * " max_ider_len ", unsigned int " flags ", char * " errorDescription ");" .SH ARGUMENTS .IP "asn1_node * element" 12 pointer to an ASN1 structure. .IP "const void * ider" 12 vector that contains the DER encoding. .IP "int * max_ider_len" 12 pointer to an integer giving the information about the maximal number of bytes occupied by * \fIider\fP . The real size of the DER encoding is returned through this pointer. .IP "unsigned int flags" 12 flags controlling the behaviour of the function. .IP "char * errorDescription" 12 null\-terminated string contains details when an error occurred. .SH "DESCRIPTION" Fill the structure * \fIelement\fP with values of a DER encoding string. The structure must just be created with function \fBasn1_create_element()\fP. If \fBASN1_DECODE_FLAG_ALLOW_PADDING\fP flag is set then the function will ignore padding after the decoded DER data. Upon a successful return the value of * \fImax_ider_len\fP will be set to the number of bytes decoded. If \fBASN1_DECODE_FLAG_STRICT_DER\fP flag is set then the function will not decode any BER\-encoded elements. .SH "RETURNS" \fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIELEMENT\fP is \fBNULL\fP, and \fBASN1_TAG_ERROR\fP or \fBASN1_DER_ERROR\fP if the der encoding doesn't match the structure name (* \fIELEMENT\fP deleted). .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_parser2tree.30000644000000000000000000000350613615374720015006 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_parser2tree" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_parser2tree \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_parser2tree(const char * " file ", asn1_node * " definitions ", char * " error_desc ");" .SH ARGUMENTS .IP "const char * file" 12 specify the path and the name of file that contains ASN.1 declarations. .IP "asn1_node * definitions" 12 return the pointer to the structure created from "file" ASN.1 declarations. .IP "char * error_desc" 12 return the error description or an empty string if success. .SH "DESCRIPTION" Function used to start the parse algorithm. Creates the structures needed to manage the definitions included in \fIfile\fP file. .SH "RETURNS" \fBASN1_SUCCESS\fP if the file has a correct syntax and every identifier is known, \fBASN1_ELEMENT_NOT_EMPTY\fP if \fIdefinitions\fP not \fBNULL\fP, \fBASN1_FILE_NOT_FOUND\fP if an error occurred while opening \fIfile\fP , \fBASN1_SYNTAX_ERROR\fP if the syntax is not correct, \fBASN1_IDENTIFIER_NOT_FOUND\fP if in the file there is an identifier that is not defined, \fBASN1_NAME_TOO_LONG\fP if in the file there is an identifier with more than \fBASN1_MAX_NAME_SIZE\fP characters. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_encode_simple_der.30000644000000000000000000000330413615374720016204 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_encode_simple_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_encode_simple_der \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_encode_simple_der(unsigned int " etype ", const unsigned char * " str ", unsigned int " str_len ", unsigned char * " tl ", unsigned int * " tl_len ");" .SH ARGUMENTS .IP "unsigned int etype" 12 The type of the string to be encoded (ASN1_ETYPE_) .IP "const unsigned char * str" 12 the string data. .IP "unsigned int str_len" 12 the string length .IP "unsigned char * tl" 12 the encoded tag and length .IP "unsigned int * tl_len" 12 the bytes of the \fItl\fP field .SH "DESCRIPTION" Creates the DER encoding for various simple ASN.1 types like strings etc. It stores the tag and length in \fItl\fP , which should have space for at least \fBASN1_MAX_TL_SIZE\fP bytes. Initially \fItl_len\fP should contain the size of \fItl\fP . The complete DER encoding should consist of the value in \fItl\fP appended with the provided \fIstr\fP . .SH "RETURNS" \fBASN1_SUCCESS\fP if successful or an error value. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_check_version.30000644000000000000000000000264013615374721015371 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_check_version" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_check_version \- API function .SH SYNOPSIS .B #include .sp .BI "const char * asn1_check_version(const char * " req_version ");" .SH ARGUMENTS .IP "const char * req_version" 12 Required version number, or \fBNULL\fP. .SH "DESCRIPTION" Check that the version of the library is at minimum the requested one and return the version string; return \fBNULL\fP if the condition is not satisfied. If a \fBNULL\fP is passed to this function, no check is done, but the version string is simply returned. See \fBASN1_VERSION\fP for a suitable \fIreq_version\fP string. .SH "RETURNS" Version string of run\-time library, or \fBNULL\fP if the run\-time library does not meet the required version number. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_der_decoding_startEnd.30000644000000000000000000000435413615374717017032 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_der_decoding_startEnd" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_der_decoding_startEnd \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_der_decoding_startEnd(asn1_node " element ", const void * " ider ", int " ider_len ", const char * " name_element ", int * " start ", int * " end ");" .SH ARGUMENTS .IP "asn1_node element" 12 pointer to an ASN1 element .IP "const void * ider" 12 vector that contains the DER encoding. .IP "int ider_len" 12 number of bytes of * \fIider\fP : \fIider\fP [0].. \fIider\fP [len\-1] .IP "const char * name_element" 12 an element of NAME structure. .IP "int * start" 12 the position of the first byte of NAME_ELEMENT decoding ( \fIider\fP [*start]) .IP "int * end" 12 the position of the last byte of NAME_ELEMENT decoding ( \fIider\fP [*end]) .SH "DESCRIPTION" Find the start and end point of an element in a DER encoding string. I mean that if you have a der encoding and you have already used the function \fBasn1_der_decoding()\fP to fill a structure, it may happen that you want to find the piece of string concerning an element of the structure. One example is the sequence "tbsCertificate" inside an X509 certificate. Note that since libtasn1 3.7 the \fIider\fP and \fIider_len\fP parameters can be omitted, if the element is already decoded using \fBasn1_der_decoding()\fP. .SH "RETURNS" \fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP if ELEMENT is \fBasn1_node\fP EMPTY or \fIname_element\fP is not a valid element, \fBASN1_TAG_ERROR\fP or \fBASN1_DER_ERROR\fP if the der encoding doesn't match the structure ELEMENT. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_find_node.30000644000000000000000000000260613615374717014503 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_find_node" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_find_node \- API function .SH SYNOPSIS .B #include .sp .BI "asn1_node asn1_find_node(asn1_node_const " pointer ", const char * " name ");" .SH ARGUMENTS .IP "asn1_node_const pointer" 12 NODE_ASN element pointer. .IP "const char * name" 12 null terminated string with the element's name to find. .SH "DESCRIPTION" Searches for an element called \fIname\fP starting from \fIpointer\fP . The name is composed by different identifiers separated by dots. When * \fIpointer\fP has a name, the first identifier must be the name of * \fIpointer\fP , otherwise it must be the name of one child of * \fIpointer\fP . .SH "RETURNS" the search result, or \fBNULL\fP if not found. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_der_decoding_element.30000644000000000000000000000413513615374717016674 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_der_decoding_element" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_der_decoding_element \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_der_decoding_element(asn1_node * " structure ", const char * " elementName ", const void * " ider ", int " len ", char * " errorDescription ");" .SH ARGUMENTS .IP "asn1_node * structure" 12 pointer to an ASN1 structure .IP "const char * elementName" 12 name of the element to fill .IP "const void * ider" 12 vector that contains the DER encoding of the whole structure. .IP "int len" 12 number of bytes of *der: der[0]..der[len\-1] .IP "char * errorDescription" 12 null\-terminated string contains details when an error occurred. .SH "DESCRIPTION" Fill the element named \fIELEMENTNAME\fP with values of a DER encoding string. The structure must just be created with function \fBasn1_create_element()\fP. The DER vector must contain the encoding string of the whole \fISTRUCTURE\fP . If an error occurs during the decoding procedure, the * \fISTRUCTURE\fP is deleted and set equal to \fBNULL\fP. This function is deprecated and may just be an alias to asn1_der_decoding in future versions. Use \fBasn1_der_decoding()\fP instead. .SH "RETURNS" \fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP if ELEMENT is \fBNULL\fP or \fIelementName\fP == NULL, and \fBASN1_TAG_ERROR\fP or \fBASN1_DER_ERROR\fP if the der encoding doesn't match the structure \fIstructure\fP (*ELEMENT deleted). .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_der_coding.30000644000000000000000000000351613615374720014646 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_der_coding" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_der_coding \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_der_coding(asn1_node_const " element ", const char * " name ", void * " ider ", int * " len ", char * " ErrorDescription ");" .SH ARGUMENTS .IP "asn1_node_const element" 12 pointer to an ASN1 element .IP "const char * name" 12 the name of the structure you want to encode (it must be inside *POINTER). .IP "void * ider" 12 vector that will contain the DER encoding. DER must be a pointer to memory cells already allocated. .IP "int * len" 12 number of bytes of * \fIider\fP : \fIider\fP [0].. \fIider\fP [len\-1], Initialy holds the sizeof of der vector. .IP "char * ErrorDescription" 12 return the error description or an empty string if success. .SH "DESCRIPTION" Creates the DER encoding for the NAME structure (inside *POINTER structure). .SH "RETURNS" \fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIname\fP is not a valid element, \fBASN1_VALUE_NOT_FOUND\fP if there is an element without a value, \fBASN1_MEM_ERROR\fP if the \fIider\fP vector isn't big enough and in this case \fIlen\fP will contain the length needed. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_print_structure.30000644000000000000000000000270713615374720016026 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_print_structure" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_print_structure \- API function .SH SYNOPSIS .B #include .sp .BI "void asn1_print_structure(FILE * " out ", asn1_node_const " structure ", const char * " name ", int " mode ");" .SH ARGUMENTS .IP "FILE * out" 12 pointer to the output file (e.g. stdout). .IP "asn1_node_const structure" 12 pointer to the structure that you want to visit. .IP "const char * name" 12 an element of the structure .IP "int mode" 12 specify how much of the structure to print, can be \fBASN1_PRINT_NAME\fP, \fBASN1_PRINT_NAME_TYPE\fP, \fBASN1_PRINT_NAME_TYPE_VALUE\fP, or \fBASN1_PRINT_ALL\fP. .SH "DESCRIPTION" Prints on the \fIout\fP file descriptor the structure's tree starting from the \fIname\fP element inside the structure \fIstructure\fP . .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_read_tag.30000644000000000000000000000300613615374720014311 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_read_tag" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_read_tag \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_read_tag(asn1_node_const " root ", const char * " name ", int * " tagValue ", int * " classValue ");" .SH ARGUMENTS .IP "asn1_node_const root" 12 pointer to a structure .IP "const char * name" 12 the name of the element inside a structure. .IP "int * tagValue" 12 variable that will contain the TAG value. .IP "int * classValue" 12 variable that will specify the TAG type. .SH "DESCRIPTION" Returns the TAG and the CLASS of one element inside a structure. CLASS can have one of these constants: \fBASN1_CLASS_APPLICATION\fP, \fBASN1_CLASS_UNIVERSAL\fP, \fBASN1_CLASS_PRIVATE\fP or \fBASN1_CLASS_CONTEXT_SPECIFIC\fP. .SH "RETURNS" \fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIname\fP is not a valid element. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_get_length_ber.30000644000000000000000000000257313615374717015531 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_get_length_ber" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_get_length_ber \- API function .SH SYNOPSIS .B #include .sp .BI "long asn1_get_length_ber(const unsigned char * " ber ", int " ber_len ", int * " len ");" .SH ARGUMENTS .IP "const unsigned char * ber" 12 BER data to decode. .IP "int ber_len" 12 Length of BER data to decode. .IP "int * len" 12 Output variable containing the length of the BER length field. .SH "DESCRIPTION" Extract a length field from BER data. The difference to \fBasn1_get_length_der()\fP is that this function will return a length even if the value has indefinite encoding. .SH "RETURNS" Return the decoded length value, or negative value when the value was too big. .SH "SINCE" 2.0 .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_number_of_elements.30000644000000000000000000000262413615374720016420 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_number_of_elements" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_number_of_elements \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_number_of_elements(asn1_node_const " element ", const char * " name ", int * " num ");" .SH ARGUMENTS .IP "asn1_node_const element" 12 pointer to the root of an ASN1 structure. .IP "const char * name" 12 the name of a sub\-structure of ROOT. .IP "int * num" 12 pointer to an integer where the result will be stored .SH "DESCRIPTION" Counts the number of elements of a sub\-structure called NAME with names equal to "?1","?2", ... .SH "RETURNS" \fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIname\fP is not known, \fBASN1_GENERIC_ERROR\fP if pointer \fInum\fP is \fBNULL\fP. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_array2tree.30000644000000000000000000000322213615374720014623 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_array2tree" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_array2tree \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_array2tree(const asn1_static_node * " array ", asn1_node * " definitions ", char * " errorDescription ");" .SH ARGUMENTS .IP "const asn1_static_node * array" 12 specify the array that contains ASN.1 declarations .IP "asn1_node * definitions" 12 return the pointer to the structure created by *ARRAY ASN.1 declarations .IP "char * errorDescription" 12 return the error description. .SH "DESCRIPTION" Creates the structures needed to manage the ASN.1 definitions. \fIarray\fP is a vector created by \fBasn1_parser2array()\fP. .SH "RETURNS" \fBASN1_SUCCESS\fP if structure was created correctly, \fBASN1_ELEMENT_NOT_EMPTY\fP if * \fIdefinitions\fP not NULL, \fBASN1_IDENTIFIER_NOT_FOUND\fP if in the file there is an identifier that is not defined (see \fIerrorDescription\fP for more information), \fBASN1_ARRAY_ERROR\fP if the array pointed by \fIarray\fP is wrong. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_delete_structure.30000644000000000000000000000223613615374720016131 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_delete_structure" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_delete_structure \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_delete_structure(asn1_node * " structure ");" .SH ARGUMENTS .IP "asn1_node * structure" 12 pointer to the structure that you want to delete. .SH "DESCRIPTION" Deletes the structure * \fIstructure\fP . At the end, * \fIstructure\fP is set to NULL. .SH "RETURNS" \fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if * \fIstructure\fP was NULL. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_decode_simple_ber.30000644000000000000000000000314313615374717016177 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_decode_simple_ber" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_decode_simple_ber \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_decode_simple_ber(unsigned int " etype ", const unsigned char * " der ", unsigned int " _der_len ", unsigned char ** " str ", unsigned int * " str_len ", unsigned int * " ber_len ");" .SH ARGUMENTS .IP "unsigned int etype" 12 The type of the string to be encoded (ASN1_ETYPE_) .IP "const unsigned char * der" 12 the encoded string .IP "unsigned int _der_len" 12 the bytes of the encoded string .IP "unsigned char ** str" 12 a pointer to the data .IP "unsigned int * str_len" 12 the length of the data .IP "unsigned int * ber_len" 12 the total length occupied by BER (may be \fBNULL\fP) .SH "DESCRIPTION" Decodes a BER encoded type. The output is an allocated value of the data. This decodes BER STRINGS only. Other types are decoded as DER. .SH "RETURNS" \fBASN1_SUCCESS\fP if successful or an error value. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_parser2array.30000644000000000000000000000417413615374721015170 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_parser2array" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_parser2array \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_parser2array(const char * " inputFileName ", const char * " outputFileName ", const char * " vectorName ", char * " error_desc ");" .SH ARGUMENTS .IP "const char * inputFileName" 12 specify the path and the name of file that contains ASN.1 declarations. .IP "const char * outputFileName" 12 specify the path and the name of file that will contain the C vector definition. .IP "const char * vectorName" 12 specify the name of the C vector. .IP "char * error_desc" 12 return the error description or an empty string if success. .SH "DESCRIPTION" Function that generates a C structure from an ASN1 file. Creates a file containing a C vector to use to manage the definitions included in \fIinputFileName\fP file. If \fIinputFileName\fP is "/aa/bb/xx.yy" and \fIoutputFileName\fP is \fBNULL\fP, the file created is "/aa/bb/xx_asn1_tab.c". If \fIvectorName\fP is \fBNULL\fP the vector name will be "xx_asn1_tab". .SH "RETURNS" \fBASN1_SUCCESS\fP if the file has a correct syntax and every identifier is known, \fBASN1_FILE_NOT_FOUND\fP if an error occurred while opening \fIinputFileName\fP , \fBASN1_SYNTAX_ERROR\fP if the syntax is not correct, \fBASN1_IDENTIFIER_NOT_FOUND\fP if in the file there is an identifier that is not defined, \fBASN1_NAME_TOO_LONG\fP if in the file there is an identifier with more than \fBASN1_MAX_NAME_SIZE\fP characters. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_get_tag_der.30000644000000000000000000000262513615374717015023 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_get_tag_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_get_tag_der \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_get_tag_der(const unsigned char * " der ", int " der_len ", unsigned char * " cls ", int * " len ", unsigned long * " tag ");" .SH ARGUMENTS .IP "const unsigned char * der" 12 DER data to decode. .IP "int der_len" 12 Length of DER data to decode. .IP "unsigned char * cls" 12 Output variable containing decoded class. .IP "int * len" 12 Output variable containing the length of the DER TAG data. .IP "unsigned long * tag" 12 Output variable containing the decoded tag (may be \fBNULL\fP). .SH "DESCRIPTION" Decode the class and TAG from DER code. .SH "RETURNS" Returns \fBASN1_SUCCESS\fP on success, or an error. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_get_object_id_der.30000644000000000000000000000276613615374717016200 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_get_object_id_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_get_object_id_der \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_get_object_id_der(const unsigned char * " der ", int " der_len ", int * " ret_len ", char * " str ", int " str_size ");" .SH ARGUMENTS .IP "const unsigned char * der" 12 DER data to decode containing the OBJECT IDENTIFIER .IP "int der_len" 12 Length of DER data to decode. .IP "int * ret_len" 12 Output variable containing the length of the DER data. .IP "char * str" 12 Pre\-allocated output buffer to put the textual object id in. .IP "int str_size" 12 Length of pre\-allocated output buffer. .SH "DESCRIPTION" Converts a DER encoded object identifier to its textual form. This function expects the DER object identifier without the tag. .SH "RETURNS" \fBASN1_SUCCESS\fP on success, or an error. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_create_element.30000644000000000000000000000271213615374720015522 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_create_element" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_create_element \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_create_element(asn1_node_const " definitions ", const char * " source_name ", asn1_node * " element ");" .SH ARGUMENTS .IP "asn1_node_const definitions" 12 pointer to the structure returned by "parser_asn1" function .IP "const char * source_name" 12 the name of the type of the new structure (must be inside p_structure). .IP "asn1_node * element" 12 pointer to the structure created. .SH "DESCRIPTION" Creates a structure of type \fIsource_name\fP . Example using "pkix.asn": rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); .SH "RETURNS" \fBASN1_SUCCESS\fP if creation OK, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIsource_name\fP is not known. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_perror.30000644000000000000000000000214213615374717014062 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_perror" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_perror \- API function .SH SYNOPSIS .B #include .sp .BI "void asn1_perror(int " error ");" .SH ARGUMENTS .IP "int error" 12 is an error returned by a libtasn1 function. .SH "DESCRIPTION" Prints a string to stderr with a description of an error. This function is like \fBperror()\fP. The only difference is that it accepts an error returned by a libtasn1 function. .SH "SINCE" 1.6 .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_delete_structure2.30000644000000000000000000000240313615374720016207 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_delete_structure2" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_delete_structure2 \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_delete_structure2(asn1_node * " structure ", unsigned int " flags ");" .SH ARGUMENTS .IP "asn1_node * structure" 12 pointer to the structure that you want to delete. .IP "unsigned int flags" 12 additional flags (see \fBASN1_DELETE_FLAG\fP) .SH "DESCRIPTION" Deletes the structure * \fIstructure\fP . At the end, * \fIstructure\fP is set to NULL. .SH "RETURNS" \fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if * \fIstructure\fP was NULL. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_get_bit_der.30000644000000000000000000000277313615374717015032 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_get_bit_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_get_bit_der \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_get_bit_der(const unsigned char * " der ", int " der_len ", int * " ret_len ", unsigned char * " str ", int " str_size ", int * " bit_len ");" .SH ARGUMENTS .IP "const unsigned char * der" 12 DER data to decode containing the BIT SEQUENCE. .IP "int der_len" 12 Length of DER data to decode. .IP "int * ret_len" 12 Output variable containing the length of the DER data. .IP "unsigned char * str" 12 Pre\-allocated output buffer to put decoded BIT SEQUENCE in. .IP "int str_size" 12 Length of pre\-allocated output buffer. .IP "int * bit_len" 12 Output variable containing the size of the BIT SEQUENCE. .SH "DESCRIPTION" Extract a BIT SEQUENCE from DER data. .SH "RETURNS" \fBASN1_SUCCESS\fP on success, or an error. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_bit_der.30000644000000000000000000000310613615374720014154 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_bit_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_bit_der \- API function .SH SYNOPSIS .B #include .sp .BI "void asn1_bit_der(const unsigned char * " str ", int " bit_len ", unsigned char * " der ", int * " der_len ");" .SH ARGUMENTS .IP "const unsigned char * str" 12 BIT string. .IP "int bit_len" 12 number of meaningful bits in STR. .IP "unsigned char * der" 12 string returned. .IP "int * der_len" 12 number of meaningful bytes of DER (der[0]..der[ans_len\-1]). .SH "DESCRIPTION" Creates a length\-value DER encoding for the input data as it would have been for a BIT STRING. The DER encoded data will be copied in \fIder\fP . Note that the BIT STRING tag is not included in the output. This function does not return any value because it is expected that \fIder_len\fP will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using \fBasn1_length_der()\fP. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_read_node_value.30000644000000000000000000000227513615374720015666 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_read_node_value" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_read_node_value \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_read_node_value(asn1_node_const " node ", asn1_data_node_st * " data ");" .SH ARGUMENTS .IP "asn1_node_const node" 12 pointer to a node. .IP "asn1_data_node_st * data" 12 a point to a asn1_data_node_st .SH "DESCRIPTION" Returns the value a data node inside a asn1_node structure. The data returned should be handled as constant values. .SH "RETURNS" \fBASN1_SUCCESS\fP if the node exists. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_length_der.30000644000000000000000000000261413615374717014670 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_length_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_length_der \- API function .SH SYNOPSIS .B #include .sp .BI "void asn1_length_der(unsigned long int " len ", unsigned char * " der ", int * " der_len ");" .SH ARGUMENTS .IP "unsigned long int len" 12 value to convert. .IP "unsigned char * der" 12 buffer to hold the returned encoding (may be \fBNULL\fP). .IP "int * der_len" 12 number of meaningful bytes of ANS (der[0]..der[der_len\-1]). .SH "DESCRIPTION" Creates the DER encoding of the provided length value. The \fIder\fP buffer must have enough room for the output. The maximum length this function will encode is \fBASN1_MAX_LENGTH_SIZE\fP. To know the size of the DER encoding use a \fBNULL\fP value for \fIder\fP . .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_decode_simple_der.30000644000000000000000000000276213615374717016207 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_decode_simple_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_decode_simple_der \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_decode_simple_der(unsigned int " etype ", const unsigned char * " der ", unsigned int " _der_len ", const unsigned char ** " str ", unsigned int * " str_len ");" .SH ARGUMENTS .IP "unsigned int etype" 12 The type of the string to be encoded (ASN1_ETYPE_) .IP "const unsigned char * der" 12 the encoded string .IP "unsigned int _der_len" 12 the bytes of the encoded string .IP "const unsigned char ** str" 12 a pointer to the data .IP "unsigned int * str_len" 12 the length of the data .SH "DESCRIPTION" Decodes a simple DER encoded type (e.g. a string, which is not constructed). The output is a pointer inside the \fIder\fP . .SH "RETURNS" \fBASN1_SUCCESS\fP if successful or an error value. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_strerror.30000644000000000000000000000227713615374717014444 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_strerror" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_strerror \- API function .SH SYNOPSIS .B #include .sp .BI "const char * asn1_strerror(int " error ");" .SH ARGUMENTS .IP "int error" 12 is an error returned by a libtasn1 function. .SH "DESCRIPTION" Returns a string with a description of an error. This function is similar to strerror. The only difference is that it accepts an error (number) returned by a libtasn1 function. .SH "RETURNS" Pointer to static zero\-terminated string describing error code. .SH "SINCE" 1.6 .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_object_id_der.30000644000000000000000000000300213615374720015313 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_object_id_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_object_id_der \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_object_id_der(const char * " str ", unsigned char * " der ", int * " der_len ", unsigned " flags ");" .SH ARGUMENTS .IP "const char * str" 12 An object identifier in numeric, dot format. .IP "unsigned char * der" 12 buffer to hold the returned encoding (may be \fBNULL\fP). .IP "int * der_len" 12 initially the size of \fIder\fP ; will hold the final size. .IP "unsigned flags" 12 must be zero .SH "DESCRIPTION" Creates the DER encoding of the provided object identifier. .SH "RETURNS" \fBASN1_SUCCESS\fP if DER encoding was OK, \fBASN1_VALUE_NOT_VALID\fP if \fIstr\fP is not a valid OID, \fBASN1_MEM_ERROR\fP if the \fIder\fP vector isn't big enough and in this case \fIder_len\fP will contain the length needed. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_octet_der.30000644000000000000000000000312213615374717014520 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_octet_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_octet_der \- API function .SH SYNOPSIS .B #include .sp .BI "void asn1_octet_der(const unsigned char * " str ", int " str_len ", unsigned char * " der ", int * " der_len ");" .SH ARGUMENTS .IP "const unsigned char * str" 12 the input data. .IP "int str_len" 12 STR length (str[0]..str[*str_len\-1]). .IP "unsigned char * der" 12 encoded string returned. .IP "int * der_len" 12 number of meaningful bytes of DER (der[0]..der[der_len\-1]). .SH "DESCRIPTION" Creates a length\-value DER encoding for the input data. The DER encoding of the input data will be placed in the \fIder\fP variable. Note that the OCTET STRING tag is not included in the output. This function does not return any value because it is expected that \fIder_len\fP will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using \fBasn1_length_der()\fP. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_write_value.30000644000000000000000000001104613615374720015074 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_write_value" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_write_value \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_write_value(asn1_node " node_root ", const char * " name ", const void * " ivalue ", int " len ");" .SH ARGUMENTS .IP "asn1_node node_root" 12 pointer to a structure .IP "const char * name" 12 the name of the element inside the structure that you want to set. .IP "const void * ivalue" 12 vector used to specify the value to set. If len is >0, VALUE must be a two's complement form integer. if len=0 *VALUE must be a null terminated string with an integer value. .IP "int len" 12 number of bytes of *value to use to set the value: value[0]..value[len\-1] or 0 if value is a null terminated string .SH "DESCRIPTION" Set the value of one element inside a structure. If an element is OPTIONAL and you want to delete it, you must use the value=NULL and len=0. Using "pkix.asn": result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", NULL, 0); Description for each type: .SH "INTEGER" VALUE must contain a two's complement form integer. value[0]=0xFF , len=1 \-> integer=\-1. value[0]=0xFF value[1]=0xFF , len=2 \-> integer=\-1. value[0]=0x01 , len=1 \-> integer= 1. value[0]=0x00 value[1]=0x01 , len=2 \-> integer= 1. value="123" , len=0 \-> integer= 123. .SH "ENUMERATED" As INTEGER (but only with not negative numbers). .SH "BOOLEAN" VALUE must be the null terminated string "TRUE" or "FALSE" and LEN != 0. value="TRUE" , len=1 \-> boolean=TRUE. value="FALSE" , len=1 \-> boolean=FALSE. OBJECT IDENTIFIER: VALUE must be a null terminated string with each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. value="1 2 840 10040 4 3" , len=1 \-> OID=dsa\-with\-sha. .SH "UTCTIME" VALUE must be a null terminated string in one of these formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", "YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss\-hh'mm'", "YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm\-hh'mm'". LEN != 0. value="9801011200Z" , len=1 \-> time=Jannuary 1st, 1998 at 12h 00m Greenwich Mean Time .SH "GENERALIZEDTIME" VALUE must be in one of this format: "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s\-hh'mm'", "YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm\-hh'mm'" where ss.s indicates the seconds with any precision like "10.1" or "01.02". LEN != 0 value="2001010112001.12\-0700" , len=1 \-> time=Jannuary 1st, 2001 at 12h 00m 01.12s Pacific Daylight Time OCTET STRING: VALUE contains the octet string and LEN is the number of octets. value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 \-> three bytes octet string .SH "GENERALSTRING" VALUE contains the generalstring and LEN is the number of octets. value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 \-> three bytes generalstring BIT STRING: VALUE contains the bit string organized by bytes and LEN is the number of bits. value="$\backslash$xCF" , len=6 \-> bit string="110011" (six bits) .SH "CHOICE" if NAME indicates a choice type, VALUE must specify one of the alternatives with a null terminated string. LEN != 0. Using "pkix.asn"\: result=asn1_write_value(cert, "certificate1.tbsCertificate.subject", "rdnSequence", 1); .SH "ANY" VALUE indicates the der encoding of a structure. LEN != 0. SEQUENCE OF: VALUE must be the null terminated string "NEW" and LEN != 0. With this instruction another element is appended in the sequence. The name of this element will be "?1" if it's the first one, "?2" for the second and so on. Using "pkix.asn"\: result=asn1_write_value(cert, "certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); SET OF: the same as SEQUENCE OF. Using "pkix.asn": result=asn1_write_value(cert, "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); .SH "RETURNS" \fBASN1_SUCCESS\fP if the value was set, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIname\fP is not a valid element, and \fBASN1_VALUE_NOT_VALID\fP if \fIivalue\fP has a wrong format. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_expand_octet_string.30000644000000000000000000000345513615374717016624 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_expand_octet_string" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_expand_octet_string \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_expand_octet_string(asn1_node_const " definitions ", asn1_node * " element ", const char * " octetName ", const char * " objectName ");" .SH ARGUMENTS .IP "asn1_node_const definitions" 12 ASN1 definitions .IP "asn1_node * element" 12 pointer to an ASN1 structure .IP "const char * octetName" 12 name of the OCTECT STRING field to expand. .IP "const char * objectName" 12 name of the OBJECT IDENTIFIER field to use to define the type for expansion. .SH "DESCRIPTION" Expands an "OCTET STRING" element of a structure created from a DER decoding process (the \fBasn1_der_decoding()\fP function). The type used for expansion is the first one following the definition of the actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. .SH "RETURNS" \fBASN1_SUCCESS\fP if substitution OK, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIobjectName\fP or \fIoctetName\fP are not correct, \fBASN1_VALUE_NOT_VALID\fP if it wasn't possible to find the type to use for expansion, or other errors depending on DER decoding. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_get_octet_der.30000644000000000000000000000324113615374717015361 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_get_octet_der" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_get_octet_der \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_get_octet_der(const unsigned char * " der ", int " der_len ", int * " ret_len ", unsigned char * " str ", int " str_size ", int * " str_len ");" .SH ARGUMENTS .IP "const unsigned char * der" 12 DER data to decode containing the OCTET SEQUENCE. .IP "int der_len" 12 The length of the \fIder\fP data to decode. .IP "int * ret_len" 12 Output variable containing the encoded length of the DER data. .IP "unsigned char * str" 12 Pre\-allocated output buffer to put decoded OCTET SEQUENCE in. .IP "int str_size" 12 Length of pre\-allocated output buffer. .IP "int * str_len" 12 Output variable containing the length of the contents of the OCTET SEQUENCE. .SH "DESCRIPTION" Extract an OCTET SEQUENCE from DER data. Note that this function expects the DER data past the tag field, i.e., the length and content octets. .SH "RETURNS" Returns \fBASN1_SUCCESS\fP on success, or an error. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_read_value.30000644000000000000000000000704413615374720014660 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_read_value" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_read_value \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_read_value(asn1_node_const " root ", const char * " name ", void * " ivalue ", int * " len ");" .SH ARGUMENTS .IP "asn1_node_const root" 12 pointer to a structure. .IP "const char * name" 12 the name of the element inside a structure that you want to read. .IP "void * ivalue" 12 vector that will contain the element's content, must be a pointer to memory cells already allocated (may be \fBNULL\fP). .IP "int * len" 12 number of bytes of *value: value[0]..value[len\-1]. Initialy holds the sizeof value. .SH "DESCRIPTION" Returns the value of one element inside a structure. If an element is OPTIONAL and this returns \fBASN1_ELEMENT_NOT_FOUND\fP, it means that this element wasn't present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the \fIroot\fP provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node. Note that there can be valid values with length zero. In these case this function will succeed and \fIlen\fP will be zero. .SH "INTEGER" VALUE will contain a two's complement form integer. integer=\-1 \-> value[0]=0xFF , len=1. integer=1 \-> value[0]=0x01 , len=1. .SH "ENUMERATED" As INTEGER (but only with not negative numbers). .SH "BOOLEAN" VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6. OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1"). LEN = strlen(VALUE)+1 .SH "UTCTIME" VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss\-hh'mm'". LEN=strlen(VALUE)+1. .SH "GENERALIZEDTIME" VALUE will be a null terminated string in the same format used to set the value. OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets. .SH "GENERALSTRING" VALUE will contain the generalstring and LEN will be the number of octets. BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits. .SH "CHOICE" If NAME indicates a choice type, VALUE will specify the alternative selected. .SH "ANY" If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used. .SH "RETURNS" \fBASN1_SUCCESS\fP if value is returned, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIname\fP is not a valid element, \fBASN1_VALUE_NOT_FOUND\fP if there isn't any value for the element selected, and \fBASN1_MEM_ERROR\fP if The value vector isn't big enough to store the result, and in this case \fIlen\fP will contain the number of bytes needed. On the occasion that the stored data are of zero\-length this function may return \fBASN1_SUCCESS\fP even if the provided \fIlen\fP is zero. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_copy_node.30000644000000000000000000000250413615374720014524 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_copy_node" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_copy_node \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_copy_node(asn1_node " dst ", const char * " dst_name ", asn1_node_const " src ", const char * " src_name ");" .SH ARGUMENTS .IP "asn1_node dst" 12 Destination asn1 node. .IP "const char * dst_name" 12 Field name in destination node. .IP "asn1_node_const src" 12 Source asn1 node. .IP "const char * src_name" 12 Field name in source node. .SH "DESCRIPTION" Create a deep copy of a asn1_node variable. That function requires \fIdst\fP to be expanded using \fBasn1_create_element()\fP. .SH "RETURNS" Return \fBASN1_SUCCESS\fP on success. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_find_structure_from_oid.30000644000000000000000000000245313615374720017466 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_find_structure_from_oid" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_find_structure_from_oid \- API function .SH SYNOPSIS .B #include .sp .BI "const char * asn1_find_structure_from_oid(asn1_node_const " definitions ", const char * " oidValue ");" .SH ARGUMENTS .IP "asn1_node_const definitions" 12 ASN1 definitions .IP "const char * oidValue" 12 value of the OID to search (e.g. "1.2.3.4"). .SH "DESCRIPTION" Search the structure that is defined just after an OID definition. .SH "RETURNS" \fBNULL\fP when \fIoidValue\fP not found, otherwise the pointer to a constant string that contains the element name defined just after the OID. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_dup_node.30000644000000000000000000000222313615374720014340 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_dup_node" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_dup_node \- API function .SH SYNOPSIS .B #include .sp .BI "asn1_node asn1_dup_node(asn1_node_const " src ", const char * " src_name ");" .SH ARGUMENTS .IP "asn1_node_const src" 12 Source asn1 node. .IP "const char * src_name" 12 Field name in source node. .SH "DESCRIPTION" Create a deep copy of a asn1_node variable. This function will return an exact copy of the provided structure. .SH "RETURNS" Return \fBNULL\fP on failure. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_der_decoding.30000644000000000000000000000334213615374717015162 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_der_decoding" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_der_decoding \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_der_decoding(asn1_node * " element ", const void * " ider ", int " ider_len ", char * " errorDescription ");" .SH ARGUMENTS .IP "asn1_node * element" 12 pointer to an ASN1 structure. .IP "const void * ider" 12 vector that contains the DER encoding. .IP "int ider_len" 12 number of bytes of * \fIider\fP : \fIider\fP [0].. \fIider\fP [len\-1]. .IP "char * errorDescription" 12 null\-terminated string contains details when an error occurred. .SH "DESCRIPTION" Fill the structure * \fIelement\fP with values of a DER encoding string. The structure must just be created with function \fBasn1_create_element()\fP. Note that the * \fIelement\fP variable is provided as a pointer for historical reasons. .SH "RETURNS" \fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP if \fIELEMENT\fP is \fBNULL\fP, and \fBASN1_TAG_ERROR\fP or \fBASN1_DER_ERROR\fP if the der encoding doesn't match the structure name (* \fIELEMENT\fP deleted). .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/man/asn1_delete_element.30000644000000000000000000000241213615374720015516 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "asn1_delete_element" 3 "4.16.0" "libtasn1" "libtasn1" .SH NAME asn1_delete_element \- API function .SH SYNOPSIS .B #include .sp .BI "int asn1_delete_element(asn1_node " structure ", const char * " element_name ");" .SH ARGUMENTS .IP "asn1_node structure" 12 pointer to the structure that contains the element you want to delete. .IP "const char * element_name" 12 element's name you want to delete. .SH "DESCRIPTION" Deletes the element named * \fIelement_name\fP inside * \fIstructure\fP . .SH "RETURNS" \fBASN1_SUCCESS\fP if successful, \fBASN1_ELEMENT_NOT_FOUND\fP if the \fIelement_name\fP was not found. .SH COPYRIGHT Copyright \(co 2006-2015 Free Software Foundation, Inc.. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B libtasn1 is maintained as a Texinfo manual. If the .B info and .B libtasn1 programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. As an alternative you may obtain the manual from: .IP .B http://www.gnu.org/software/libtasn1/manual/ .PP libtasn1-4.16.0/doc/Makefile.am0000644000000000000000000001644613611145057013025 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . if ENABLE_GTK_DOC SUBDIRS = reference endif EXTRA_DIST = gdoc TODO libtasn1.html libtasn1.ps libtasn1.pdf stamp_docs \ COPYING COPYING.LESSER info_TEXINFOS = libtasn1.texi libtasn1_TEXINFOS = fdl-1.3.texi texinfo.css $(gdoc_TEXINFOS) AM_MAKEINFOFLAGS = -I $(top_builddir)/doc TEXI2DVI = texi2dvi $(AM_MAKEINFOFLAGS) AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) \ --no-split --number-sections --css-include=texinfo.css dist_man_MANS = $(gdoc_MANS) asn1Parser.1 asn1Coding.1 asn1Decoding.1 HELP2MAN_OPTS = --info-page libtasn1 asn1Parser.1: $(top_srcdir)/src/asn1Parser.c $(top_srcdir)/configure.ac $(HELP2MAN) $(HELP2MAN_OPTS) \ --name="ASN.1 syntax tree generator for libtasn1" \ --output=$@ $(top_builddir)/src/asn1Parser$(EXEEXT) asn1Coding.1: $(top_srcdir)/src/asn1Coding.c $(top_srcdir)/configure.ac $(HELP2MAN) $(HELP2MAN_OPTS) \ --name="ASN.1 DER encoder" \ --output=$@ $(top_builddir)/src/asn1Coding$(EXEEXT) asn1Decoding.1: $(top_srcdir)/src/asn1Decoding.c $(top_srcdir)/configure.ac $(HELP2MAN) $(HELP2MAN_OPTS) \ --name="ASN.1 DER decoder" \ --output=$@ $(top_builddir)/src/asn1Decoding$(EXEEXT) gdoc_MANS = gdoc_MANS += man/asn1_get_length_der.3 gdoc_MANS += man/asn1_get_tag_der.3 gdoc_MANS += man/asn1_get_length_ber.3 gdoc_MANS += man/asn1_get_octet_der.3 gdoc_MANS += man/asn1_get_object_id_der.3 gdoc_MANS += man/asn1_get_bit_der.3 gdoc_MANS += man/asn1_der_decoding2.3 gdoc_MANS += man/asn1_der_decoding.3 gdoc_MANS += man/asn1_der_decoding_element.3 gdoc_MANS += man/asn1_der_decoding_startEnd.3 gdoc_MANS += man/asn1_expand_any_defined_by.3 gdoc_MANS += man/asn1_expand_octet_string.3 gdoc_MANS += man/asn1_decode_simple_der.3 gdoc_MANS += man/asn1_decode_simple_ber.3 gdoc_MANS += man/asn1_perror.3 gdoc_MANS += man/asn1_strerror.3 gdoc_MANS += man/asn1_find_node.3 gdoc_MANS += man/asn1_length_der.3 gdoc_MANS += man/asn1_octet_der.3 gdoc_MANS += man/asn1_encode_simple_der.3 gdoc_MANS += man/asn1_object_id_der.3 gdoc_MANS += man/asn1_bit_der.3 gdoc_MANS += man/asn1_der_coding.3 gdoc_MANS += man/asn1_write_value.3 gdoc_MANS += man/asn1_read_value.3 gdoc_MANS += man/asn1_read_value_type.3 gdoc_MANS += man/asn1_read_tag.3 gdoc_MANS += man/asn1_read_node_value.3 gdoc_MANS += man/asn1_array2tree.3 gdoc_MANS += man/asn1_delete_structure.3 gdoc_MANS += man/asn1_delete_structure2.3 gdoc_MANS += man/asn1_delete_element.3 gdoc_MANS += man/asn1_create_element.3 gdoc_MANS += man/asn1_print_structure.3 gdoc_MANS += man/asn1_number_of_elements.3 gdoc_MANS += man/asn1_find_structure_from_oid.3 gdoc_MANS += man/asn1_copy_node.3 gdoc_MANS += man/asn1_dup_node.3 gdoc_MANS += man/asn1_parser2tree.3 gdoc_MANS += man/asn1_parser2array.3 gdoc_MANS += man/asn1_check_version.3 gdoc_TEXINFOS = gdoc_TEXINFOS += texi/decoding.c.texi gdoc_TEXINFOS += texi/errors.c.texi gdoc_TEXINFOS += texi/parser_aux.c.texi gdoc_TEXINFOS += texi/coding.c.texi gdoc_TEXINFOS += texi/element.c.texi gdoc_TEXINFOS += texi/gstr.c.texi gdoc_TEXINFOS += texi/structure.c.texi gdoc_TEXINFOS += texi/ASN1.c.texi gdoc_TEXINFOS += texi/version.c.texi gdoc_TEXINFOS += texi/asn1_get_length_der.texi gdoc_TEXINFOS += texi/asn1_get_tag_der.texi gdoc_TEXINFOS += texi/asn1_get_length_ber.texi gdoc_TEXINFOS += texi/asn1_get_octet_der.texi gdoc_TEXINFOS += texi/asn1_get_object_id_der.texi gdoc_TEXINFOS += texi/asn1_get_bit_der.texi gdoc_TEXINFOS += texi/asn1_der_decoding2.texi gdoc_TEXINFOS += texi/asn1_der_decoding.texi gdoc_TEXINFOS += texi/asn1_der_decoding_element.texi gdoc_TEXINFOS += texi/asn1_der_decoding_startEnd.texi gdoc_TEXINFOS += texi/asn1_expand_any_defined_by.texi gdoc_TEXINFOS += texi/asn1_expand_octet_string.texi gdoc_TEXINFOS += texi/asn1_decode_simple_der.texi gdoc_TEXINFOS += texi/asn1_decode_simple_ber.texi gdoc_TEXINFOS += texi/asn1_perror.texi gdoc_TEXINFOS += texi/asn1_strerror.texi gdoc_TEXINFOS += texi/asn1_find_node.texi gdoc_TEXINFOS += texi/asn1_length_der.texi gdoc_TEXINFOS += texi/asn1_octet_der.texi gdoc_TEXINFOS += texi/asn1_encode_simple_der.texi gdoc_TEXINFOS += texi/asn1_object_id_der.texi gdoc_TEXINFOS += texi/asn1_bit_der.texi gdoc_TEXINFOS += texi/asn1_der_coding.texi gdoc_TEXINFOS += texi/asn1_write_value.texi gdoc_TEXINFOS += texi/asn1_read_value.texi gdoc_TEXINFOS += texi/asn1_read_value_type.texi gdoc_TEXINFOS += texi/asn1_read_tag.texi gdoc_TEXINFOS += texi/asn1_read_node_value.texi gdoc_TEXINFOS += texi/asn1_array2tree.texi gdoc_TEXINFOS += texi/asn1_delete_structure.texi gdoc_TEXINFOS += texi/asn1_delete_structure2.texi gdoc_TEXINFOS += texi/asn1_delete_element.texi gdoc_TEXINFOS += texi/asn1_create_element.texi gdoc_TEXINFOS += texi/asn1_print_structure.texi gdoc_TEXINFOS += texi/asn1_number_of_elements.texi gdoc_TEXINFOS += texi/asn1_find_structure_from_oid.texi gdoc_TEXINFOS += texi/asn1_copy_node.texi gdoc_TEXINFOS += texi/asn1_dup_node.texi gdoc_TEXINFOS += texi/asn1_parser2tree.texi gdoc_TEXINFOS += texi/asn1_parser2array.texi gdoc_TEXINFOS += texi/asn1_check_version.texi GDOC_SRC = $(top_srcdir)/lib/decoding.c $(top_srcdir)/lib/errors.c \ $(top_srcdir)/lib/parser_aux.c $(top_srcdir)/lib/coding.c \ $(top_srcdir)/lib/element.c $(top_srcdir)/lib/gstr.c \ $(top_srcdir)/lib/structure.c $(top_builddir)/lib/ASN1.c \ $(top_srcdir)/lib/version.c compare-makefile: @MANS=""; \ TEXINFOS=""; \ for i in $(GDOC_SRC); do \ BASE=`basename $$i`; \ TEXINFOS="$$TEXINFOS\ngdoc_TEXINFOS += texi/$$BASE.texi"; \ done; \ FUNCS=`$(srcdir)/gdoc -listfunc $(GDOC_SRC)`; \ for i in $$FUNCS; do \ MANS="$$MANS\ngdoc_MANS += man/$$i.3"; \ TEXINFOS="$$TEXINFOS\ngdoc_TEXINFOS += texi/$$i.texi"; \ done; \ grep -v -e '^gdoc_MANS += ' -e '^gdoc_TEXINFOS += ' Makefile.am | \ perl -p -e "s,^gdoc_MANS =,gdoc_MANS =$$MANS,;" | \ perl -p -e "s,^gdoc_TEXINFOS =,gdoc_TEXINFOS =$$TEXINFOS,;" \ > tmp-$@; diff -u $(srcdir)/Makefile.am tmp-$@ rm -f tmp-$@ $(gdoc_MANS) $(gdoc_TEXINFOS): stamp_docs clean-local: -rm -f stamp_docs stamp_docs: $(mkdir_p) man texi; \ for i in `$(srcdir)/gdoc -listfunc $(GDOC_SRC)`; do \ echo -n "Creating documentation for $$i... " && \ $(srcdir)/gdoc -man \ -module $(PACKAGE) \ -pkg-name "$(PACKAGE_NAME)" \ -sourceversion $(VERSION) \ -include libtasn1.h \ -seeinfo $(PACKAGE) -verbatimcopying \ -copyright "2006-2015 Free Software Foundation, Inc." \ -function $$i \ $(GDOC_SRC) > man/$$i.3 && \ $(srcdir)/gdoc -texinfo -function $$i \ $(GDOC_SRC) > texi/$$i.texi && \ echo "ok"; \ done; \ for i in $(GDOC_SRC); do \ BASE=`basename $$i`; \ echo -n "Creating documentation for $$i... " && \ $(srcdir)/gdoc -texinfo $$i > texi/$$BASE.texi && \ echo "ok"; \ done touch $@ .PHONY: compare-makefile libtasn1-4.16.0/doc/COPYING0000644000000000000000000010451313514140427012013 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . libtasn1-4.16.0/doc/reference/0000755000000000000000000000000013615400132012764 500000000000000libtasn1-4.16.0/doc/reference/libtasn1-overrides.txt0000644000000000000000000000000013247315041017155 00000000000000libtasn1-4.16.0/doc/reference/Makefile.am0000644000000000000000000001020113447472162014751 00000000000000# -*- mode: makefile -*- # # Makefile.am - template makefile for gtk-doc module # Copyright (C) 2007-2017 Stefan Sauer # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # As a special exception, the above copyright owner gives unlimited # permission to copy, distribute and modify this Makefile.am template. # You need not follow the terms of the GNU General Public License when # using or distributing such Makefile.am files, even though portions of # the text of the Makefile.am appear in them. The GNU General Public # License (GPL) does govern all other use of the material that constitutes # the Makefile.am template. # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE=$(PACKAGE) # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level XML file. DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml # Directories containing the source code. # gtk-doc will search all .c and .h files beneath these paths # for inline comments documenting functions and macros. # e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk DOC_SOURCE_DIR=$(top_srcdir)/lib # Extra options to pass to gtkdoc-scangobj. Normally not needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS=--ignore-decorators=ASN1_API # Extra options to supply to gtkdoc-mkdb # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml MKDB_OPTIONS=--xml-mode --output-format=xml # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS= # Extra options to supply to gtkdoc-fixref. Normally not needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB=$(top_srcdir)/lib/*.h CFILE_GLOB=$(top_srcdir)/lib/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES= # Header files or dirs to ignore when scanning. Use base file/dir names # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code IGNORE_HFILES=element.h gstr.h int.h parser_aux.h structure.h gllib # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES= # Extra files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.xml building.xml changes-2.0.xml content_files= # Files where gtk-doc abbrevations (#GtkWidget) are expanded # e.g. expand_content_files=running.xml expand_content_files= # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS= GTKDOC_LIBS= # This includes the standard gtk-doc make rules, copied by gtkdocize. include $(top_srcdir)/gtk-doc.make # Comment this out if you don't want 'make check' to test you doc status # and run some sanity checks if ENABLE_GTK_DOC TESTS_ENVIRONMENT = \ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) #TESTS = $(GTKDOC_CHECK) endif -include $(top_srcdir)/git.mk libtasn1-4.16.0/doc/reference/libtasn1.types0000644000000000000000000000000013615400132015475 00000000000000libtasn1-4.16.0/doc/reference/libtasn1-sections.txt0000644000000000000000000000206513615400132017012 00000000000000
libtasn1 ASN1_API ASN1_VERSION ASN1_SUCCESS ASN1_FILE_NOT_FOUND ASN1_ELEMENT_NOT_FOUND ASN1_IDENTIFIER_NOT_FOUND ASN1_DER_ERROR ASN1_VALUE_NOT_FOUND ASN1_GENERIC_ERROR ASN1_VALUE_NOT_VALID ASN1_TAG_ERROR ASN1_TAG_IMPLICIT ASN1_ERROR_TYPE_ANY ASN1_SYNTAX_ERROR ASN1_MEM_ERROR ASN1_MEM_ALLOC_ERROR ASN1_DER_OVERFLOW ASN1_NAME_TOO_LONG ASN1_ARRAY_ERROR ASN1_ELEMENT_NOT_EMPTY ASN1_TIME_ENCODING_ERROR ASN1_PRINT_NAME ASN1_PRINT_NAME_TYPE ASN1_PRINT_NAME_TYPE_VALUE ASN1_PRINT_ALL ASN1_CLASS_UNIVERSAL ASN1_CLASS_APPLICATION ASN1_CLASS_CONTEXT_SPECIFIC ASN1_CLASS_PRIVATE ASN1_CLASS_STRUCTURED ASN1_TAG_BOOLEAN ASN1_TAG_INTEGER ASN1_TAG_SEQUENCE ASN1_TAG_SET ASN1_TAG_OCTET_STRING ASN1_TAG_BIT_STRING ASN1_TAG_UTCTime ASN1_TAG_GENERALIZEDTime ASN1_TAG_OBJECT_ID ASN1_TAG_ENUMERATED ASN1_TAG_NULL ASN1_TAG_GENERALSTRING ASN1_TAG_NUMERIC_STRING ASN1_TAG_IA5_STRING ASN1_TAG_TELETEX_STRING ASN1_TAG_PRINTABLE_STRING ASN1_TAG_UNIVERSAL_STRING ASN1_TAG_BMP_STRING ASN1_TAG_UTF8_STRING ASN1_TAG_VISIBLE_STRING asn1_node_st asn1_node ASN1_MAX_NAME_SIZE
libtasn1-4.16.0/doc/reference/html/0000755000000000000000000000000013615400132013730 500000000000000libtasn1-4.16.0/doc/reference/html/left-insensitive.png0000644000000000000000000000061313615400132017646 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä  ø[öIDAT8ËÍ’­NQ…¿éö†…@¡p üdsÛÀÖ`*š4Á@ò„W@ A!ÈÔ†@6Ü^ƒ 5hxèIH R`sQpäÌ™339þBÊó|Ês¤ªKEQTÛíöK°@·ÛÎià¦^¯Ï~îWʆ½÷‹ÀÕûðå`0˜åTJ6·Tõ˜‘cYn6›AÞû Æ€½~¿ß±Ö>}Ç­Žœs;ªº ¨ˆlYkwËÞürˆ¼†ºó£ Þû5U= °/"›ÖÚç  ¬µ‡"ÒuU=ɲlü×ArÎÕDä˜zÃáp5I’ûà4^E+ÀP3Æœçàq_«êp Ì¥iñ¯ðUY¥‚p=#IEND®B`‚libtasn1-4.16.0/doc/reference/html/api-index-full.html0000644000000000000000000003646513615400132017372 00000000000000 API Index: GNU Libtasn1 Reference Manual

API Index

A

ASN1_API, macro in libtasn1
ASN1_ARRAY_ERROR, macro in libtasn1

C

ASN1_CLASS_APPLICATION, macro in libtasn1
ASN1_CLASS_CONTEXT_SPECIFIC, macro in libtasn1
ASN1_CLASS_PRIVATE, macro in libtasn1
ASN1_CLASS_STRUCTURED, macro in libtasn1
ASN1_CLASS_UNIVERSAL, macro in libtasn1

D

ASN1_DER_ERROR, macro in libtasn1
ASN1_DER_OVERFLOW, macro in libtasn1

E

ASN1_ELEMENT_NOT_EMPTY, macro in libtasn1
ASN1_ELEMENT_NOT_FOUND, macro in libtasn1
ASN1_ERROR_TYPE_ANY, macro in libtasn1

F

ASN1_FILE_NOT_FOUND, macro in libtasn1

G

ASN1_GENERIC_ERROR, macro in libtasn1

I

ASN1_IDENTIFIER_NOT_FOUND, macro in libtasn1

M

ASN1_MAX_NAME_SIZE, macro in libtasn1
ASN1_MEM_ALLOC_ERROR, macro in libtasn1
ASN1_MEM_ERROR, macro in libtasn1

N

ASN1_NAME_TOO_LONG, macro in libtasn1
asn1_node, typedef in libtasn1
asn1_node_st, typedef in libtasn1

P

ASN1_PRINT_ALL, macro in libtasn1
ASN1_PRINT_NAME, macro in libtasn1
ASN1_PRINT_NAME_TYPE, macro in libtasn1
ASN1_PRINT_NAME_TYPE_VALUE, macro in libtasn1

S

ASN1_SUCCESS, macro in libtasn1
ASN1_SYNTAX_ERROR, macro in libtasn1

T

ASN1_TAG_BIT_STRING, macro in libtasn1
ASN1_TAG_BMP_STRING, macro in libtasn1
ASN1_TAG_BOOLEAN, macro in libtasn1
ASN1_TAG_ENUMERATED, macro in libtasn1
ASN1_TAG_ERROR, macro in libtasn1
ASN1_TAG_GENERALIZEDTime, macro in libtasn1
ASN1_TAG_GENERALSTRING, macro in libtasn1
ASN1_TAG_IA5_STRING, macro in libtasn1
ASN1_TAG_IMPLICIT, macro in libtasn1
ASN1_TAG_INTEGER, macro in libtasn1
ASN1_TAG_NULL, macro in libtasn1
ASN1_TAG_NUMERIC_STRING, macro in libtasn1
ASN1_TAG_OBJECT_ID, macro in libtasn1
ASN1_TAG_OCTET_STRING, macro in libtasn1
ASN1_TAG_PRINTABLE_STRING, macro in libtasn1
ASN1_TAG_SEQUENCE, macro in libtasn1
ASN1_TAG_SET, macro in libtasn1
ASN1_TAG_TELETEX_STRING, macro in libtasn1
ASN1_TAG_UNIVERSAL_STRING, macro in libtasn1
ASN1_TAG_UTCTime, macro in libtasn1
ASN1_TAG_UTF8_STRING, macro in libtasn1
ASN1_TAG_VISIBLE_STRING, macro in libtasn1
ASN1_TIME_ENCODING_ERROR, macro in libtasn1

V

ASN1_VALUE_NOT_FOUND, macro in libtasn1
ASN1_VALUE_NOT_VALID, macro in libtasn1
ASN1_VERSION, macro in libtasn1
libtasn1-4.16.0/doc/reference/html/deprecated-api-index.html0000644000000000000000000000317213615400132020515 00000000000000 Index of deprecated API: GNU Libtasn1 Reference Manual

Index of deprecated API

libtasn1-4.16.0/doc/reference/html/api-index-2-0.html0000644000000000000000000000300513615400132016706 00000000000000 Index of new API in 2.0: GNU Libtasn1 Reference Manual

Index of new API in 2.0

libtasn1-4.16.0/doc/reference/html/home.png0000644000000000000000000000040013615400132015300 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä  ø[öIDAT8ËÝÒ½ AÅñßž¦f`n v`6`/¶`Y€š˜Ü¡`f&k$,Ëá}˜ˆ ÌüßÀ0ü§bŒ+Ô¸aQW~bæ ËOà e˜{‡y N°Á£üö[LáØÌ}.pÇiÀ­÷¨BzüžÆmm Šoæ·.I]7Ì^[úÃô;%:å†ÁVIEND®B`‚libtasn1-4.16.0/doc/reference/html/up.png0000644000000000000000000000040413615400132015000 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä  ø[ö‘IDAT8Ëí’1 ƒ@DŸ•¶{ƒxa™ƒØÄ;$]r =JR´È1,Ë øSd„-©}0°ÌŸÙÏÂÂÎàüo¹L:m-˜¤QÞOäÀ[› Éäåkå T¸zþMÞ Lè¬Ì,š:ךuÀ!tÁK;æ ðP¦õÌôÀp Ot@£l¼ÿò/̵*á§l}IEND®B`‚libtasn1-4.16.0/doc/reference/html/style.css0000644000000000000000000002652613615400132015535 00000000000000body { font-family: cantarell, sans-serif; } .synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; background: rgba(238, 238, 236, 0.5); border: solid 1px rgb(238, 238, 236); padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ /* fallback for no rgba support */ background: #e6f3ff; border: solid 1px #729fcf; background: rgba(114, 159, 207, 0.1); border: solid 1px rgba(114, 159, 207, 0.2); padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } span.nowrap { white-space: nowrap; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } div.informaltable table { border-collapse: separate; border-spacing: 1em 0.3em; border: none; } div.informaltable table td, div.informaltable table th { vertical-align: top; } .function_type, .variable_type, .property_type, .signal_type, .parameter_name, .struct_member_name, .union_member_name, .define_keyword, .datatype_keyword, .typedef_keyword { text-align: right; } /* dim non-primary columns */ .c_punctuation, .function_type, .variable_type, .property_type, .signal_type, .define_keyword, .datatype_keyword, .typedef_keyword, .property_flags, .signal_flags, .parameter_annotations, .enum_member_annotations, .struct_member_annotations, .union_member_annotations { color: #888a85; } .function_type a, .function_type a:visited, .function_type a:hover, .property_type a, .property_type a:visited, .property_type a:hover, .signal_type a, .signal_type a:visited, .signal_type a:hover, .signal_flags a, .signal_flags a:visited, .signal_flags a:hover { color: #729fcf; } td p { margin: 0.25em; } div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } h4 { color: #555753; margin-top: 1em; margin-bottom: 1em; } hr { /* tango:aluminium 1 */ color: #d3d7cf; background: #d3d7cf; border: none 0px; height: 1px; clear: both; margin: 2.0em 0em 2.0em 0em; } dl.toc dt { padding-bottom: 0.25em; } dl.toc > dt { padding-top: 0.25em; padding-bottom: 0.25em; font-weight: bold; } dl.toc > dl { padding-bottom: 0.5em; } .parameter { font-style: normal; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .informalfigure, .figure { margin: 1em; } .informalexample, .example { margin-top: 1em; margin-bottom: 1em; } .warning { /* tango:orange 0/1 */ background: #ffeed9; background: rgba(252, 175, 62, 0.1); border-color: #ffb04f; border-color: rgba(252, 175, 62, 0.2); } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; background: rgba(138, 226, 52, 0.1); border-color: #abf562; border-color: rgba(138, 226, 52, 0.2); } div.blockquote { border-color: #eeeeec; } .note, .warning, div.blockquote { padding: 0.5em; border-width: 1px; border-style: solid; margin: 2em; } .note p, .warning p { margin: 0; } div.warning h3.title, div.note h3.title { display: none; } p + div.section { margin-top: 1em; } div.refnamediv, div.refsynopsisdiv, div.refsect1, div.refsect2, div.toc, div.section { margin-bottom: 1em; } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .lineart { color: #d3d7cf; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-weight: normal; } .structfield { font-style: normal; font-weight: normal; } acronym,abbr { border-bottom: 1px dotted gray; } .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; border: solid 1px rgba(114, 159, 207, 0.2); padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; background: rgba(114, 159, 207, 0.2); /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; background: rgba(114, 159, 207, 0.1); } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; background: none; } .listing_lines pre, .listing_code pre { margin: 0px; } @media screen { /* these have a as a first child, but since there are no parent selectors * we can't use that. */ a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the naviagtion */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { display: inline-block; position: relative; top:-5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 2.5em; padding-bottom: 500px; max-width: 60em; } p { max-width: 60em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; background: #e2e2e2; border-bottom: solid 1px #babdb6; border-spacing: 5px; margin-top: 0; margin-bottom: 0; top: 0; left: 0; z-index: 10; } table.navigation#top td { padding-left: 6px; padding-right: 6px; } .navigation a, .navigation a:visited { /* tango:sky blue 3 */ color: #204a87; } .navigation a:hover { /* tango:sky blue 2 */ color: #3465a4; } td.shortcuts { /* tango:sky blue 2 */ color: #3465a4; font-size: 80%; white-space: nowrap; } td.shortcuts .dim { color: #babdb6; } .navigation .title { font-size: 80%; max-width: none; margin: 0px; font-weight: normal; } } @media screen and (min-width: 60em) { /* screen larger than 60em */ body { margin: auto; } } @media screen and (max-width: 60em) { /* screen less than 60em */ #nav_hierarchy { display: none; } #nav_interfaces { display: none; } #nav_prerequisites { display: none; } #nav_derived_interfaces { display: none; } #nav_implementations { display: none; } #nav_child_properties { display: none; } #nav_style_properties { display: none; } #nav_index { display: none; } #nav_glossary { display: none; } .gallery_image { display: none; } .property_flags { display: none; } .signal_flags { display: none; } .parameter_annotations { display: none; } .enum_member_annotations { display: none; } .struct_member_annotations { display: none; } .union_member_annotations { display: none; } /* now that a column is hidden, optimize space */ col.parameters_name { width: auto; } col.parameters_description { width: auto; } col.struct_members_name { width: auto; } col.struct_members_description { width: auto; } col.enum_members_name { width: auto; } col.enum_members_description { width: auto; } col.union_members_name { width: auto; } col.union_members_description { width: auto; } .listing_lines { display: none; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; background: #e2e2e2; border: solid 1px #babdb6; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } .hll { background-color: #ffffcc } .c { color: #408080; font-style: italic } /* Comment */ .err { border: 1px solid #FF0000 } /* Error */ .k { color: #008000; font-weight: bold } /* Keyword */ .o { color: #666666 } /* Operator */ .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ .cm { color: #408080; font-style: italic } /* Comment.Multiline */ .cp { color: #BC7A00 } /* Comment.Preproc */ .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ .c1 { color: #408080; font-style: italic } /* Comment.Single */ .cs { color: #408080; font-style: italic } /* Comment.Special */ .gd { color: #A00000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ .gr { color: #FF0000 } /* Generic.Error */ .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .gi { color: #00A000 } /* Generic.Inserted */ .go { color: #888888 } /* Generic.Output */ .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .gs { font-weight: bold } /* Generic.Strong */ .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .gt { color: #0044DD } /* Generic.Traceback */ .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ .kp { color: #008000 } /* Keyword.Pseudo */ .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .kt { color: #B00040 } /* Keyword.Type */ .m { color: #666666 } /* Literal.Number */ .s { color: #BA2121 } /* Literal.String */ .na { color: #7D9029 } /* Name.Attribute */ .nb { color: #008000 } /* Name.Builtin */ .nc { color: #0000FF; font-weight: bold } /* Name.Class */ .no { color: #880000 } /* Name.Constant */ .nd { color: #AA22FF } /* Name.Decorator */ .ni { color: #999999; font-weight: bold } /* Name.Entity */ .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ .nf { color: #0000FF } /* Name.Function */ .nl { color: #A0A000 } /* Name.Label */ .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ .nt { color: #008000; font-weight: bold } /* Name.Tag */ .nv { color: #19177C } /* Name.Variable */ .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ .w { color: #bbbbbb } /* Text.Whitespace */ .mb { color: #666666 } /* Literal.Number.Bin */ .mf { color: #666666 } /* Literal.Number.Float */ .mh { color: #666666 } /* Literal.Number.Hex */ .mi { color: #666666 } /* Literal.Number.Integer */ .mo { color: #666666 } /* Literal.Number.Oct */ .sa { color: #BA2121 } /* Literal.String.Affix */ .sb { color: #BA2121 } /* Literal.String.Backtick */ .sc { color: #BA2121 } /* Literal.String.Char */ .dl { color: #BA2121 } /* Literal.String.Delimiter */ .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .s2 { color: #BA2121 } /* Literal.String.Double */ .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ .sh { color: #BA2121 } /* Literal.String.Heredoc */ .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ .sx { color: #008000 } /* Literal.String.Other */ .sr { color: #BB6688 } /* Literal.String.Regex */ .s1 { color: #BA2121 } /* Literal.String.Single */ .ss { color: #19177C } /* Literal.String.Symbol */ .bp { color: #008000 } /* Name.Builtin.Pseudo */ .fm { color: #0000FF } /* Name.Function.Magic */ .vc { color: #19177C } /* Name.Variable.Class */ .vg { color: #19177C } /* Name.Variable.Global */ .vi { color: #19177C } /* Name.Variable.Instance */ .vm { color: #19177C } /* Name.Variable.Magic */ .il { color: #666666 } /* Literal.Number.Integer.Long */libtasn1-4.16.0/doc/reference/html/right.png0000644000000000000000000000040513615400132015472 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä  ø[ö’IDAT8ËÕÒ¯aÇñ?›M´½IdErš,¾Ù-¸ÑhîAâIl’Í ¯r’äy§ž}¿ç·s¿X6èæ ö!9¢Ÿ#èD‚ Œr$-¬BrÃ$GÒÀ"$”¹;™á‰æŸÍú—WZêä&–!¸cš·±øŠq \`ðÃÔ軀Oä¾ò=QouføòIEND®B`‚libtasn1-4.16.0/doc/reference/html/left.png0000644000000000000000000000040613615400132015310 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä  ø[ö“IDAT8ËÕÒ¯Áa‡ñ?ÁDAPY‘\‚$‹º[p¢+ÐÜIÐIªMlfü('Úì}MpâÙyží{Îá_ª…ž¨¤ÂÞ¥Â}œ^£‘q xZ <Æ=àYjî) <0ù4\~Ó+Púöl#Ü"ÂÕÉ—,QÏ‘ôp ÉÍIÇlswÒÆ>÷•[/]_i0‘3ÃIEND®B`‚libtasn1-4.16.0/doc/reference/html/ch01.html0000644000000000000000000000424613615400132015277 00000000000000 GNU Libtasn1 API Reference Manual: GNU Libtasn1 Reference Manual

GNU Libtasn1 API Reference Manual

This document describes the GNU Libtasn1 library developed for ASN.1 (Abstract Syntax Notation One) structures management and DER (Distinguished Encoding Rules) encoding functions.

More up to date information can be found at https://www.gnu.org/software/libtasn1/.

libtasn1-4.16.0/doc/reference/html/libtasn1-libtasn1.html0000644000000000000000000005427613615400132020004 00000000000000 libtasn1: GNU Libtasn1 Reference Manual

libtasn1

libtasn1

Description

Functions

Types and Values

ASN1_API

#define ASN1_API __attribute__((__visibility__("default")))

ASN1_VERSION

#define ASN1_VERSION "4.16.0"

Version of the library as a string.


ASN1_SUCCESS

#define ASN1_SUCCESS			0

ASN1_FILE_NOT_FOUND

#define ASN1_FILE_NOT_FOUND		1

ASN1_ELEMENT_NOT_FOUND

#define ASN1_ELEMENT_NOT_FOUND		2

ASN1_IDENTIFIER_NOT_FOUND

#define ASN1_IDENTIFIER_NOT_FOUND 3

ASN1_DER_ERROR

#define ASN1_DER_ERROR			4

ASN1_VALUE_NOT_FOUND

#define ASN1_VALUE_NOT_FOUND		5

ASN1_GENERIC_ERROR

#define ASN1_GENERIC_ERROR		6

ASN1_VALUE_NOT_VALID

#define ASN1_VALUE_NOT_VALID		7

ASN1_TAG_ERROR

#define ASN1_TAG_ERROR			8

ASN1_TAG_IMPLICIT

#define ASN1_TAG_IMPLICIT		9

ASN1_ERROR_TYPE_ANY

#define ASN1_ERROR_TYPE_ANY		10

ASN1_SYNTAX_ERROR

#define ASN1_SYNTAX_ERROR		11

ASN1_MEM_ERROR

#define ASN1_MEM_ERROR			12

ASN1_MEM_ALLOC_ERROR

#define ASN1_MEM_ALLOC_ERROR		13

ASN1_DER_OVERFLOW

#define ASN1_DER_OVERFLOW		14

ASN1_NAME_TOO_LONG

#define ASN1_NAME_TOO_LONG		15

ASN1_ARRAY_ERROR

#define ASN1_ARRAY_ERROR		16

ASN1_ELEMENT_NOT_EMPTY

#define ASN1_ELEMENT_NOT_EMPTY		17

ASN1_TIME_ENCODING_ERROR

#define ASN1_TIME_ENCODING_ERROR 18

ASN1_PRINT_NAME

#define ASN1_PRINT_NAME			1

ASN1_PRINT_NAME_TYPE

#define ASN1_PRINT_NAME_TYPE		2

ASN1_PRINT_NAME_TYPE_VALUE

#define ASN1_PRINT_NAME_TYPE_VALUE 3

ASN1_PRINT_ALL

#define ASN1_PRINT_ALL			4

ASN1_CLASS_UNIVERSAL

#define ASN1_CLASS_UNIVERSAL		0x00 /* old: 1 */

ASN1_CLASS_APPLICATION

#define ASN1_CLASS_APPLICATION		0x40 /* old: 2 */

ASN1_CLASS_CONTEXT_SPECIFIC

#define ASN1_CLASS_CONTEXT_SPECIFIC 0x80 /* old: 3 */

ASN1_CLASS_PRIVATE

#define ASN1_CLASS_PRIVATE		0xC0 /* old: 4 */

ASN1_CLASS_STRUCTURED

#define ASN1_CLASS_STRUCTURED		0x20

ASN1_TAG_BOOLEAN

#define ASN1_TAG_BOOLEAN		0x01

ASN1_TAG_INTEGER

#define ASN1_TAG_INTEGER		0x02

ASN1_TAG_SEQUENCE

#define ASN1_TAG_SEQUENCE		0x10

ASN1_TAG_SET

#define ASN1_TAG_SET			0x11

ASN1_TAG_OCTET_STRING

#define ASN1_TAG_OCTET_STRING		0x04

ASN1_TAG_BIT_STRING

#define ASN1_TAG_BIT_STRING		0x03

ASN1_TAG_UTCTime

#define ASN1_TAG_UTCTime		0x17

ASN1_TAG_GENERALIZEDTime

#define ASN1_TAG_GENERALIZEDTime 0x18

ASN1_TAG_OBJECT_ID

#define ASN1_TAG_OBJECT_ID		0x06

ASN1_TAG_ENUMERATED

#define ASN1_TAG_ENUMERATED		0x0A

ASN1_TAG_NULL

#define ASN1_TAG_NULL			0x05

ASN1_TAG_GENERALSTRING

#define ASN1_TAG_GENERALSTRING		0x1B

ASN1_TAG_NUMERIC_STRING

#define ASN1_TAG_NUMERIC_STRING		0x12

ASN1_TAG_IA5_STRING

#define ASN1_TAG_IA5_STRING		0x16

ASN1_TAG_TELETEX_STRING

#define ASN1_TAG_TELETEX_STRING		0x14

ASN1_TAG_PRINTABLE_STRING

#define ASN1_TAG_PRINTABLE_STRING 0x13

ASN1_TAG_UNIVERSAL_STRING

#define ASN1_TAG_UNIVERSAL_STRING 0x1C

ASN1_TAG_BMP_STRING

#define ASN1_TAG_BMP_STRING		0x1E

ASN1_TAG_UTF8_STRING

#define ASN1_TAG_UTF8_STRING		0x0C

ASN1_TAG_VISIBLE_STRING

#define ASN1_TAG_VISIBLE_STRING		0x1A

asn1_node_st

typedef struct asn1_node_st asn1_node_st;

asn1_node

typedef asn1_node_st *asn1_node;

Structure definition used for the node of the tree that represents an ASN.1 DEFINITION.


ASN1_MAX_NAME_SIZE

#define ASN1_MAX_NAME_SIZE 64

Maximum number of characters of a name inside a file with ASN1 definitions.

libtasn1-4.16.0/doc/reference/html/libtasn1.devhelp20000644000000000000000000001453313615400132017026 00000000000000 libtasn1-4.16.0/doc/reference/html/index.html0000644000000000000000000000360113615400132015645 00000000000000 GNU Libtasn1 Reference Manual: GNU Libtasn1 Reference Manual

for GNU Libtasn1 4.16.0. The latest version of this documentation can be found on-line at https://www.gnu.org/software/libtasn1/reference/.


libtasn1-4.16.0/doc/reference/html/up-insensitive.png0000644000000000000000000000056613615400132017347 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä  ø[öIDAT8Ëí’?/QÅÏ™?[êu$¾€V³î›ÑâHTD³ø”ÛˆBM+¡!™ÂÌ<ˆDã+èô[mdÞ\…·bø{º{sÎ/97˜ªSÖÚ£º®»<ìTõ8ŒcÌÉ¿UU­‘¼‡•WÕÍ,Ë®ÿ”e¹EÑ €žªîÉSïmÛ®æy~û+À9·è½¿0`hŒ9u†ªº`Çñr¿ßùpÎÍ{ïÌ8‘m’ ªJkí€-o$—Dä¢  išË¾'¹; ‡ Jr‡äCð\¨*¿HΑ|JÓtCDÆßo#"ã$IÖ<«êBQ½é£êêÉ]•TKúIEND®B`‚libtasn1-4.16.0/doc/reference/html/right-insensitive.png0000644000000000000000000000056513615400132020037 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä  ø[öIDAT8ËÍ’±JÃ`…¿ ‚“‹³«/ S’_$ÄÁÁAqrÐÙW(>€“à‚®©“m¥"]\œ„è(‘49.NÚdÒ3¸ß9Ü{á¯eM#MSI‡Î¹·E¯iHz|3{̲l½3 ,K˜k’ž†ÃáV'@EŸEQlwÀŠçyišî·Äqüçù‘™]KÀíh4:mµÄ¦²,;“t˜¤sç\aƒÆR5/¬7'¹W×õp”’Žs×­I’,Kº1³=àËÌÂ0´j0Wg³ÙØ>€Ý ¦­¯PUÕýïð»¤0 §]?qCÒ«™ùιgþ½~œÉkÄAâ…_IEND®B`‚libtasn1-4.16.0/doc/reference/html/api-index-1-6.html0000644000000000000000000000321513615400132016716 00000000000000 Index of new API in 1.6: GNU Libtasn1 Reference Manual

Index of new API in 1.6

libtasn1-4.16.0/doc/reference/libtasn1-docs.xml0000644000000000000000000000403113565453074016110 00000000000000 %gtkdocentities; ]> &package_name; Reference Manual for &package_string;. The latest version of this documentation can be found on-line at https://www.gnu.org/software/libtasn1/reference/. GNU Libtasn1 API Reference Manual This document describes the GNU Libtasn1 library developed for ASN.1 (Abstract Syntax Notation One) structures management and DER (Distinguished Encoding Rules) encoding functions. More up to date information can be found at https://www.gnu.org/software/libtasn1/. API Index Index of deprecated API Index of new API in 1.6 Index of new API in 2.0 libtasn1-4.16.0/doc/reference/Makefile.in0000644000000000000000000010460413615375040014767 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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@ # -*- mode: makefile -*- # # Makefile.am - template makefile for gtk-doc module # Copyright (C) 2007-2017 Stefan Sauer # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # As a special exception, the above copyright owner gives unlimited # permission to copy, distribute and modify this Makefile.am template. # You need not follow the terms of the GNU General Public License when # using or distributing such Makefile.am files, even though portions of # the text of the Makefile.am appear in them. The GNU General Public # License (GPL) does govern all other use of the material that constitutes # the Makefile.am template. # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # -*- mode: makefile -*- # # gtk-doc.make - make rules for gtk-doc # Copyright (C) 2003 James Henstridge # 2004-2007 Damon Chaplin # 2007-2017 Stefan Sauer # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #################################### # Everything below here is generic # #################################### VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/reference ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ $(top_srcdir)/m4/ax_am_macros_static.m4 \ $(top_srcdir)/m4/ax_check_gnu_make.m4 \ $(top_srcdir)/m4/ax_code_coverage.m4 \ $(top_srcdir)/m4/ax_file_escapes.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4-gl/00gnulib.m4 \ $(top_srcdir)/m4-gl/__inline.m4 \ $(top_srcdir)/m4-gl/absolute-header.m4 \ $(top_srcdir)/m4-gl/extensions.m4 \ $(top_srcdir)/m4-gl/extern-inline.m4 \ $(top_srcdir)/m4-gl/gnulib-common.m4 \ $(top_srcdir)/m4-gl/gnulib-comp.m4 \ $(top_srcdir)/m4-gl/include_next.m4 \ $(top_srcdir)/m4-gl/ld-version-script.m4 \ $(top_srcdir)/m4-gl/limits-h.m4 \ $(top_srcdir)/m4-gl/longlong.m4 \ $(top_srcdir)/m4-gl/manywarnings.m4 \ $(top_srcdir)/m4-gl/minmax.m4 $(top_srcdir)/m4-gl/multiarch.m4 \ $(top_srcdir)/m4-gl/off_t.m4 $(top_srcdir)/m4-gl/ssize_t.m4 \ $(top_srcdir)/m4-gl/stdbool.m4 $(top_srcdir)/m4-gl/stddef_h.m4 \ $(top_srcdir)/m4-gl/stdint.m4 $(top_srcdir)/m4-gl/string_h.m4 \ $(top_srcdir)/m4-gl/strverscmp.m4 \ $(top_srcdir)/m4-gl/sys_types_h.m4 \ $(top_srcdir)/m4-gl/valgrind-tests.m4 \ $(top_srcdir)/m4-gl/visibility.m4 \ $(top_srcdir)/m4-gl/warn-on-use.m4 \ $(top_srcdir)/m4-gl/warnings.m4 $(top_srcdir)/m4-gl/wchar_t.m4 \ $(top_srcdir)/m4-gl/wint_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/gtk-doc.make DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASN1_VERSION_MAJOR = @ASN1_VERSION_MAJOR@ ASN1_VERSION_MINOR = @ASN1_VERSION_MINOR@ ASN1_VERSION_NUMBER = @ASN1_VERSION_NUMBER@ ASN1_VERSION_PATCH = @ASN1_VERSION_PATCH@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FUZZ_LIBS = @FUZZ_LIBS@ GCOV = @GCOV@ GENHTML = @GENHTML@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTOOL = @LIBTOOL@ LIB_FUZZING_ENGINE = @LIB_FUZZING_ENGINE@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ ifGNUmake = @ifGNUmake@ ifnGNUmake = @ifnGNUmake@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # The name of the module, e.g. 'glib'. DOC_MODULE = $(PACKAGE) # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level XML file. DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml # Directories containing the source code. # gtk-doc will search all .c and .h files beneath these paths # for inline comments documenting functions and macros. # e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk DOC_SOURCE_DIR = $(top_srcdir)/lib # Extra options to pass to gtkdoc-scangobj. Normally not needed. SCANGOBJ_OPTIONS = # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS = --ignore-decorators=ASN1_API # Extra options to supply to gtkdoc-mkdb # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml MKDB_OPTIONS = --xml-mode --output-format=xml # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS = # Extra options to supply to gtkdoc-fixref. Normally not needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS = # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB = $(top_srcdir)/lib/*.h CFILE_GLOB = $(top_srcdir)/lib/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES = # Header files or dirs to ignore when scanning. Use base file/dir names # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code IGNORE_HFILES = element.h gstr.h int.h parser_aux.h structure.h gllib # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES = # Extra files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.xml building.xml changes-2.0.xml content_files = # Files where gtk-doc abbrevations (#GtkWidget) are expanded # e.g. expand_content_files=running.xml expand_content_files = # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS = GTKDOC_LIBS = @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(expand_content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt EXTRA_DIST = \ $(HTML_IMAGES) \ $(SETUP_FILES) DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test @GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP = @GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp @GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP = @GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp #### setup #### GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_@AM_V@) GTK_DOC_V_SETUP_ = $(GTK_DOC_V_SETUP_@AM_DEFAULT_V@) GTK_DOC_V_SETUP_0 = @echo " DOC Preparing build"; #### scan #### GTK_DOC_V_SCAN = $(GTK_DOC_V_SCAN_@AM_V@) GTK_DOC_V_SCAN_ = $(GTK_DOC_V_SCAN_@AM_DEFAULT_V@) GTK_DOC_V_SCAN_0 = @echo " DOC Scanning header files"; GTK_DOC_V_INTROSPECT = $(GTK_DOC_V_INTROSPECT_@AM_V@) GTK_DOC_V_INTROSPECT_ = $(GTK_DOC_V_INTROSPECT_@AM_DEFAULT_V@) GTK_DOC_V_INTROSPECT_0 = @echo " DOC Introspecting gobjects"; #### xml #### GTK_DOC_V_XML = $(GTK_DOC_V_XML_@AM_V@) GTK_DOC_V_XML_ = $(GTK_DOC_V_XML_@AM_DEFAULT_V@) GTK_DOC_V_XML_0 = @echo " DOC Building XML"; #### html #### GTK_DOC_V_HTML = $(GTK_DOC_V_HTML_@AM_V@) GTK_DOC_V_HTML_ = $(GTK_DOC_V_HTML_@AM_DEFAULT_V@) GTK_DOC_V_HTML_0 = @echo " DOC Building HTML"; GTK_DOC_V_XREF = $(GTK_DOC_V_XREF_@AM_V@) GTK_DOC_V_XREF_ = $(GTK_DOC_V_XREF_@AM_DEFAULT_V@) GTK_DOC_V_XREF_0 = @echo " DOC Fixing cross-references"; #### pdf #### GTK_DOC_V_PDF = $(GTK_DOC_V_PDF_@AM_V@) GTK_DOC_V_PDF_ = $(GTK_DOC_V_PDF_@AM_DEFAULT_V@) GTK_DOC_V_PDF_0 = @echo " DOC Building PDF"; # This includes the standard gtk-doc make rules, copied by gtkdocize. # Comment this out if you don't want 'make check' to test you doc status # and run some sanity checks @ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = \ @ENABLE_GTK_DOC_TRUE@ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ @ENABLE_GTK_DOC_TRUE@ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/reference/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/reference/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/gtk-doc.make $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am @ENABLE_GTK_DOC_FALSE@all-local: all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local cscopelist-am ctags-am dist-hook \ distclean distclean-generic distclean-libtool distclean-local \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-local .PRECIOUS: Makefile gtkdoc-check.test: Makefile $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \ echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \ chmod +x $@ all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) .PHONY: all-gtk-doc @ENABLE_GTK_DOC_TRUE@all-local: all-gtk-doc docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp setup-build.stamp: -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ destdir=`dirname $(abs_builddir)/$$file`; \ test -d "$$destdir" || mkdir -p "$$destdir"; \ test -f $(abs_srcdir)/$$file && \ cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \ done; \ fi; \ fi $(AM_V_at)touch setup-build.stamp scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(GTK_DOC_V_SCAN)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi $(AM_V_at)touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent $(GTK_DOC_V_XML)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) $(AM_V_at)touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true $(DOC_MAIN_SGML_FILE): sgml-build.stamp @true xml/gtkdocentities.ent: Makefile $(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ ) > $@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$$?" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \ test -f $$file && cp $$file $(abs_builddir)/html; \ done; $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) $(AM_V_at)touch html-build.stamp pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) $(AM_V_at)touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \ rm -f $(DOC_MODULE).types; \ fi @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \ rm -f $(DOC_MODULE)-sections.txt; \ fi distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(DOC_MODULE).types; \ fi maintainer-clean-local: @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # @HAVE_GTK_DOC_TRUE@dist-check-gtkdoc: docs @HAVE_GTK_DOC_FALSE@dist-check-gtkdoc: @HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc is needed to run 'make dist'. ***" @HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc was not found when 'configure' ran. ***" @HAVE_GTK_DOC_FALSE@ @echo "*** please install gtk-doc and rerun 'configure'. ***" @HAVE_GTK_DOC_FALSE@ @false dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local @mkdir $(distdir)/html @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs #TESTS = $(GTKDOC_CHECK) -include $(top_srcdir)/git.mk # 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: libtasn1-4.16.0/doc/stamp_docs0000644000000000000000000000000013615374721013031 00000000000000libtasn1-4.16.0/doc/gdoc0000755000000000000000000007201113246341643011624 00000000000000eval '(exit $?0)' && eval 'exec perl "$0" ${1+"$@"}' & eval 'exec perl "$0" $argv:q' if 0; ## Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon Josefsson ## added -texinfo, -listfunc, -pkg-name ## man page revamp ## various improvements ## Copyright (c) 2001, 2002 Nikos Mavrogiannopoulos ## added -tex ## Copyright (c) 1998 Michael Zucchi ## Copyright (c) 2013 Adam Sampson ## made highlighting not depend on hash order, for Perl 5.18 # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # This will read a C source code file and scan for embedded comments # in the style of gnome comments (+minor extensions - see below). # usage: # gdoc [ -docbook | -html | -text | -man | -tex | -texinfo | -listfunc ] # [ -sourceversion verno ] [ -include file | -includefuncprefix ] # [ -bugsto address ] [ -pkg-name packagename ] # [ -seeinfo infonode ] [ -copyright notice ] [ -verbatimcopying ] # [ -function funcname [ -function funcname ...] ] c file(s)s > outputfile # # Set output format using one of -docbook, -html, -text, -man, -tex, # -texinfo, or -listfunc. Default is man. # # -sourceversion # Version number for source code, e.g. '1.0.4'. Used in 'man' headers. # Defaults to using current date. # # -include FILE # For man pages, mention #include in the synopsis. # # -includefuncprefix # For man pages, mention a #include in the synopsis. # The FILE derived from the function prefix. For example, a # function gss_init_sec_context will generate an include # statement of #include . # # -bugsto address # For man pages, include a section about reporting bugs and mention # the given e-mail address, e.g 'bug-libidn@gnu.org'. # # -pkg-name packagename # For man pages when -bugsto is used, also include help URLs to the # the project's home page. For example, "GNU Libidn". # # -seeinfo infonode # For man pages, include a section that point to an info manual # for more information. # # -copyright notice # For man pages, include a copyright section with the given # notice after a preamble. Use, e.g., '2002, 2003 Simon Josefsson'. # # -verbatimcopying # For man pages, and when the -copyright parameter is used, # add a licensing statement that say verbatim copying is permitted. # # -function funcname # If set, then only generate documentation for the given function(s). All # other functions are ignored. # # c files - list of 'c' files to process # # All output goes to stdout, with errors to stderr. # # format of comments. # In the following table, (...)? signifies optional structure. # (...)* signifies 0 or more structure elements # /** # * function_name(:)? (- short description)? # (* @parameterx: (description of parameter x)?)* # (* a blank line)? # * (Description:)? (Description of function)? # * (Section header: (section description)? )* # (*)?*/ # # So .. the trivial example would be: # # /** # * my_function # **/ # # If the Description: header tag is ommitted, then there must be a blank line # after the last parameter specification. # e.g. # /** # * my_function - does my stuff # * @my_arg: its mine damnit # * # * Does my stuff explained. # */ # # or, could also use: # /** # * my_function - does my stuff # * @my_arg: its mine damnit # * Description: Does my stuff explained. # */ # etc. # # All descriptions can be multiline, apart from the short function description. # # All descriptive text is further processed, scanning for the following special # patterns, which are highlighted appropriately. # # 'funcname()' - function # '$ENVVAR' - environmental variable OBSOLETE (?) # '#struct_name' - name of a structure # '@parameter' - name of a parameter # '%CONST' - name of a constant. # # Extensions for LaTeX: # # 1. the symbol '->' will be replaced with a rightarrow # 2. x^y with ${x}^{y}$. # 3. xxx\: with xxx: use POSIX qw(strftime); # match expressions used to find embedded type information $type_constant = "\\\%([A-Za-z0-9_]+)"; $type_func = "([A-Za-z0-9_]+\\(\\))"; $type_param = '\@([A-Za-z0-9_]+)\s*'; $type_struct = "\\\#([A-Za-z0-9_]+)"; $type_env = "(\\\$[A-Za-z0-9_]+)"; # Output conversion substitutions. # One for each output format # these work fairly well @highlights_html = ( [$type_constant, '"$1"'], [$type_func, '"$1"'], [$type_struct, '"$1"'], [$type_param, '" $1 "'] ); $blankline_html = "

"; @highlights_texinfo = ( [$type_param, '" \@code{$1} "'], [$type_constant, '"\@code{$1} "'], [$type_func, '"\@code{$1} "'], [$type_struct, '"\@code{$1} "'], ); $blankline_texinfo = ""; @highlights_tex = ( [$type_param, '" {\\\bf $1} "'], [$type_constant, '"{\\\it $1}"'], [$type_func, '"{\\\bf $1}"'], [$type_struct, '"{\\\it $1}"'], ); $blankline_tex = "\\\\"; # sgml, docbook format @highlights_sgml = ( [$type_constant, '"$1"'], [$type_func, '"$1"'], [$type_struct, '"$1"'], [$type_env, '"$1"'], [$type_param, '" $1 "'] ); $blankline_sgml = "\n"; # these are pretty rough @highlights_man = ( [$type_constant, '"\\\fB$1\\\fP"'], [$type_func, '"\\\fB$1\\\fP"'], [$type_struct, '"\\\fB$1\\\fP"'], [$type_param, '" \\\fI$1\\\fP "'] ); $blankline_man = ""; # text-mode @highlights_text = ( [$type_constant, '"$1"'], [$type_func, '"$1"'], [$type_struct, '"$1"'], [$type_param, '"$1 "'] ); $blankline_text = ""; my $lineprefix = ""; sub usage { print "Usage: $0 [ -v ] [ -docbook | -html | -text | -man | -tex | -texinfo -listfunc ]\n"; print " [ -sourceversion verno ] [ -include file | -includefuncprefix ]\n"; print " [ -bugsto address ] [ -seeinfo infonode ] [ -copyright notice]\n"; print " [ -verbatimcopying ] [ -pkg-name packagename ]\n"; print " [ -function funcname [ -function funcname ...] ]\n"; print " c source file(s) > outputfile\n"; exit 1; } # read arguments if ($#ARGV==-1) { usage(); } $verbose = 0; $output_mode = "man"; @highlights = @highlights_man; $blankline = $blankline_man; $modulename = "API Documentation"; $sourceversion = strftime "%Y-%m-%d", localtime; $function_only = 0; while ($ARGV[0] =~ m/^-(.*)/) { $cmd = shift @ARGV; if ($cmd eq "-html") { $output_mode = "html"; @highlights = @highlights_html; $blankline = $blankline_html; } elsif ($cmd eq "-man") { $output_mode = "man"; @highlights = @highlights_man; $blankline = $blankline_man; } elsif ($cmd eq "-tex") { $output_mode = "tex"; @highlights = @highlights_tex; $blankline = $blankline_tex; } elsif ($cmd eq "-texinfo") { $output_mode = "texinfo"; @highlights = @highlights_texinfo; $blankline = $blankline_texinfo; } elsif ($cmd eq "-text") { $output_mode = "text"; @highlights = @highlights_text; $blankline = $blankline_text; } elsif ($cmd eq "-docbook") { $output_mode = "sgml"; @highlights = @highlights_sgml; $blankline = $blankline_sgml; } elsif ($cmd eq "-listfunc") { $output_mode = "listfunc"; } elsif ($cmd eq "-module") { # not needed for sgml, inherits from calling document $modulename = shift @ARGV; } elsif ($cmd eq "-sourceversion") { $sourceversion = shift @ARGV; } elsif ($cmd eq "-include") { $include = shift @ARGV; } elsif ($cmd eq "-includefuncprefix") { $includefuncprefix = 1; } elsif ($cmd eq "-bugsto") { $bugsto = shift @ARGV; } elsif ($cmd eq "-pkg-name") { $pkgname = shift @ARGV; } elsif ($cmd eq "-copyright") { $copyright = shift @ARGV; } elsif ($cmd eq "-verbatimcopying") { $verbatimcopying = 1; } elsif ($cmd eq "-seeinfo") { $seeinfo = shift @ARGV; } elsif ($cmd eq "-function") { # to only output specific functions $function_only = 1; $function = shift @ARGV; $function_table{$function} = 1; } elsif ($cmd eq "-v") { $verbose = 1; } elsif (($cmd eq "-h") || ($cmd eq "--help")) { usage(); } } ## # dumps section contents to arrays/hashes intended for that purpose. # sub dump_section { my $name = shift @_; my $contents = join "\n", @_; $name = " $name"; if ($name =~ m/$type_constant/) { $name = $1; # print STDERR "constant section '$1' = '$contents'\n"; $constants{$name} = $contents; } elsif ($name =~ m/$type_param/) { # print STDERR "parameter def '$1' = '$contents'\n"; $name = $1; $parameters{$name} = $contents; } else { # print STDERR "other section '$name' = '$contents'\n"; $name =~ tr/ //d; $sections{$name} = $contents; push @sectionlist, $name; } } ## # output function # # parameters, a hash. # function => "function name" # parameterlist => @list of parameters # parameters => %parameter descriptions # sectionlist => @list of sections # sections => %descriont descriptions # sub just_highlight { my $contents = join "\n", @_; my $line; my $ret = ""; foreach $highlight (@highlights) { my ($pattern, $replace) = @$highlight; #print "scanning pattern $pattern ($replace)\n"; $contents =~ s/$pattern/$replace/gees; } foreach $line (split "\n", $contents) { if ($line eq ""){ $ret = $ret . $lineprefix . $blankline; } else { $ret = $ret . $lineprefix . $line; } $ret = $ret . "\n"; } return $ret; } sub output_highlight { print (just_highlight (@_)); } # output in texinfo sub output_texinfo { my %args = %{$_[0]}; my ($parameter, $section); my $count; print "\@subheading ".$args{'function'}."\n"; print "\@anchor{".$args{'function'}."}\n"; print "\@deftypefun {" . $args{'functiontype'} . "} "; print "{".$args{'function'}."} "; print "("; $count = 0; foreach $parameter (@{$args{'parameterlist'}}) { print $args{'parametertypes'}{$parameter}." \@var{".$parameter."}"; if ($count != $#{$args{'parameterlist'}}) { $count++; print ", "; } } print ")\n"; foreach $parameter (@{$args{'parameterlist'}}) { if ($args{'parameters'}{$parameter}) { print "\@var{".$parameter."}: "; output_highlight($args{'parameters'}{$parameter}); print "\n"; } } foreach $section (@{$args{'sectionlist'}}) { $section =~ s/\@//g; print "\n\@strong{$section:} " if $section ne $section_default; $args{'sections'}{$section} =~ s:([{}]):\@$1:gs; output_highlight($args{'sections'}{$section}); } print "\@end deftypefun\n\n"; } sub output_enum_texinfo { my %args = %{$_[0]}; my ($parameter, $section); my $count; my $name = $args{'enum'}; my $param; my $param2; my $sec; my $check; my $type; print "\n\@c $name\n"; print "\@table \@code\n"; $check=0; foreach $parameter (@{$args{'parameterlist'}}) { $param1 = $parameter; $param1 =~ s/_/_\@-/g; $check = 1; print "\@item ".$param1."\n"; # print "\n"; $param2 = $args{'parameters'}{$parameter}; $out = just_highlight($param2); chomp $out; print $out . "\n"; } print "\@end table\n"; } # output in html sub output_html { my %args = %{$_[0]}; my ($parameter, $section); my $count; print "\n\n 

Function

\n"; print "".$args{'functiontype'}."\n"; print "".$args{'function'}."\n"; print "("; $count = 0; foreach $parameter (@{$args{'parameterlist'}}) { print "".$args{'parametertypes'}{$parameter}." ".$parameter."\n"; if ($count != $#{$args{'parameterlist'}}) { $count++; print ", "; } } print ")\n"; print "

Arguments

\n"; print "
\n"; foreach $parameter (@{$args{'parameterlist'}}) { print "
".$args{'parametertypes'}{$parameter}." ".$parameter."\n"; print "
"; output_highlight($args{'parameters'}{$parameter}); } print "
\n"; foreach $section (@{$args{'sectionlist'}}) { print "

$section

\n"; print "
    \n"; output_highlight($args{'sections'}{$section}); print "
\n"; } print "
\n"; } # output in tex sub output_tex { my %args = %{$_[0]}; my ($parameter, $section); my $count; my $func = $args{'function'}; my $param; my $param2; my $sec; my $check; my $type; $func =~ s/_/\\_/g; print "\n\n\\begin{function}\n"; print "\\functionTitle{". $func . "}\n"; print "\\index{". $func . "}\n"; $type = $args{'functiontype'}; $type =~ s/_/\\_/g; print "{\\it ".$type."}\n"; print "{\\bf ".$func."}\n"; print "("; $count = 0; foreach $parameter (@{$args{'parameterlist'}}) { $param = $args{'parametertypes'}{$parameter}; $param2 = $parameter; $param =~ s/_/\\_/g; $param2 =~ s/_/\\_/g; print "{\\it ".$param."} {\\bf ".$param2."}"; if ($count != $#{$args{'parameterlist'}}) { $count++; print ", "; } } print ")\n"; print "\n\\begin{functionArguments}\n"; $check=0; foreach $parameter (@{$args{'parameterlist'}}) { $param1 = $args{'parametertypes'}{$parameter}; $param1 =~ s/_/\\_/g; $param2 = $parameter; $param2 =~ s/_/\\_/g; $check = 1; print "\\functionArgument {\\it ".$param1."} {\\bf ".$param2."}: \n"; # print "\n"; $param3 = $args{'parameters'}{$parameter}; $param3 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g; $param3 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g; $out = just_highlight($param3); $out =~ s/_/\\_/g; print $out; } if ($check==0) { print "\\item void\n"; } print "\\end{functionArguments}\n"; foreach $section (@{$args{'sectionlist'}}) { $sec = $section; $sec =~ s/_/\\_/g; $sec =~ s/#([a-zA-Z\_]+)/{\\it $1}/g; print "\n\\begin{function${sec}}\n"; $out = $args{'sections'}{$section}; $out =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g; $out =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g; $out =~ s/\@([a-zA-Z\_]+)/{\\bf $1}/g; $out =~ s/_/\\_\\-/g; $out =~ s/\$/\\\$/g; $out =~ s/#/\\#/g; $out =~ s/\n\n/\n/g; $out =~ s/\\:/:/g; $out =~ s/\-\>/\$\\rightarrow\$/g; $out =~ s/([0-9]+)\^([0-9]+)/\$\{$1\}\^\{$2\}\$/g; print $out; print "\\end{function${sec}}\n"; } print "\\end{function}\n\n"; } sub output_enum_tex { my %args = %{$_[0]}; my ($parameter, $section); my $count; my $name = $args{'enum'}; my $param; my $param2; my $sec; my $check; my $type; print "\n\n\\begin{enum}\n"; $name =~ s/_/\\_/g; print "\\enumTitle{". $name . "}\n"; print "\\index{". $name . "}\n"; print "\n\\begin{enumList}\n"; $check=0; foreach $parameter (@{$args{'parameterlist'}}) { $param1 = $parameter; $param1 =~ s/_/\\_\\-/g; $check = 1; print "\\enumElement{".$param1."}{"; # print "\n"; $param2 = $args{'parameters'}{$parameter}; $param2 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g; $param2 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g; $out = just_highlight($param2); $out =~ s/_/\\_/g; chomp $out; print $out . "}\n"; } print "\\end{enumList}\n"; print "\\end{enum}\n\n"; } # output in sgml DocBook sub output_sgml { my %args = %{$_[0]}; my ($parameter, $section); my $count; my $id; $id = $args{'module'}."-".$args{'function'}; $id =~ s/[^A-Za-z0-9]/-/g; print "\n"; print "\n"; print "".$args{'function'}."\n"; print "\n"; print "\n"; print " ".$args{'function'}."\n"; print " \n"; print " ".$args{'purpose'}."\n"; print " \n"; print "\n"; print "\n"; print " Synopsis\n"; print " \n"; print " ".$args{'functiontype'}." "; print "".$args{'function'}." "; print "\n"; # print "\n"; # print " Synopsis\n"; # print " \n"; # print " ".$args{'functiontype'}." "; # print "".$args{'function'}." "; # print "\n"; $count = 0; if ($#{$args{'parameterlist'}} >= 0) { foreach $parameter (@{$args{'parameterlist'}}) { print " ".$args{'parametertypes'}{$parameter}; print " $parameter\n"; } } else { print " \n"; } print " \n"; print "\n"; # print "\n"; # print parameters print "\n Arguments\n"; # print "\nArguments\n"; if ($#{$args{'parameterlist'}} >= 0) { print " \n"; foreach $parameter (@{$args{'parameterlist'}}) { print " \n $parameter\n"; print " \n \n"; $lineprefix=" "; output_highlight($args{'parameters'}{$parameter}); print " \n \n \n"; } print " \n"; } else { print " \n None\n \n"; } print "\n"; # print out each section $lineprefix=" "; foreach $section (@{$args{'sectionlist'}}) { print "\n $section\n \n"; # print "\n$section\n"; if ($section =~ m/EXAMPLE/i) { print "\n"; } output_highlight($args{'sections'}{$section}); # print ""; if ($section =~ m/EXAMPLE/i) { print "\n"; } print " \n\n"; } print "\n\n"; } ## # output in man sub output_man { my %args = %{$_[0]}; my ($parameter, $section); my $count; print ".\\\" DO NOT MODIFY THIS FILE! It was generated by gdoc.\n"; print ".TH \"$args{'function'}\" 3 \"$args{'sourceversion'}\" \"". $args{'module'} . "\" \"". $args{'module'} . "\"\n"; print ".SH NAME\n"; print $args{'function'}; if ($args{'purpose'}) { print " \\- " . $args{'purpose'} . "\n"; } else { print " \\- API function\n"; } print ".SH SYNOPSIS\n"; print ".B #include <". $args{'include'} . ">\n" if $args{'include'}; print ".B #include <". lc((split /_/, $args{'function'})[0]) . ".h>\n" if $args{'includefuncprefix'}; print ".sp\n"; print ".BI \"".$args{'functiontype'}." ".$args{'function'}."("; $count = 0; foreach $parameter (@{$args{'parameterlist'}}) { print $args{'parametertypes'}{$parameter}." \" ".$parameter." \""; if ($count != $#{$args{'parameterlist'}}) { $count++; print ", "; } } print ");\"\n"; print ".SH ARGUMENTS\n"; foreach $parameter (@{$args{'parameterlist'}}) { print ".IP \"".$args{'parametertypes'}{$parameter}." ".$parameter."\" 12\n"; $param = $args{'parameters'}{$parameter}; $param =~ s/-/\\-/g; output_highlight($param); } foreach $section (@{$args{'sectionlist'}}) { print ".SH \"" . uc($section) . "\"\n"; $sec = $args{'sections'}{$section}; $sec =~ s/-/\\-/g; output_highlight($sec); } if ($args{'bugsto'}) { print ".SH \"REPORTING BUGS\"\n"; print "Report bugs to <". $args{'bugsto'} . ">.\n"; print ".br\n"; print "General guidelines for reporting bugs: http://www.gnu.org/gethelp/\n"; print ".br\n"; if ($args{'pkgname'}) { print $args{'pkgname'} . " home page: " . "http://www.gnu.org/software/" . $args{'module'} . "/\n"; } print "\n"; } if ($args{'copyright'}) { print ".SH COPYRIGHT\n"; print "Copyright \\(co ". $args{'copyright'} . ".\n"; if ($args{'verbatimcopying'}) { print ".br\n"; print "Copying and distribution of this file, with or without modification,\n"; print "are permitted in any medium without royalty provided the copyright\n"; print "notice and this notice are preserved.\n"; } } if ($args{'seeinfo'}) { print ".SH \"SEE ALSO\"\n"; print "The full documentation for\n"; print ".B " . $args{'module'} . "\n"; print "is maintained as a Texinfo manual. If the\n"; print ".B info\n"; print "and\n"; print ".B " . $args{'module'} . "\n"; print "programs are properly installed at your site, the command\n"; print ".IP\n"; print ".B info " . $args{'seeinfo'} . "\n"; print ".PP\n"; print "should give you access to the complete manual.\n"; print "As an alternative you may obtain the manual from:\n"; print ".IP\n"; print ".B http://www.gnu.org/software/" . $args{'module'} . "/manual/\n"; print ".PP\n"; } } sub output_listfunc { my %args = %{$_[0]}; print $args{'function'} . "\n"; } ## # output in text sub output_text { my %args = %{$_[0]}; my ($parameter, $section); print "Function = ".$args{'function'}."\n"; print " return type: ".$args{'functiontype'}."\n\n"; foreach $parameter (@{$args{'parameterlist'}}) { print " ".$args{'parametertypes'}{$parameter}." ".$parameter."\n"; print " -> ".$args{'parameters'}{$parameter}."\n"; } foreach $section (@{$args{'sectionlist'}}) { print " $section:\n"; print " -> "; output_highlight($args{'sections'}{$section}); } } ## # generic output function - calls the right one based # on current output mode. sub output_function { # output_html(@_); eval "output_".$output_mode."(\@_);"; } sub output_enum { eval "output_enum_".$output_mode."(\@_);"; } ## # takes a function prototype and spits out all the details # stored in the global arrays/hsahes. sub dump_function { my $prototype = shift @_; if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || $prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || $prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/) { $return_type = $1; $function_name = $2; $args = $3; # print STDERR "ARGS = '$args'\n"; foreach $arg (split ',', $args) { # strip leading/trailing spaces $arg =~ s/^\s*//; $arg =~ s/\s*$//; # print STDERR "SCAN ARG: '$arg'\n"; @args = split('\s', $arg); # print STDERR " -> @args\n"; $param = pop @args; # print STDERR " -> @args\n"; if ($param =~ m/^(\*+)(.*)/) { $param = $2; push @args, $1; } if ($param =~ m/^(.*)(\[\])$/) { $param = $1; push @args, $2; } # print STDERR " :> @args\n"; $type = join " ", @args; if ((!defined($parameters{$param}) || $parameters{$param} eq "") && $param ne "void") { $parameters{$param} = "-- undescribed --"; print STDERR "warning: $lineno: Function parameter '$param' not described in '$function_name'\n"; } push @parameterlist, $param; $parametertypes{$param} = $type; # print STDERR "param = '$param', type = '$type'\n"; } } else { print STDERR "warning: $lineno: Cannot understand prototype: '$prototype'\n"; return; } if ($function_only==0 || defined($function_table{$function_name})) { output_function({'function' => $function_name, 'module' => $modulename, 'sourceversion' => $sourceversion, 'include' => $include, 'includefuncprefix' => $includefuncprefix, 'bugsto' => $bugsto, 'pkgname' => $pkgname, 'copyright' => $copyright, 'verbatimcopying' => $verbatimcopying, 'seeinfo' => $seeinfo, 'functiontype' => $return_type, 'parameterlist' => \@parameterlist, 'parameters' => \%parameters, 'parametertypes' => \%parametertypes, 'sectionlist' => \@sectionlist, 'sections' => \%sections, 'purpose' => $function_purpose }); } } sub dump_enum { my $prototype = shift @_; if (($prototype =~ m/^\s*typedef\s+enum\s*[a-zA-Z0-9_~:]*\s*\{([\-a-zA-Z0-9_~=,:\s\(\)\<]+)\s*\}\s*([a-zA-Z0-9_]+);.*/)) { # || $prototype =~ m/^\s*enum\s+([a-zA-Z0-9_~:]+).*/) { $args = $1; $name = $2; foreach $arg (split ',', $args) { # strip leading/trailing spaces $arg =~ s/^\s*//; $arg =~ s/\s*$//; $arg =~ s/([A-Za-z0-9_]+)\s*=.*/$1/g; # print STDERR "SCAN ARG: '$arg'\n"; next if $arg eq ''; if ((!defined($parameters{$arg}) || $parameters{$arg} eq "")) { $parameters{$arg} = "-- undescribed --"; print STDERR "warning: $lineno: Enumeration parameter '$arg' not described in '$name'\n"; } push @parameterlist, $arg; # print STDERR "param = '$arg'\n"; } } else { # print STDERR "warning: $lineno: Cannot understand enumeration: '$prototype'\n"; return; } output_enum({'enum' => $name, 'module' => $modulename, 'sourceversion' => $sourceversion, 'include' => $include, 'includefuncprefix' => $includefuncprefix, 'bugsto' => $bugsto, 'pkgname' => $pkgname, 'copyright' => $copyright, 'verbatimcopying' => $verbatimcopying, 'seeinfo' => $seeinfo, 'functiontype' => $return_type, 'parameterlist' => \@parameterlist, 'parameters' => \%parameters, 'parametertypes' => \%parametertypes, 'sectionlist' => \@sectionlist, 'sections' => \%sections, 'purpose' => $function_purpose }); } ###################################################################### # main # states # 0 - normal code # 1 - looking for function name # 2 - scanning field start. # 3 - scanning prototype. $state = 0; $section = ""; $doc_special = "\@\%\$\#"; $doc_start = "^/\\*\\*\$"; $doc_end = "\\*/"; $doc_com = "\\s*\\*\\s*"; $doc_func = $doc_com."(\\w+):?"; $doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w]+):\\s*(.*)"; $doc_content = $doc_com."(.*)"; %constants = (); %parameters = (); @parameterlist = (); %sections = (); @sectionlist = (); $contents = ""; $section_default = "Description"; # default section $section = $section_default; $enum = 0; $lineno = 0; foreach $file (@ARGV) { if (!open(IN,"<$file")) { print STDERR "Error: Cannot open file $file\n"; next; } while ($line = ) { $lineno++; if ($state == 0) { if ($line =~ /$doc_start/o) { $state = 1; # next line is always the function name # print STDERR "XXX: start of doc comment\n"; } } elsif ($state == 1) { # this line is the function name (always) if ($line =~ /$doc_func/o) { $function = $1; $state = 2; # print STDERR "XXX: start of doc comment, looking for prototype\n"; if ($line =~ /-\s*(.*)/) { $function_purpose = $1; } else { $function_purpose = ""; } if ($verbose) { print STDERR "Info($lineno): Scanning doc for $function\n"; } } else { print STDERR "warning: $lineno: Cannot understand $_ on line $lineno", " - I thought it was a doc line\n"; $state = 0; } } elsif ($state == 2) { # look for head: lines, and include content if ($line =~ /$doc_sect/o) { $newsection = $1; $newcontents = $2; if ($contents ne '') { dump_section($section, $contents); $section = $section_default; } $contents = $newcontents; if ($contents ne "") { $contents .= "\n"; } $section = $newsection; } elsif ($line =~ /$doc_end/) { if ($contents ne "") { dump_section($section, $contents); $section = $section_default; $contents = ""; } $prototype = ''; $state = 3; } elsif ($line =~ /$doc_content/) { # miguel-style comment kludge, look for blank lines after # @parameter line to signify start of description if ($1 eq '' && $section =~ m/^@/) { dump_section($section, $contents); $section = $section_default; $contents = ""; } else { $contents .= $1."\n"; } } else { # i dont know - bad line? ignore. print STDERR "warning: $lineno: Bad line: $_"; } } elsif ($state == 3) { # scanning for function { (end of prototype) if ($line =~ /([a-zA-Z\s]+)enum(.*)$/) { $enum = 1; } if ($line =~ m#\s*/\*\s+MACDOC\s*#io) { # do nothing } elsif ($enum == 1 && $line =~ /(\s*\{).*/) { $prototype = "typedef enum {"; } elsif ($line =~ /([^\{]*)/) { $prototype .= $1; } if ($enum == 0 && $line =~ /;/) { $prototype =~ s@/\*.*?\*/@@gos; # strip comments. $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's. $prototype =~ s@^ +@@gos; # strip leading spaces dump_function($prototype); $function = ""; %constants = (); %parameters = (); %parametertypes = (); @parameterlist = (); %sections = (); @sectionlist = (); $prototype = ""; $enum = 0; $state = 0; } elsif ($enum == 1 && $line =~ /\}/) { $prototype =~ s@/\*.*?\*/@@gos; # strip comments. $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's. $prototype =~ s@^ +@@gos; # strip leading spaces dump_enum($prototype); $function = ""; %constants = (); %parameters = (); %parametertypes = (); @parameterlist = (); %sections = (); @sectionlist = (); $prototype = ""; $enum = 0; $state = 0; } } } } libtasn1-4.16.0/doc/Makefile.in0000644000000000000000000013664113615375040013037 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ $(top_srcdir)/m4/ax_am_macros_static.m4 \ $(top_srcdir)/m4/ax_check_gnu_make.m4 \ $(top_srcdir)/m4/ax_code_coverage.m4 \ $(top_srcdir)/m4/ax_file_escapes.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4-gl/00gnulib.m4 \ $(top_srcdir)/m4-gl/__inline.m4 \ $(top_srcdir)/m4-gl/absolute-header.m4 \ $(top_srcdir)/m4-gl/extensions.m4 \ $(top_srcdir)/m4-gl/extern-inline.m4 \ $(top_srcdir)/m4-gl/gnulib-common.m4 \ $(top_srcdir)/m4-gl/gnulib-comp.m4 \ $(top_srcdir)/m4-gl/include_next.m4 \ $(top_srcdir)/m4-gl/ld-version-script.m4 \ $(top_srcdir)/m4-gl/limits-h.m4 \ $(top_srcdir)/m4-gl/longlong.m4 \ $(top_srcdir)/m4-gl/manywarnings.m4 \ $(top_srcdir)/m4-gl/minmax.m4 $(top_srcdir)/m4-gl/multiarch.m4 \ $(top_srcdir)/m4-gl/off_t.m4 $(top_srcdir)/m4-gl/ssize_t.m4 \ $(top_srcdir)/m4-gl/stdbool.m4 $(top_srcdir)/m4-gl/stddef_h.m4 \ $(top_srcdir)/m4-gl/stdint.m4 $(top_srcdir)/m4-gl/string_h.m4 \ $(top_srcdir)/m4-gl/strverscmp.m4 \ $(top_srcdir)/m4-gl/sys_types_h.m4 \ $(top_srcdir)/m4-gl/valgrind-tests.m4 \ $(top_srcdir)/m4-gl/visibility.m4 \ $(top_srcdir)/m4-gl/warn-on-use.m4 \ $(top_srcdir)/m4-gl/warnings.m4 $(top_srcdir)/m4-gl/wchar_t.m4 \ $(top_srcdir)/m4-gl/wint_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \ $(srcdir)/stamp-vti $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/libtasn1.info TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux DVIS = libtasn1.dvi PDFS = libtasn1.pdf PSS = libtasn1.ps HTMLS = libtasn1.html TEXINFOS = libtasn1.texi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html DVIPS = dvips RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(man3dir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 man3dir = $(mandir)/man3 NROFF = nroff MANS = $(dist_man_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = reference am__DIST_COMMON = $(dist_man_MANS) $(libtasn1_TEXINFOS) \ $(srcdir)/Makefile.in $(top_srcdir)/build-aux/mdate-sh \ $(top_srcdir)/build-aux/texinfo.tex COPYING COPYING.LESSER \ TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASN1_VERSION_MAJOR = @ASN1_VERSION_MAJOR@ ASN1_VERSION_MINOR = @ASN1_VERSION_MINOR@ ASN1_VERSION_NUMBER = @ASN1_VERSION_NUMBER@ ASN1_VERSION_PATCH = @ASN1_VERSION_PATCH@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FUZZ_LIBS = @FUZZ_LIBS@ GCOV = @GCOV@ GENHTML = @GENHTML@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTOOL = @LIBTOOL@ LIB_FUZZING_ENGINE = @LIB_FUZZING_ENGINE@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ ifGNUmake = @ifGNUmake@ ifnGNUmake = @ifnGNUmake@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @ENABLE_GTK_DOC_TRUE@SUBDIRS = reference EXTRA_DIST = gdoc TODO libtasn1.html libtasn1.ps libtasn1.pdf stamp_docs \ COPYING COPYING.LESSER info_TEXINFOS = libtasn1.texi libtasn1_TEXINFOS = fdl-1.3.texi texinfo.css $(gdoc_TEXINFOS) AM_MAKEINFOFLAGS = -I $(top_builddir)/doc TEXI2DVI = texi2dvi $(AM_MAKEINFOFLAGS) AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) \ --no-split --number-sections --css-include=texinfo.css dist_man_MANS = $(gdoc_MANS) asn1Parser.1 asn1Coding.1 asn1Decoding.1 HELP2MAN_OPTS = --info-page libtasn1 gdoc_MANS = man/asn1_get_length_der.3 man/asn1_get_tag_der.3 \ man/asn1_get_length_ber.3 man/asn1_get_octet_der.3 \ man/asn1_get_object_id_der.3 man/asn1_get_bit_der.3 \ man/asn1_der_decoding2.3 man/asn1_der_decoding.3 \ man/asn1_der_decoding_element.3 \ man/asn1_der_decoding_startEnd.3 \ man/asn1_expand_any_defined_by.3 \ man/asn1_expand_octet_string.3 man/asn1_decode_simple_der.3 \ man/asn1_decode_simple_ber.3 man/asn1_perror.3 \ man/asn1_strerror.3 man/asn1_find_node.3 man/asn1_length_der.3 \ man/asn1_octet_der.3 man/asn1_encode_simple_der.3 \ man/asn1_object_id_der.3 man/asn1_bit_der.3 \ man/asn1_der_coding.3 man/asn1_write_value.3 \ man/asn1_read_value.3 man/asn1_read_value_type.3 \ man/asn1_read_tag.3 man/asn1_read_node_value.3 \ man/asn1_array2tree.3 man/asn1_delete_structure.3 \ man/asn1_delete_structure2.3 man/asn1_delete_element.3 \ man/asn1_create_element.3 man/asn1_print_structure.3 \ man/asn1_number_of_elements.3 \ man/asn1_find_structure_from_oid.3 man/asn1_copy_node.3 \ man/asn1_dup_node.3 man/asn1_parser2tree.3 \ man/asn1_parser2array.3 man/asn1_check_version.3 gdoc_TEXINFOS = texi/decoding.c.texi texi/errors.c.texi \ texi/parser_aux.c.texi texi/coding.c.texi texi/element.c.texi \ texi/gstr.c.texi texi/structure.c.texi texi/ASN1.c.texi \ texi/version.c.texi texi/asn1_get_length_der.texi \ texi/asn1_get_tag_der.texi texi/asn1_get_length_ber.texi \ texi/asn1_get_octet_der.texi texi/asn1_get_object_id_der.texi \ texi/asn1_get_bit_der.texi texi/asn1_der_decoding2.texi \ texi/asn1_der_decoding.texi \ texi/asn1_der_decoding_element.texi \ texi/asn1_der_decoding_startEnd.texi \ texi/asn1_expand_any_defined_by.texi \ texi/asn1_expand_octet_string.texi \ texi/asn1_decode_simple_der.texi \ texi/asn1_decode_simple_ber.texi texi/asn1_perror.texi \ texi/asn1_strerror.texi texi/asn1_find_node.texi \ texi/asn1_length_der.texi texi/asn1_octet_der.texi \ texi/asn1_encode_simple_der.texi texi/asn1_object_id_der.texi \ texi/asn1_bit_der.texi texi/asn1_der_coding.texi \ texi/asn1_write_value.texi texi/asn1_read_value.texi \ texi/asn1_read_value_type.texi texi/asn1_read_tag.texi \ texi/asn1_read_node_value.texi texi/asn1_array2tree.texi \ texi/asn1_delete_structure.texi \ texi/asn1_delete_structure2.texi texi/asn1_delete_element.texi \ texi/asn1_create_element.texi texi/asn1_print_structure.texi \ texi/asn1_number_of_elements.texi \ texi/asn1_find_structure_from_oid.texi \ texi/asn1_copy_node.texi texi/asn1_dup_node.texi \ texi/asn1_parser2tree.texi texi/asn1_parser2array.texi \ texi/asn1_check_version.texi GDOC_SRC = $(top_srcdir)/lib/decoding.c $(top_srcdir)/lib/errors.c \ $(top_srcdir)/lib/parser_aux.c $(top_srcdir)/lib/coding.c \ $(top_srcdir)/lib/element.c $(top_srcdir)/lib/gstr.c \ $(top_srcdir)/lib/structure.c $(top_builddir)/lib/ASN1.c \ $(top_srcdir)/lib/version.c all: all-recursive .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< .texi.html: $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi $(srcdir)/libtasn1.info: libtasn1.texi $(srcdir)/version.texi $(libtasn1_TEXINFOS) libtasn1.dvi: libtasn1.texi $(srcdir)/version.texi $(libtasn1_TEXINFOS) libtasn1.pdf: libtasn1.texi $(srcdir)/version.texi $(libtasn1_TEXINFOS) libtasn1.html: libtasn1.texi $(srcdir)/version.texi $(libtasn1_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: libtasn1.texi $(top_srcdir)/configure @(dir=.; test -f ./libtasn1.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/libtasn1.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi" && \ cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp* $(srcdir)/version.texi.tmp* maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf libtasn1.t2d libtasn1.t2p clean-aminfo: -test -z "libtasn1.dvi libtasn1.pdf libtasn1.ps libtasn1.html" \ || rm -rf libtasn1.dvi libtasn1.pdf libtasn1.ps libtasn1.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man3: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man3dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.3[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ done; } uninstall-man3: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man3dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: check-recursive all-am: Makefile $(INFO_DEPS) $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-aminfo clean-generic clean-libtool clean-local \ mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: $(DVIS) html: html-recursive html-am: $(HTMLS) info: info-recursive info-am: $(INFO_DEPS) install-data-am: install-info-am install-man install-dvi: install-dvi-recursive install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-recursive install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-recursive install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man1 install-man3 install-pdf: install-pdf-recursive install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-recursive install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ mostlyclean-libtool mostlyclean-vti pdf: pdf-recursive pdf-am: $(PDFS) ps: ps-recursive ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-man uninstall-pdf-am uninstall-ps-am uninstall-man: uninstall-man1 uninstall-man3 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-aminfo clean-generic clean-libtool \ clean-local cscopelist-am ctags ctags-am dist-info distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-man3 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic \ maintainer-clean-vti mostlyclean mostlyclean-aminfo \ mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-man uninstall-man1 uninstall-man3 uninstall-pdf-am \ uninstall-ps-am .PRECIOUS: Makefile asn1Parser.1: $(top_srcdir)/src/asn1Parser.c $(top_srcdir)/configure.ac $(HELP2MAN) $(HELP2MAN_OPTS) \ --name="ASN.1 syntax tree generator for libtasn1" \ --output=$@ $(top_builddir)/src/asn1Parser$(EXEEXT) asn1Coding.1: $(top_srcdir)/src/asn1Coding.c $(top_srcdir)/configure.ac $(HELP2MAN) $(HELP2MAN_OPTS) \ --name="ASN.1 DER encoder" \ --output=$@ $(top_builddir)/src/asn1Coding$(EXEEXT) asn1Decoding.1: $(top_srcdir)/src/asn1Decoding.c $(top_srcdir)/configure.ac $(HELP2MAN) $(HELP2MAN_OPTS) \ --name="ASN.1 DER decoder" \ --output=$@ $(top_builddir)/src/asn1Decoding$(EXEEXT) compare-makefile: @MANS=""; \ TEXINFOS=""; \ for i in $(GDOC_SRC); do \ BASE=`basename $$i`; \ TEXINFOS="$$TEXINFOS\ngdoc_TEXINFOS += texi/$$BASE.texi"; \ done; \ FUNCS=`$(srcdir)/gdoc -listfunc $(GDOC_SRC)`; \ for i in $$FUNCS; do \ MANS="$$MANS\ngdoc_MANS += man/$$i.3"; \ TEXINFOS="$$TEXINFOS\ngdoc_TEXINFOS += texi/$$i.texi"; \ done; \ grep -v -e '^gdoc_MANS += ' -e '^gdoc_TEXINFOS += ' Makefile.am | \ perl -p -e "s,^gdoc_MANS =,gdoc_MANS =$$MANS,;" | \ perl -p -e "s,^gdoc_TEXINFOS =,gdoc_TEXINFOS =$$TEXINFOS,;" \ > tmp-$@; diff -u $(srcdir)/Makefile.am tmp-$@ rm -f tmp-$@ $(gdoc_MANS) $(gdoc_TEXINFOS): stamp_docs clean-local: -rm -f stamp_docs stamp_docs: $(mkdir_p) man texi; \ for i in `$(srcdir)/gdoc -listfunc $(GDOC_SRC)`; do \ echo -n "Creating documentation for $$i... " && \ $(srcdir)/gdoc -man \ -module $(PACKAGE) \ -pkg-name "$(PACKAGE_NAME)" \ -sourceversion $(VERSION) \ -include libtasn1.h \ -seeinfo $(PACKAGE) -verbatimcopying \ -copyright "2006-2015 Free Software Foundation, Inc." \ -function $$i \ $(GDOC_SRC) > man/$$i.3 && \ $(srcdir)/gdoc -texinfo -function $$i \ $(GDOC_SRC) > texi/$$i.texi && \ echo "ok"; \ done; \ for i in $(GDOC_SRC); do \ BASE=`basename $$i`; \ echo -n "Creating documentation for $$i... " && \ $(srcdir)/gdoc -texinfo $$i > texi/$$BASE.texi && \ echo "ok"; \ done touch $@ .PHONY: compare-makefile # 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: libtasn1-4.16.0/doc/version.texi0000644000000000000000000000014413615374552013345 00000000000000@set UPDATED 3 January 2020 @set UPDATED-MONTH January 2020 @set EDITION 4.16.0 @set VERSION 4.16.0 libtasn1-4.16.0/doc/COPYING.LESSER0000644000000000000000000006364213514140427013016 00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libtasn1-4.16.0/doc/texi/0000755000000000000000000000000013615400132011777 500000000000000libtasn1-4.16.0/doc/texi/asn1_get_object_id_der.texi0000644000000000000000000000134513615374717017175 00000000000000@subheading asn1_get_object_id_der @anchor{asn1_get_object_id_der} @deftypefun {int} {asn1_get_object_id_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, char * @var{str}, int @var{str_size}) @var{der}: DER data to decode containing the OBJECT IDENTIFIER @var{der_len}: Length of DER data to decode. @var{ret_len}: Output variable containing the length of the DER data. @var{str}: Pre-allocated output buffer to put the textual object id in. @var{str_size}: Length of pre-allocated output buffer. Converts a DER encoded object identifier to its textual form. This function expects the DER object identifier without the tag. @strong{Returns:} @code{ASN1_SUCCESS} on success, or an error. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_find_structure_from_oid.texi0000644000000000000000000000105013615374720020463 00000000000000@subheading asn1_find_structure_from_oid @anchor{asn1_find_structure_from_oid} @deftypefun {const char *} {asn1_find_structure_from_oid} (asn1_node_const @var{definitions}, const char * @var{oidValue}) @var{definitions}: ASN1 definitions @var{oidValue}: value of the OID to search (e.g. "1.2.3.4"). Search the structure that is defined just after an OID definition. @strong{Returns:} @code{NULL} when @code{oidValue} not found, otherwise the pointer to a constant string that contains the element name defined just after the OID. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_encode_simple_der.texi0000644000000000000000000000163113615374720017212 00000000000000@subheading asn1_encode_simple_der @anchor{asn1_encode_simple_der} @deftypefun {int} {asn1_encode_simple_der} (unsigned int @var{etype}, const unsigned char * @var{str}, unsigned int @var{str_len}, unsigned char * @var{tl}, unsigned int * @var{tl_len}) @var{etype}: The type of the string to be encoded (ASN1_ETYPE_) @var{str}: the string data. @var{str_len}: the string length @var{tl}: the encoded tag and length @var{tl_len}: the bytes of the @code{tl} field Creates the DER encoding for various simple ASN.1 types like strings etc. It stores the tag and length in @code{tl} , which should have space for at least @code{ASN1_MAX_TL_SIZE} bytes. Initially @code{tl_len} should contain the size of @code{tl} . The complete DER encoding should consist of the value in @code{tl} appended with the provided @code{str} . @strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. @end deftypefun libtasn1-4.16.0/doc/texi/ASN1.c.texi0000644000000000000000000000471513615374721013562 00000000000000@subheading asn1_parser2tree @anchor{asn1_parser2tree} @deftypefun {int} {asn1_parser2tree} (const char * @var{file}, asn1_node * @var{definitions}, char * @var{error_desc}) @var{file}: specify the path and the name of file that contains ASN.1 declarations. @var{definitions}: return the pointer to the structure created from "file" ASN.1 declarations. @var{error_desc}: return the error description or an empty string if success. Function used to start the parse algorithm. Creates the structures needed to manage the definitions included in @code{file} file. @strong{Returns:} @code{ASN1_SUCCESS} if the file has a correct syntax and every identifier is known, @code{ASN1_ELEMENT_NOT_EMPTY} if @code{definitions} not @code{NULL} , @code{ASN1_FILE_NOT_FOUND} if an error occurred while opening @code{file} , @code{ASN1_SYNTAX_ERROR} if the syntax is not correct, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an identifier that is not defined, @code{ASN1_NAME_TOO_LONG} if in the file there is an identifier with more than @code{ASN1_MAX_NAME_SIZE} characters. @end deftypefun @subheading asn1_parser2array @anchor{asn1_parser2array} @deftypefun {int} {asn1_parser2array} (const char * @var{inputFileName}, const char * @var{outputFileName}, const char * @var{vectorName}, char * @var{error_desc}) @var{inputFileName}: specify the path and the name of file that contains ASN.1 declarations. @var{outputFileName}: specify the path and the name of file that will contain the C vector definition. @var{vectorName}: specify the name of the C vector. @var{error_desc}: return the error description or an empty string if success. Function that generates a C structure from an ASN1 file. Creates a file containing a C vector to use to manage the definitions included in @code{inputFileName} file. If @code{inputFileName} is "/aa/bb/xx.yy" and @code{outputFileName} is @code{NULL} , the file created is "/aa/bb/xx_asn1_tab.c". If @code{vectorName} is @code{NULL} the vector name will be "xx_asn1_tab". @strong{Returns:} @code{ASN1_SUCCESS} if the file has a correct syntax and every identifier is known, @code{ASN1_FILE_NOT_FOUND} if an error occurred while opening @code{inputFileName} , @code{ASN1_SYNTAX_ERROR} if the syntax is not correct, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an identifier that is not defined, @code{ASN1_NAME_TOO_LONG} if in the file there is an identifier with more than @code{ASN1_MAX_NAME_SIZE} characters. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_parser2tree.texi0000644000000000000000000000212113615374720016003 00000000000000@subheading asn1_parser2tree @anchor{asn1_parser2tree} @deftypefun {int} {asn1_parser2tree} (const char * @var{file}, asn1_node * @var{definitions}, char * @var{error_desc}) @var{file}: specify the path and the name of file that contains ASN.1 declarations. @var{definitions}: return the pointer to the structure created from "file" ASN.1 declarations. @var{error_desc}: return the error description or an empty string if success. Function used to start the parse algorithm. Creates the structures needed to manage the definitions included in @code{file} file. @strong{Returns:} @code{ASN1_SUCCESS} if the file has a correct syntax and every identifier is known, @code{ASN1_ELEMENT_NOT_EMPTY} if @code{definitions} not @code{NULL} , @code{ASN1_FILE_NOT_FOUND} if an error occurred while opening @code{file} , @code{ASN1_SYNTAX_ERROR} if the syntax is not correct, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an identifier that is not defined, @code{ASN1_NAME_TOO_LONG} if in the file there is an identifier with more than @code{ASN1_MAX_NAME_SIZE} characters. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_create_element.texi0000644000000000000000000000127713615374720016534 00000000000000@subheading asn1_create_element @anchor{asn1_create_element} @deftypefun {int} {asn1_create_element} (asn1_node_const @var{definitions}, const char * @var{source_name}, asn1_node * @var{element}) @var{definitions}: pointer to the structure returned by "parser_asn1" function @var{source_name}: the name of the type of the new structure (must be inside p_structure). @var{element}: pointer to the structure created. Creates a structure of type @code{source_name} . Example using "pkix.asn": rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); @strong{Returns:} @code{ASN1_SUCCESS} if creation OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{source_name} is not known. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_get_length_der.texi0000644000000000000000000000112213615374717016525 00000000000000@subheading asn1_get_length_der @anchor{asn1_get_length_der} @deftypefun {long} {asn1_get_length_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{len}) @var{der}: DER data to decode. @var{der_len}: Length of DER data to decode. @var{len}: Output variable containing the length of the DER length field. Extract a length field from DER data. @strong{Returns:} Return the decoded length value, or -1 on indefinite length, or -2 when the value was too big to fit in a int, or -4 when the decoded length value plus @code{len} would exceed @code{der_len} . @end deftypefun libtasn1-4.16.0/doc/texi/asn1_der_decoding.texi0000644000000000000000000000175013615374717016170 00000000000000@subheading asn1_der_decoding @anchor{asn1_der_decoding} @deftypefun {int} {asn1_der_decoding} (asn1_node * @var{element}, const void * @var{ider}, int @var{ider_len}, char * @var{errorDescription}) @var{element}: pointer to an ASN1 structure. @var{ider}: vector that contains the DER encoding. @var{ider_len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1]. @var{errorDescription}: null-terminated string contains details when an error occurred. Fill the structure * @code{element} with values of a DER encoding string. The structure must just be created with function @code{asn1_create_element()} . Note that the * @code{element} variable is provided as a pointer for historical reasons. @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{ELEMENT} is @code{NULL} , and @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't match the structure name (* @code{ELEMENT} deleted). @end deftypefun libtasn1-4.16.0/doc/texi/structure.c.texi0000644000000000000000000001351113615374721015112 00000000000000@subheading asn1_array2tree @anchor{asn1_array2tree} @deftypefun {int} {asn1_array2tree} (const asn1_static_node * @var{array}, asn1_node * @var{definitions}, char * @var{errorDescription}) @var{array}: specify the array that contains ASN.1 declarations @var{definitions}: return the pointer to the structure created by *ARRAY ASN.1 declarations @var{errorDescription}: return the error description. Creates the structures needed to manage the ASN.1 definitions. @code{array} is a vector created by @code{asn1_parser2array()} . @strong{Returns:} @code{ASN1_SUCCESS} if structure was created correctly, @code{ASN1_ELEMENT_NOT_EMPTY} if * @code{definitions} not NULL, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an identifier that is not defined (see @code{errorDescription} for more information), @code{ASN1_ARRAY_ERROR} if the array pointed by @code{array} is wrong. @end deftypefun @subheading asn1_delete_structure @anchor{asn1_delete_structure} @deftypefun {int} {asn1_delete_structure} (asn1_node * @var{structure}) @var{structure}: pointer to the structure that you want to delete. Deletes the structure * @code{structure} . At the end, * @code{structure} is set to NULL. @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if * @code{structure} was NULL. @end deftypefun @subheading asn1_delete_structure2 @anchor{asn1_delete_structure2} @deftypefun {int} {asn1_delete_structure2} (asn1_node * @var{structure}, unsigned int @var{flags}) @var{structure}: pointer to the structure that you want to delete. @var{flags}: additional flags (see @code{ASN1_DELETE_FLAG} ) Deletes the structure * @code{structure} . At the end, * @code{structure} is set to NULL. @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if * @code{structure} was NULL. @end deftypefun @subheading asn1_delete_element @anchor{asn1_delete_element} @deftypefun {int} {asn1_delete_element} (asn1_node @var{structure}, const char * @var{element_name}) @var{structure}: pointer to the structure that contains the element you want to delete. @var{element_name}: element's name you want to delete. Deletes the element named * @code{element_name} inside * @code{structure} . @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if the @code{element_name} was not found. @end deftypefun @subheading asn1_create_element @anchor{asn1_create_element} @deftypefun {int} {asn1_create_element} (asn1_node_const @var{definitions}, const char * @var{source_name}, asn1_node * @var{element}) @var{definitions}: pointer to the structure returned by "parser_asn1" function @var{source_name}: the name of the type of the new structure (must be inside p_structure). @var{element}: pointer to the structure created. Creates a structure of type @code{source_name} . Example using "pkix.asn": rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); @strong{Returns:} @code{ASN1_SUCCESS} if creation OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{source_name} is not known. @end deftypefun @subheading asn1_print_structure @anchor{asn1_print_structure} @deftypefun {void} {asn1_print_structure} (FILE * @var{out}, asn1_node_const @var{structure}, const char * @var{name}, int @var{mode}) @var{out}: pointer to the output file (e.g. stdout). @var{structure}: pointer to the structure that you want to visit. @var{name}: an element of the structure @var{mode}: specify how much of the structure to print, can be @code{ASN1_PRINT_NAME} , @code{ASN1_PRINT_NAME_TYPE} , @code{ASN1_PRINT_NAME_TYPE_VALUE} , or @code{ASN1_PRINT_ALL} . Prints on the @code{out} file descriptor the structure's tree starting from the @code{name} element inside the structure @code{structure} . @end deftypefun @subheading asn1_number_of_elements @anchor{asn1_number_of_elements} @deftypefun {int} {asn1_number_of_elements} (asn1_node_const @var{element}, const char * @var{name}, int * @var{num}) @var{element}: pointer to the root of an ASN1 structure. @var{name}: the name of a sub-structure of ROOT. @var{num}: pointer to an integer where the result will be stored Counts the number of elements of a sub-structure called NAME with names equal to "?1","?2", ... @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not known, @code{ASN1_GENERIC_ERROR} if pointer @code{num} is @code{NULL} . @end deftypefun @subheading asn1_find_structure_from_oid @anchor{asn1_find_structure_from_oid} @deftypefun {const char *} {asn1_find_structure_from_oid} (asn1_node_const @var{definitions}, const char * @var{oidValue}) @var{definitions}: ASN1 definitions @var{oidValue}: value of the OID to search (e.g. "1.2.3.4"). Search the structure that is defined just after an OID definition. @strong{Returns:} @code{NULL} when @code{oidValue} not found, otherwise the pointer to a constant string that contains the element name defined just after the OID. @end deftypefun @subheading asn1_copy_node @anchor{asn1_copy_node} @deftypefun {int} {asn1_copy_node} (asn1_node @var{dst}, const char * @var{dst_name}, asn1_node_const @var{src}, const char * @var{src_name}) @var{dst}: Destination asn1 node. @var{dst_name}: Field name in destination node. @var{src}: Source asn1 node. @var{src_name}: Field name in source node. Create a deep copy of a asn1_node variable. That function requires @code{dst} to be expanded using @code{asn1_create_element()} . @strong{Returns:} Return @code{ASN1_SUCCESS} on success. @end deftypefun @subheading asn1_dup_node @anchor{asn1_dup_node} @deftypefun {asn1_node} {asn1_dup_node} (asn1_node_const @var{src}, const char * @var{src_name}) @var{src}: Source asn1 node. @var{src_name}: Field name in source node. Create a deep copy of a asn1_node variable. This function will return an exact copy of the provided structure. @strong{Returns:} Return @code{NULL} on failure. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_array2tree.texi0000644000000000000000000000161413615374720015633 00000000000000@subheading asn1_array2tree @anchor{asn1_array2tree} @deftypefun {int} {asn1_array2tree} (const asn1_static_node * @var{array}, asn1_node * @var{definitions}, char * @var{errorDescription}) @var{array}: specify the array that contains ASN.1 declarations @var{definitions}: return the pointer to the structure created by *ARRAY ASN.1 declarations @var{errorDescription}: return the error description. Creates the structures needed to manage the ASN.1 definitions. @code{array} is a vector created by @code{asn1_parser2array()} . @strong{Returns:} @code{ASN1_SUCCESS} if structure was created correctly, @code{ASN1_ELEMENT_NOT_EMPTY} if * @code{definitions} not NULL, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an identifier that is not defined (see @code{errorDescription} for more information), @code{ASN1_ARRAY_ERROR} if the array pointed by @code{array} is wrong. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_copy_node.texi0000644000000000000000000000105613615374720015532 00000000000000@subheading asn1_copy_node @anchor{asn1_copy_node} @deftypefun {int} {asn1_copy_node} (asn1_node @var{dst}, const char * @var{dst_name}, asn1_node_const @var{src}, const char * @var{src_name}) @var{dst}: Destination asn1 node. @var{dst_name}: Field name in destination node. @var{src}: Source asn1 node. @var{src_name}: Field name in source node. Create a deep copy of a asn1_node variable. That function requires @code{dst} to be expanded using @code{asn1_create_element()} . @strong{Returns:} Return @code{ASN1_SUCCESS} on success. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_decode_simple_der.texi0000644000000000000000000000127113615374717017206 00000000000000@subheading asn1_decode_simple_der @anchor{asn1_decode_simple_der} @deftypefun {int} {asn1_decode_simple_der} (unsigned int @var{etype}, const unsigned char * @var{der}, unsigned int @var{_der_len}, const unsigned char ** @var{str}, unsigned int * @var{str_len}) @var{etype}: The type of the string to be encoded (ASN1_ETYPE_) @var{der}: the encoded string @var{_der_len}: the bytes of the encoded string @var{str}: a pointer to the data @var{str_len}: the length of the data Decodes a simple DER encoded type (e.g. a string, which is not constructed). The output is a pointer inside the @code{der} . @strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_read_value.texi0000644000000000000000000000551013615374720015661 00000000000000@subheading asn1_read_value @anchor{asn1_read_value} @deftypefun {int} {asn1_read_value} (asn1_node_const @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len}) @var{root}: pointer to a structure. @var{name}: the name of the element inside a structure that you want to read. @var{ivalue}: vector that will contain the element's content, must be a pointer to memory cells already allocated (may be @code{NULL} ). @var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy holds the sizeof value. Returns the value of one element inside a structure. If an element is OPTIONAL and this returns @code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the @code{root} provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node. Note that there can be valid values with length zero. In these case this function will succeed and @code{len} will be zero. @strong{INTEGER:} VALUE will contain a two's complement form integer. integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , len=1. @strong{ENUMERATED:} As INTEGER (but only with not negative numbers). @strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6. OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1"). LEN = strlen(VALUE)+1 @strong{UTCTime:} VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". LEN=strlen(VALUE)+1. @strong{GeneralizedTime:} VALUE will be a null terminated string in the same format used to set the value. OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets. @strong{GeneralString:} VALUE will contain the generalstring and LEN will be the number of octets. BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits. @strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the alternative selected. @strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used. @strong{Returns:} @code{ASN1_SUCCESS} if value is returned, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, @code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough to store the result, and in this case @code{len} will contain the number of bytes needed. On the occasion that the stored data are of zero-length this function may return @code{ASN1_SUCCESS} even if the provided @code{len} is zero. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_delete_element.texi0000644000000000000000000000102113615374720016516 00000000000000@subheading asn1_delete_element @anchor{asn1_delete_element} @deftypefun {int} {asn1_delete_element} (asn1_node @var{structure}, const char * @var{element_name}) @var{structure}: pointer to the structure that contains the element you want to delete. @var{element_name}: element's name you want to delete. Deletes the element named * @code{element_name} inside * @code{structure} . @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if the @code{element_name} was not found. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_find_node.texi0000644000000000000000000000120713615374717015504 00000000000000@subheading asn1_find_node @anchor{asn1_find_node} @deftypefun {asn1_node} {asn1_find_node} (asn1_node_const @var{pointer}, const char * @var{name}) @var{pointer}: NODE_ASN element pointer. @var{name}: null terminated string with the element's name to find. Searches for an element called @code{name} starting from @code{pointer} . The name is composed by different identifiers separated by dots. When * @code{pointer} has a name, the first identifier must be the name of * @code{pointer} , otherwise it must be the name of one child of * @code{pointer} . @strong{Returns:} the search result, or @code{NULL} if not found. @end deftypefun libtasn1-4.16.0/doc/texi/element.c.texi0000644000000000000000000002533713615374721014514 00000000000000@subheading asn1_write_value @anchor{asn1_write_value} @deftypefun {int} {asn1_write_value} (asn1_node @var{node_root}, const char * @var{name}, const void * @var{ivalue}, int @var{len}) @var{node_root}: pointer to a structure @var{name}: the name of the element inside the structure that you want to set. @var{ivalue}: vector used to specify the value to set. If len is >0, VALUE must be a two's complement form integer. if len=0 *VALUE must be a null terminated string with an integer value. @var{len}: number of bytes of *value to use to set the value: value[0]..value[len-1] or 0 if value is a null terminated string Set the value of one element inside a structure. If an element is OPTIONAL and you want to delete it, you must use the value=NULL and len=0. Using "pkix.asn": result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", NULL, 0); Description for each type: @strong{INTEGER:} VALUE must contain a two's complement form integer. value[0]=0xFF , len=1 -> integer=-1. value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1. value[0]=0x01 , len=1 -> integer= 1. value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. value="123" , len=0 -> integer= 123. @strong{ENUMERATED:} As INTEGER (but only with not negative numbers). @strong{BOOLEAN:} VALUE must be the null terminated string "TRUE" or "FALSE" and LEN != 0. value="TRUE" , len=1 -> boolean=TRUE. value="FALSE" , len=1 -> boolean=FALSE. OBJECT IDENTIFIER: VALUE must be a null terminated string with each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha. @strong{UTCTime:} VALUE must be a null terminated string in one of these formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", "YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss-hh'mm'", "YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm-hh'mm'". LEN != 0. value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 at 12h 00m Greenwich Mean Time @strong{GeneralizedTime:} VALUE must be in one of this format: "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s-hh'mm'", "YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm-hh'mm'" where ss.s indicates the seconds with any precision like "10.1" or "01.02". LEN != 0 value="2001010112001.12-0700" , len=1 -> time=Jannuary 1st, 2001 at 12h 00m 01.12s Pacific Daylight Time OCTET STRING: VALUE contains the octet string and LEN is the number of octets. value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> three bytes octet string @strong{GeneralString:} VALUE contains the generalstring and LEN is the number of octets. value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> three bytes generalstring BIT STRING: VALUE contains the bit string organized by bytes and LEN is the number of bits. value="$\backslash$xCF" , len=6 -> bit string="110011" (six bits) @strong{CHOICE:} if NAME indicates a choice type, VALUE must specify one of the alternatives with a null terminated string. LEN != 0. Using "pkix.asn"\: result=asn1_write_value(cert, "certificate1.tbsCertificate.subject", "rdnSequence", 1); @strong{ANY:} VALUE indicates the der encoding of a structure. LEN != 0. SEQUENCE OF: VALUE must be the null terminated string "NEW" and LEN != 0. With this instruction another element is appended in the sequence. The name of this element will be "?1" if it's the first one, "?2" for the second and so on. Using "pkix.asn"\: result=asn1_write_value(cert, "certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); SET OF: the same as SEQUENCE OF. Using "pkix.asn": result=asn1_write_value(cert, "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); @strong{Returns:} @code{ASN1_SUCCESS} if the value was set, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, and @code{ASN1_VALUE_NOT_VALID} if @code{ivalue} has a wrong format. @end deftypefun @subheading asn1_read_value @anchor{asn1_read_value} @deftypefun {int} {asn1_read_value} (asn1_node_const @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len}) @var{root}: pointer to a structure. @var{name}: the name of the element inside a structure that you want to read. @var{ivalue}: vector that will contain the element's content, must be a pointer to memory cells already allocated (may be @code{NULL} ). @var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy holds the sizeof value. Returns the value of one element inside a structure. If an element is OPTIONAL and this returns @code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the @code{root} provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node. Note that there can be valid values with length zero. In these case this function will succeed and @code{len} will be zero. @strong{INTEGER:} VALUE will contain a two's complement form integer. integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , len=1. @strong{ENUMERATED:} As INTEGER (but only with not negative numbers). @strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6. OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1"). LEN = strlen(VALUE)+1 @strong{UTCTime:} VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". LEN=strlen(VALUE)+1. @strong{GeneralizedTime:} VALUE will be a null terminated string in the same format used to set the value. OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets. @strong{GeneralString:} VALUE will contain the generalstring and LEN will be the number of octets. BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits. @strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the alternative selected. @strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used. @strong{Returns:} @code{ASN1_SUCCESS} if value is returned, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, @code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough to store the result, and in this case @code{len} will contain the number of bytes needed. On the occasion that the stored data are of zero-length this function may return @code{ASN1_SUCCESS} even if the provided @code{len} is zero. @end deftypefun @subheading asn1_read_value_type @anchor{asn1_read_value_type} @deftypefun {int} {asn1_read_value_type} (asn1_node_const @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len}, unsigned int * @var{etype}) @var{root}: pointer to a structure. @var{name}: the name of the element inside a structure that you want to read. @var{ivalue}: vector that will contain the element's content, must be a pointer to memory cells already allocated (may be @code{NULL} ). @var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy holds the sizeof value. @var{etype}: The type of the value read (ASN1_ETYPE) Returns the type and value of one element inside a structure. If an element is OPTIONAL and this returns @code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the @code{root} provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node. Note that there can be valid values with length zero. In these case this function will succeed and @code{len} will be zero. @strong{INTEGER:} VALUE will contain a two's complement form integer. integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , len=1. @strong{ENUMERATED:} As INTEGER (but only with not negative numbers). @strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6. OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1"). LEN = strlen(VALUE)+1 @strong{UTCTime:} VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". LEN=strlen(VALUE)+1. @strong{GeneralizedTime:} VALUE will be a null terminated string in the same format used to set the value. OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets. @strong{GeneralString:} VALUE will contain the generalstring and LEN will be the number of octets. BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits. @strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the alternative selected. @strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used. @strong{Returns:} @code{ASN1_SUCCESS} if value is returned, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, @code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough to store the result, and in this case @code{len} will contain the number of bytes needed. On the occasion that the stored data are of zero-length this function may return @code{ASN1_SUCCESS} even if the provided @code{len} is zero. @end deftypefun @subheading asn1_read_tag @anchor{asn1_read_tag} @deftypefun {int} {asn1_read_tag} (asn1_node_const @var{root}, const char * @var{name}, int * @var{tagValue}, int * @var{classValue}) @var{root}: pointer to a structure @var{name}: the name of the element inside a structure. @var{tagValue}: variable that will contain the TAG value. @var{classValue}: variable that will specify the TAG type. Returns the TAG and the CLASS of one element inside a structure. CLASS can have one of these constants: @code{ASN1_CLASS_APPLICATION} , @code{ASN1_CLASS_UNIVERSAL} , @code{ASN1_CLASS_PRIVATE} or @code{ASN1_CLASS_CONTEXT_SPECIFIC} . @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element. @end deftypefun @subheading asn1_read_node_value @anchor{asn1_read_node_value} @deftypefun {int} {asn1_read_node_value} (asn1_node_const @var{node}, asn1_data_node_st * @var{data}) @var{node}: pointer to a node. @var{data}: a point to a asn1_data_node_st Returns the value a data node inside a asn1_node structure. The data returned should be handled as constant values. @strong{Returns:} @code{ASN1_SUCCESS} if the node exists. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_read_node_value.texi0000644000000000000000000000066213615374720016671 00000000000000@subheading asn1_read_node_value @anchor{asn1_read_node_value} @deftypefun {int} {asn1_read_node_value} (asn1_node_const @var{node}, asn1_data_node_st * @var{data}) @var{node}: pointer to a node. @var{data}: a point to a asn1_data_node_st Returns the value a data node inside a asn1_node structure. The data returned should be handled as constant values. @strong{Returns:} @code{ASN1_SUCCESS} if the node exists. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_perror.texi0000644000000000000000000000056613615374717015077 00000000000000@subheading asn1_perror @anchor{asn1_perror} @deftypefun {void} {asn1_perror} (int @var{error}) @var{error}: is an error returned by a libtasn1 function. Prints a string to stderr with a description of an error. This function is like @code{perror()} . The only difference is that it accepts an error returned by a libtasn1 function. @strong{Since:} 1.6 @end deftypefun libtasn1-4.16.0/doc/texi/asn1_decode_simple_ber.texi0000644000000000000000000000144313615374717017205 00000000000000@subheading asn1_decode_simple_ber @anchor{asn1_decode_simple_ber} @deftypefun {int} {asn1_decode_simple_ber} (unsigned int @var{etype}, const unsigned char * @var{der}, unsigned int @var{_der_len}, unsigned char ** @var{str}, unsigned int * @var{str_len}, unsigned int * @var{ber_len}) @var{etype}: The type of the string to be encoded (ASN1_ETYPE_) @var{der}: the encoded string @var{_der_len}: the bytes of the encoded string @var{str}: a pointer to the data @var{str_len}: the length of the data @var{ber_len}: the total length occupied by BER (may be @code{NULL} ) Decodes a BER encoded type. The output is an allocated value of the data. This decodes BER STRINGS only. Other types are decoded as DER. @strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_write_value.texi0000644000000000000000000000746013615374720016106 00000000000000@subheading asn1_write_value @anchor{asn1_write_value} @deftypefun {int} {asn1_write_value} (asn1_node @var{node_root}, const char * @var{name}, const void * @var{ivalue}, int @var{len}) @var{node_root}: pointer to a structure @var{name}: the name of the element inside the structure that you want to set. @var{ivalue}: vector used to specify the value to set. If len is >0, VALUE must be a two's complement form integer. if len=0 *VALUE must be a null terminated string with an integer value. @var{len}: number of bytes of *value to use to set the value: value[0]..value[len-1] or 0 if value is a null terminated string Set the value of one element inside a structure. If an element is OPTIONAL and you want to delete it, you must use the value=NULL and len=0. Using "pkix.asn": result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", NULL, 0); Description for each type: @strong{INTEGER:} VALUE must contain a two's complement form integer. value[0]=0xFF , len=1 -> integer=-1. value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1. value[0]=0x01 , len=1 -> integer= 1. value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. value="123" , len=0 -> integer= 123. @strong{ENUMERATED:} As INTEGER (but only with not negative numbers). @strong{BOOLEAN:} VALUE must be the null terminated string "TRUE" or "FALSE" and LEN != 0. value="TRUE" , len=1 -> boolean=TRUE. value="FALSE" , len=1 -> boolean=FALSE. OBJECT IDENTIFIER: VALUE must be a null terminated string with each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha. @strong{UTCTime:} VALUE must be a null terminated string in one of these formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", "YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss-hh'mm'", "YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm-hh'mm'". LEN != 0. value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 at 12h 00m Greenwich Mean Time @strong{GeneralizedTime:} VALUE must be in one of this format: "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s-hh'mm'", "YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm-hh'mm'" where ss.s indicates the seconds with any precision like "10.1" or "01.02". LEN != 0 value="2001010112001.12-0700" , len=1 -> time=Jannuary 1st, 2001 at 12h 00m 01.12s Pacific Daylight Time OCTET STRING: VALUE contains the octet string and LEN is the number of octets. value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> three bytes octet string @strong{GeneralString:} VALUE contains the generalstring and LEN is the number of octets. value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> three bytes generalstring BIT STRING: VALUE contains the bit string organized by bytes and LEN is the number of bits. value="$\backslash$xCF" , len=6 -> bit string="110011" (six bits) @strong{CHOICE:} if NAME indicates a choice type, VALUE must specify one of the alternatives with a null terminated string. LEN != 0. Using "pkix.asn"\: result=asn1_write_value(cert, "certificate1.tbsCertificate.subject", "rdnSequence", 1); @strong{ANY:} VALUE indicates the der encoding of a structure. LEN != 0. SEQUENCE OF: VALUE must be the null terminated string "NEW" and LEN != 0. With this instruction another element is appended in the sequence. The name of this element will be "?1" if it's the first one, "?2" for the second and so on. Using "pkix.asn"\: result=asn1_write_value(cert, "certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); SET OF: the same as SEQUENCE OF. Using "pkix.asn": result=asn1_write_value(cert, "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); @strong{Returns:} @code{ASN1_SUCCESS} if the value was set, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, and @code{ASN1_VALUE_NOT_VALID} if @code{ivalue} has a wrong format. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_get_octet_der.texi0000644000000000000000000000160313615374717016366 00000000000000@subheading asn1_get_octet_der @anchor{asn1_get_octet_der} @deftypefun {int} {asn1_get_octet_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, unsigned char * @var{str}, int @var{str_size}, int * @var{str_len}) @var{der}: DER data to decode containing the OCTET SEQUENCE. @var{der_len}: The length of the @code{der} data to decode. @var{ret_len}: Output variable containing the encoded length of the DER data. @var{str}: Pre-allocated output buffer to put decoded OCTET SEQUENCE in. @var{str_size}: Length of pre-allocated output buffer. @var{str_len}: Output variable containing the length of the contents of the OCTET SEQUENCE. Extract an OCTET SEQUENCE from DER data. Note that this function expects the DER data past the tag field, i.e., the length and content octets. @strong{Returns:} Returns @code{ASN1_SUCCESS} on success, or an error. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_parser2array.texi0000644000000000000000000000257413615374721016177 00000000000000@subheading asn1_parser2array @anchor{asn1_parser2array} @deftypefun {int} {asn1_parser2array} (const char * @var{inputFileName}, const char * @var{outputFileName}, const char * @var{vectorName}, char * @var{error_desc}) @var{inputFileName}: specify the path and the name of file that contains ASN.1 declarations. @var{outputFileName}: specify the path and the name of file that will contain the C vector definition. @var{vectorName}: specify the name of the C vector. @var{error_desc}: return the error description or an empty string if success. Function that generates a C structure from an ASN1 file. Creates a file containing a C vector to use to manage the definitions included in @code{inputFileName} file. If @code{inputFileName} is "/aa/bb/xx.yy" and @code{outputFileName} is @code{NULL} , the file created is "/aa/bb/xx_asn1_tab.c". If @code{vectorName} is @code{NULL} the vector name will be "xx_asn1_tab". @strong{Returns:} @code{ASN1_SUCCESS} if the file has a correct syntax and every identifier is known, @code{ASN1_FILE_NOT_FOUND} if an error occurred while opening @code{inputFileName} , @code{ASN1_SYNTAX_ERROR} if the syntax is not correct, @code{ASN1_IDENTIFIER_NOT_FOUND} if in the file there is an identifier that is not defined, @code{ASN1_NAME_TOO_LONG} if in the file there is an identifier with more than @code{ASN1_MAX_NAME_SIZE} characters. @end deftypefun libtasn1-4.16.0/doc/texi/coding.c.texi0000644000000000000000000001167113615374721014322 00000000000000@subheading asn1_length_der @anchor{asn1_length_der} @deftypefun {void} {asn1_length_der} (unsigned long int @var{len}, unsigned char * @var{der}, int * @var{der_len}) @var{len}: value to convert. @var{der}: buffer to hold the returned encoding (may be @code{NULL} ). @var{der_len}: number of meaningful bytes of ANS (der[0]..der[der_len-1]). Creates the DER encoding of the provided length value. The @code{der} buffer must have enough room for the output. The maximum length this function will encode is @code{ASN1_MAX_LENGTH_SIZE} . To know the size of the DER encoding use a @code{NULL} value for @code{der} . @end deftypefun @subheading asn1_octet_der @anchor{asn1_octet_der} @deftypefun {void} {asn1_octet_der} (const unsigned char * @var{str}, int @var{str_len}, unsigned char * @var{der}, int * @var{der_len}) @var{str}: the input data. @var{str_len}: STR length (str[0]..str[*str_len-1]). @var{der}: encoded string returned. @var{der_len}: number of meaningful bytes of DER (der[0]..der[der_len-1]). Creates a length-value DER encoding for the input data. The DER encoding of the input data will be placed in the @code{der} variable. Note that the OCTET STRING tag is not included in the output. This function does not return any value because it is expected that @code{der_len} will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using @code{asn1_length_der()} . @end deftypefun @subheading asn1_encode_simple_der @anchor{asn1_encode_simple_der} @deftypefun {int} {asn1_encode_simple_der} (unsigned int @var{etype}, const unsigned char * @var{str}, unsigned int @var{str_len}, unsigned char * @var{tl}, unsigned int * @var{tl_len}) @var{etype}: The type of the string to be encoded (ASN1_ETYPE_) @var{str}: the string data. @var{str_len}: the string length @var{tl}: the encoded tag and length @var{tl_len}: the bytes of the @code{tl} field Creates the DER encoding for various simple ASN.1 types like strings etc. It stores the tag and length in @code{tl} , which should have space for at least @code{ASN1_MAX_TL_SIZE} bytes. Initially @code{tl_len} should contain the size of @code{tl} . The complete DER encoding should consist of the value in @code{tl} appended with the provided @code{str} . @strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. @end deftypefun @subheading asn1_object_id_der @anchor{asn1_object_id_der} @deftypefun {int} {asn1_object_id_der} (const char * @var{str}, unsigned char * @var{der}, int * @var{der_len}, unsigned @var{flags}) @var{str}: An object identifier in numeric, dot format. @var{der}: buffer to hold the returned encoding (may be @code{NULL} ). @var{der_len}: initially the size of @code{der} ; will hold the final size. @var{flags}: must be zero Creates the DER encoding of the provided object identifier. @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding was OK, @code{ASN1_VALUE_NOT_VALID} if @code{str} is not a valid OID, @code{ASN1_MEM_ERROR} if the @code{der} vector isn't big enough and in this case @code{der_len} will contain the length needed. @end deftypefun @subheading asn1_bit_der @anchor{asn1_bit_der} @deftypefun {void} {asn1_bit_der} (const unsigned char * @var{str}, int @var{bit_len}, unsigned char * @var{der}, int * @var{der_len}) @var{str}: BIT string. @var{bit_len}: number of meaningful bits in STR. @var{der}: string returned. @var{der_len}: number of meaningful bytes of DER (der[0]..der[ans_len-1]). Creates a length-value DER encoding for the input data as it would have been for a BIT STRING. The DER encoded data will be copied in @code{der} . Note that the BIT STRING tag is not included in the output. This function does not return any value because it is expected that @code{der_len} will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using @code{asn1_length_der()} . @end deftypefun @subheading asn1_der_coding @anchor{asn1_der_coding} @deftypefun {int} {asn1_der_coding} (asn1_node_const @var{element}, const char * @var{name}, void * @var{ider}, int * @var{len}, char * @var{ErrorDescription}) @var{element}: pointer to an ASN1 element @var{name}: the name of the structure you want to encode (it must be inside *POINTER). @var{ider}: vector that will contain the DER encoding. DER must be a pointer to memory cells already allocated. @var{len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1], Initialy holds the sizeof of der vector. @var{ErrorDescription}: return the error description or an empty string if success. Creates the DER encoding for the NAME structure (inside *POINTER structure). @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, @code{ASN1_VALUE_NOT_FOUND} if there is an element without a value, @code{ASN1_MEM_ERROR} if the @code{ider} vector isn't big enough and in this case @code{len} will contain the length needed. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_octet_der.texi0000644000000000000000000000146713615374717015537 00000000000000@subheading asn1_octet_der @anchor{asn1_octet_der} @deftypefun {void} {asn1_octet_der} (const unsigned char * @var{str}, int @var{str_len}, unsigned char * @var{der}, int * @var{der_len}) @var{str}: the input data. @var{str_len}: STR length (str[0]..str[*str_len-1]). @var{der}: encoded string returned. @var{der_len}: number of meaningful bytes of DER (der[0]..der[der_len-1]). Creates a length-value DER encoding for the input data. The DER encoding of the input data will be placed in the @code{der} variable. Note that the OCTET STRING tag is not included in the output. This function does not return any value because it is expected that @code{der_len} will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using @code{asn1_length_der()} . @end deftypefun libtasn1-4.16.0/doc/texi/asn1_get_bit_der.texi0000644000000000000000000000133413615374717016027 00000000000000@subheading asn1_get_bit_der @anchor{asn1_get_bit_der} @deftypefun {int} {asn1_get_bit_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, unsigned char * @var{str}, int @var{str_size}, int * @var{bit_len}) @var{der}: DER data to decode containing the BIT SEQUENCE. @var{der_len}: Length of DER data to decode. @var{ret_len}: Output variable containing the length of the DER data. @var{str}: Pre-allocated output buffer to put decoded BIT SEQUENCE in. @var{str_size}: Length of pre-allocated output buffer. @var{bit_len}: Output variable containing the size of the BIT SEQUENCE. Extract a BIT SEQUENCE from DER data. @strong{Returns:} @code{ASN1_SUCCESS} on success, or an error. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_der_coding.texi0000644000000000000000000000210413615374720015643 00000000000000@subheading asn1_der_coding @anchor{asn1_der_coding} @deftypefun {int} {asn1_der_coding} (asn1_node_const @var{element}, const char * @var{name}, void * @var{ider}, int * @var{len}, char * @var{ErrorDescription}) @var{element}: pointer to an ASN1 element @var{name}: the name of the structure you want to encode (it must be inside *POINTER). @var{ider}: vector that will contain the DER encoding. DER must be a pointer to memory cells already allocated. @var{len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1], Initialy holds the sizeof of der vector. @var{ErrorDescription}: return the error description or an empty string if success. Creates the DER encoding for the NAME structure (inside *POINTER structure). @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, @code{ASN1_VALUE_NOT_FOUND} if there is an element without a value, @code{ASN1_MEM_ERROR} if the @code{ider} vector isn't big enough and in this case @code{len} will contain the length needed. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_print_structure.texi0000644000000000000000000000127613615374720017033 00000000000000@subheading asn1_print_structure @anchor{asn1_print_structure} @deftypefun {void} {asn1_print_structure} (FILE * @var{out}, asn1_node_const @var{structure}, const char * @var{name}, int @var{mode}) @var{out}: pointer to the output file (e.g. stdout). @var{structure}: pointer to the structure that you want to visit. @var{name}: an element of the structure @var{mode}: specify how much of the structure to print, can be @code{ASN1_PRINT_NAME} , @code{ASN1_PRINT_NAME_TYPE} , @code{ASN1_PRINT_NAME_TYPE_VALUE} , or @code{ASN1_PRINT_ALL} . Prints on the @code{out} file descriptor the structure's tree starting from the @code{name} element inside the structure @code{structure} . @end deftypefun libtasn1-4.16.0/doc/texi/asn1_der_decoding_startEnd.texi0000644000000000000000000000275013615374717020035 00000000000000@subheading asn1_der_decoding_startEnd @anchor{asn1_der_decoding_startEnd} @deftypefun {int} {asn1_der_decoding_startEnd} (asn1_node @var{element}, const void * @var{ider}, int @var{ider_len}, const char * @var{name_element}, int * @var{start}, int * @var{end}) @var{element}: pointer to an ASN1 element @var{ider}: vector that contains the DER encoding. @var{ider_len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1] @var{name_element}: an element of NAME structure. @var{start}: the position of the first byte of NAME_ELEMENT decoding ( @code{ider} [*start]) @var{end}: the position of the last byte of NAME_ELEMENT decoding ( @code{ider} [*end]) Find the start and end point of an element in a DER encoding string. I mean that if you have a der encoding and you have already used the function @code{asn1_der_decoding()} to fill a structure, it may happen that you want to find the piece of string concerning an element of the structure. One example is the sequence "tbsCertificate" inside an X509 certificate. Note that since libtasn1 3.7 the @code{ider} and @code{ider_len} parameters can be omitted, if the element is already decoded using @code{asn1_der_decoding()} . @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if ELEMENT is @code{asn1_node} EMPTY or @code{name_element} is not a valid element, @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't match the structure ELEMENT. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_check_version.texi0000644000000000000000000000126213615374721016375 00000000000000@subheading asn1_check_version @anchor{asn1_check_version} @deftypefun {const char *} {asn1_check_version} (const char * @var{req_version}) @var{req_version}: Required version number, or @code{NULL} . Check that the version of the library is at minimum the requested one and return the version string; return @code{NULL} if the condition is not satisfied. If a @code{NULL} is passed to this function, no check is done, but the version string is simply returned. See @code{ASN1_VERSION} for a suitable @code{req_version} string. @strong{Returns:} Version string of run-time library, or @code{NULL} if the run-time library does not meet the required version number. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_delete_structure.texi0000644000000000000000000000065713615374720017143 00000000000000@subheading asn1_delete_structure @anchor{asn1_delete_structure} @deftypefun {int} {asn1_delete_structure} (asn1_node * @var{structure}) @var{structure}: pointer to the structure that you want to delete. Deletes the structure * @code{structure} . At the end, * @code{structure} is set to NULL. @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if * @code{structure} was NULL. @end deftypefun libtasn1-4.16.0/doc/texi/gstr.c.texi0000644000000000000000000000000013615374721014016 00000000000000libtasn1-4.16.0/doc/texi/asn1_der_decoding_element.texi0000644000000000000000000000253113615374717017677 00000000000000@subheading asn1_der_decoding_element @anchor{asn1_der_decoding_element} @deftypefun {int} {asn1_der_decoding_element} (asn1_node * @var{structure}, const char * @var{elementName}, const void * @var{ider}, int @var{len}, char * @var{errorDescription}) @var{structure}: pointer to an ASN1 structure @var{elementName}: name of the element to fill @var{ider}: vector that contains the DER encoding of the whole structure. @var{len}: number of bytes of *der: der[0]..der[len-1] @var{errorDescription}: null-terminated string contains details when an error occurred. Fill the element named @code{ELEMENTNAME} with values of a DER encoding string. The structure must just be created with function @code{asn1_create_element()} . The DER vector must contain the encoding string of the whole @code{STRUCTURE} . If an error occurs during the decoding procedure, the * @code{STRUCTURE} is deleted and set equal to @code{NULL} . This function is deprecated and may just be an alias to asn1_der_decoding in future versions. Use @code{asn1_der_decoding()} instead. @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if ELEMENT is @code{NULL} or @code{elementName} == NULL, and @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't match the structure @code{structure} (*ELEMENT deleted). @end deftypefun libtasn1-4.16.0/doc/texi/asn1_strerror.texi0000644000000000000000000000072513615374717015445 00000000000000@subheading asn1_strerror @anchor{asn1_strerror} @deftypefun {const char *} {asn1_strerror} (int @var{error}) @var{error}: is an error returned by a libtasn1 function. Returns a string with a description of an error. This function is similar to strerror. The only difference is that it accepts an error (number) returned by a libtasn1 function. @strong{Returns:} Pointer to static zero-terminated string describing error code. @strong{Since:} 1.6 @end deftypefun libtasn1-4.16.0/doc/texi/asn1_expand_any_defined_by.texi0000644000000000000000000000147613615374717020065 00000000000000@subheading asn1_expand_any_defined_by @anchor{asn1_expand_any_defined_by} @deftypefun {int} {asn1_expand_any_defined_by} (asn1_node_const @var{definitions}, asn1_node * @var{element}) @var{definitions}: ASN1 definitions @var{element}: pointer to an ASN1 structure Expands every "ANY DEFINED BY" element of a structure created from a DER decoding process (asn1_der_decoding function). The element ANY must be defined by an OBJECT IDENTIFIER. The type used to expand the element ANY is the first one following the definition of the actual value of the OBJECT IDENTIFIER. @strong{Returns:} @code{ASN1_SUCCESS} if Substitution OK, @code{ASN1_ERROR_TYPE_ANY} if some "ANY DEFINED BY" element couldn't be expanded due to a problem in OBJECT_ID -> TYPE association, or other error codes depending on DER decoding. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_number_of_elements.texi0000644000000000000000000000122113615374720017415 00000000000000@subheading asn1_number_of_elements @anchor{asn1_number_of_elements} @deftypefun {int} {asn1_number_of_elements} (asn1_node_const @var{element}, const char * @var{name}, int * @var{num}) @var{element}: pointer to the root of an ASN1 structure. @var{name}: the name of a sub-structure of ROOT. @var{num}: pointer to an integer where the result will be stored Counts the number of elements of a sub-structure called NAME with names equal to "?1","?2", ... @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not known, @code{ASN1_GENERIC_ERROR} if pointer @code{num} is @code{NULL} . @end deftypefun libtasn1-4.16.0/doc/texi/version.c.texi0000644000000000000000000000126213615374721014537 00000000000000@subheading asn1_check_version @anchor{asn1_check_version} @deftypefun {const char *} {asn1_check_version} (const char * @var{req_version}) @var{req_version}: Required version number, or @code{NULL} . Check that the version of the library is at minimum the requested one and return the version string; return @code{NULL} if the condition is not satisfied. If a @code{NULL} is passed to this function, no check is done, but the version string is simply returned. See @code{ASN1_VERSION} for a suitable @code{req_version} string. @strong{Returns:} Version string of run-time library, or @code{NULL} if the run-time library does not meet the required version number. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_read_value_type.texi0000644000000000000000000000566213615374720016732 00000000000000@subheading asn1_read_value_type @anchor{asn1_read_value_type} @deftypefun {int} {asn1_read_value_type} (asn1_node_const @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len}, unsigned int * @var{etype}) @var{root}: pointer to a structure. @var{name}: the name of the element inside a structure that you want to read. @var{ivalue}: vector that will contain the element's content, must be a pointer to memory cells already allocated (may be @code{NULL} ). @var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy holds the sizeof value. @var{etype}: The type of the value read (ASN1_ETYPE) Returns the type and value of one element inside a structure. If an element is OPTIONAL and this returns @code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the @code{root} provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node. Note that there can be valid values with length zero. In these case this function will succeed and @code{len} will be zero. @strong{INTEGER:} VALUE will contain a two's complement form integer. integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , len=1. @strong{ENUMERATED:} As INTEGER (but only with not negative numbers). @strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6. OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1"). LEN = strlen(VALUE)+1 @strong{UTCTime:} VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". LEN=strlen(VALUE)+1. @strong{GeneralizedTime:} VALUE will be a null terminated string in the same format used to set the value. OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets. @strong{GeneralString:} VALUE will contain the generalstring and LEN will be the number of octets. BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits. @strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the alternative selected. @strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used. @strong{Returns:} @code{ASN1_SUCCESS} if value is returned, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, @code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough to store the result, and in this case @code{len} will contain the number of bytes needed. On the occasion that the stored data are of zero-length this function may return @code{ASN1_SUCCESS} even if the provided @code{len} is zero. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_read_tag.texi0000644000000000000000000000140313615374720015315 00000000000000@subheading asn1_read_tag @anchor{asn1_read_tag} @deftypefun {int} {asn1_read_tag} (asn1_node_const @var{root}, const char * @var{name}, int * @var{tagValue}, int * @var{classValue}) @var{root}: pointer to a structure @var{name}: the name of the element inside a structure. @var{tagValue}: variable that will contain the TAG value. @var{classValue}: variable that will specify the TAG type. Returns the TAG and the CLASS of one element inside a structure. CLASS can have one of these constants: @code{ASN1_CLASS_APPLICATION} , @code{ASN1_CLASS_UNIVERSAL} , @code{ASN1_CLASS_PRIVATE} or @code{ASN1_CLASS_CONTEXT_SPECIFIC} . @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_length_der.texi0000644000000000000000000000117613615374717015677 00000000000000@subheading asn1_length_der @anchor{asn1_length_der} @deftypefun {void} {asn1_length_der} (unsigned long int @var{len}, unsigned char * @var{der}, int * @var{der_len}) @var{len}: value to convert. @var{der}: buffer to hold the returned encoding (may be @code{NULL} ). @var{der_len}: number of meaningful bytes of ANS (der[0]..der[der_len-1]). Creates the DER encoding of the provided length value. The @code{der} buffer must have enough room for the output. The maximum length this function will encode is @code{ASN1_MAX_LENGTH_SIZE} . To know the size of the DER encoding use a @code{NULL} value for @code{der} . @end deftypefun libtasn1-4.16.0/doc/texi/errors.c.texi0000644000000000000000000000151313615374721014365 00000000000000@subheading asn1_perror @anchor{asn1_perror} @deftypefun {void} {asn1_perror} (int @var{error}) @var{error}: is an error returned by a libtasn1 function. Prints a string to stderr with a description of an error. This function is like @code{perror()} . The only difference is that it accepts an error returned by a libtasn1 function. @strong{Since:} 1.6 @end deftypefun @subheading asn1_strerror @anchor{asn1_strerror} @deftypefun {const char *} {asn1_strerror} (int @var{error}) @var{error}: is an error returned by a libtasn1 function. Returns a string with a description of an error. This function is similar to strerror. The only difference is that it accepts an error (number) returned by a libtasn1 function. @strong{Returns:} Pointer to static zero-terminated string describing error code. @strong{Since:} 1.6 @end deftypefun libtasn1-4.16.0/doc/texi/asn1_der_decoding2.texi0000644000000000000000000000265113615374717016253 00000000000000@subheading asn1_der_decoding2 @anchor{asn1_der_decoding2} @deftypefun {int} {asn1_der_decoding2} (asn1_node * @var{element}, const void * @var{ider}, int * @var{max_ider_len}, unsigned int @var{flags}, char * @var{errorDescription}) @var{element}: pointer to an ASN1 structure. @var{ider}: vector that contains the DER encoding. @var{max_ider_len}: pointer to an integer giving the information about the maximal number of bytes occupied by * @code{ider} . The real size of the DER encoding is returned through this pointer. @var{flags}: flags controlling the behaviour of the function. @var{errorDescription}: null-terminated string contains details when an error occurred. Fill the structure * @code{element} with values of a DER encoding string. The structure must just be created with function @code{asn1_create_element()} . If @code{ASN1_DECODE_FLAG_ALLOW_PADDING} flag is set then the function will ignore padding after the decoded DER data. Upon a successful return the value of * @code{max_ider_len} will be set to the number of bytes decoded. If @code{ASN1_DECODE_FLAG_STRICT_DER} flag is set then the function will not decode any BER-encoded elements. @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{ELEMENT} is @code{NULL} , and @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't match the structure name (* @code{ELEMENT} deleted). @end deftypefun libtasn1-4.16.0/doc/texi/asn1_expand_octet_string.texi0000644000000000000000000000203213615374717017617 00000000000000@subheading asn1_expand_octet_string @anchor{asn1_expand_octet_string} @deftypefun {int} {asn1_expand_octet_string} (asn1_node_const @var{definitions}, asn1_node * @var{element}, const char * @var{octetName}, const char * @var{objectName}) @var{definitions}: ASN1 definitions @var{element}: pointer to an ASN1 structure @var{octetName}: name of the OCTECT STRING field to expand. @var{objectName}: name of the OBJECT IDENTIFIER field to use to define the type for expansion. Expands an "OCTET STRING" element of a structure created from a DER decoding process (the @code{asn1_der_decoding()} function). The type used for expansion is the first one following the definition of the actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. @strong{Returns:} @code{ASN1_SUCCESS} if substitution OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{objectName} or @code{octetName} are not correct, @code{ASN1_VALUE_NOT_VALID} if it wasn't possible to find the type to use for expansion, or other errors depending on DER decoding. @end deftypefun libtasn1-4.16.0/doc/texi/parser_aux.c.texi0000644000000000000000000000120713615374721015222 00000000000000@subheading asn1_find_node @anchor{asn1_find_node} @deftypefun {asn1_node} {asn1_find_node} (asn1_node_const @var{pointer}, const char * @var{name}) @var{pointer}: NODE_ASN element pointer. @var{name}: null terminated string with the element's name to find. Searches for an element called @code{name} starting from @code{pointer} . The name is composed by different identifiers separated by dots. When * @code{pointer} has a name, the first identifier must be the name of * @code{pointer} , otherwise it must be the name of one child of * @code{pointer} . @strong{Returns:} the search result, or @code{NULL} if not found. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_object_id_der.texi0000644000000000000000000000137313615374720016331 00000000000000@subheading asn1_object_id_der @anchor{asn1_object_id_der} @deftypefun {int} {asn1_object_id_der} (const char * @var{str}, unsigned char * @var{der}, int * @var{der_len}, unsigned @var{flags}) @var{str}: An object identifier in numeric, dot format. @var{der}: buffer to hold the returned encoding (may be @code{NULL} ). @var{der_len}: initially the size of @code{der} ; will hold the final size. @var{flags}: must be zero Creates the DER encoding of the provided object identifier. @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding was OK, @code{ASN1_VALUE_NOT_VALID} if @code{str} is not a valid OID, @code{ASN1_MEM_ERROR} if the @code{der} vector isn't big enough and in this case @code{der_len} will contain the length needed. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_get_tag_der.texi0000644000000000000000000000116313615374717016024 00000000000000@subheading asn1_get_tag_der @anchor{asn1_get_tag_der} @deftypefun {int} {asn1_get_tag_der} (const unsigned char * @var{der}, int @var{der_len}, unsigned char * @var{cls}, int * @var{len}, unsigned long * @var{tag}) @var{der}: DER data to decode. @var{der_len}: Length of DER data to decode. @var{cls}: Output variable containing decoded class. @var{len}: Output variable containing the length of the DER TAG data. @var{tag}: Output variable containing the decoded tag (may be @code{NULL} ). Decode the class and TAG from DER code. @strong{Returns:} Returns @code{ASN1_SUCCESS} on success, or an error. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_delete_structure2.texi0000644000000000000000000000101213615374720017207 00000000000000@subheading asn1_delete_structure2 @anchor{asn1_delete_structure2} @deftypefun {int} {asn1_delete_structure2} (asn1_node * @var{structure}, unsigned int @var{flags}) @var{structure}: pointer to the structure that you want to delete. @var{flags}: additional flags (see @code{ASN1_DELETE_FLAG} ) Deletes the structure * @code{structure} . At the end, * @code{structure} is set to NULL. @strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if * @code{structure} was NULL. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_bit_der.texi0000644000000000000000000000145413615374720015165 00000000000000@subheading asn1_bit_der @anchor{asn1_bit_der} @deftypefun {void} {asn1_bit_der} (const unsigned char * @var{str}, int @var{bit_len}, unsigned char * @var{der}, int * @var{der_len}) @var{str}: BIT string. @var{bit_len}: number of meaningful bits in STR. @var{der}: string returned. @var{der_len}: number of meaningful bytes of DER (der[0]..der[ans_len-1]). Creates a length-value DER encoding for the input data as it would have been for a BIT STRING. The DER encoded data will be copied in @code{der} . Note that the BIT STRING tag is not included in the output. This function does not return any value because it is expected that @code{der_len} will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using @code{asn1_length_der()} . @end deftypefun libtasn1-4.16.0/doc/texi/asn1_dup_node.texi0000644000000000000000000000061713615374720015352 00000000000000@subheading asn1_dup_node @anchor{asn1_dup_node} @deftypefun {asn1_node} {asn1_dup_node} (asn1_node_const @var{src}, const char * @var{src_name}) @var{src}: Source asn1 node. @var{src_name}: Field name in source node. Create a deep copy of a asn1_node variable. This function will return an exact copy of the provided structure. @strong{Returns:} Return @code{NULL} on failure. @end deftypefun libtasn1-4.16.0/doc/texi/asn1_get_length_ber.texi0000644000000000000000000000117213615374717016530 00000000000000@subheading asn1_get_length_ber @anchor{asn1_get_length_ber} @deftypefun {long} {asn1_get_length_ber} (const unsigned char * @var{ber}, int @var{ber_len}, int * @var{len}) @var{ber}: BER data to decode. @var{ber_len}: Length of BER data to decode. @var{len}: Output variable containing the length of the BER length field. Extract a length field from BER data. The difference to @code{asn1_get_length_der()} is that this function will return a length even if the value has indefinite encoding. @strong{Returns:} Return the decoded length value, or negative value when the value was too big. @strong{Since:} 2.0 @end deftypefun libtasn1-4.16.0/doc/texi/decoding.c.texi0000644000000000000000000003121113615374721014623 00000000000000@subheading asn1_get_length_der @anchor{asn1_get_length_der} @deftypefun {long} {asn1_get_length_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{len}) @var{der}: DER data to decode. @var{der_len}: Length of DER data to decode. @var{len}: Output variable containing the length of the DER length field. Extract a length field from DER data. @strong{Returns:} Return the decoded length value, or -1 on indefinite length, or -2 when the value was too big to fit in a int, or -4 when the decoded length value plus @code{len} would exceed @code{der_len} . @end deftypefun @subheading asn1_get_tag_der @anchor{asn1_get_tag_der} @deftypefun {int} {asn1_get_tag_der} (const unsigned char * @var{der}, int @var{der_len}, unsigned char * @var{cls}, int * @var{len}, unsigned long * @var{tag}) @var{der}: DER data to decode. @var{der_len}: Length of DER data to decode. @var{cls}: Output variable containing decoded class. @var{len}: Output variable containing the length of the DER TAG data. @var{tag}: Output variable containing the decoded tag (may be @code{NULL} ). Decode the class and TAG from DER code. @strong{Returns:} Returns @code{ASN1_SUCCESS} on success, or an error. @end deftypefun @subheading asn1_get_length_ber @anchor{asn1_get_length_ber} @deftypefun {long} {asn1_get_length_ber} (const unsigned char * @var{ber}, int @var{ber_len}, int * @var{len}) @var{ber}: BER data to decode. @var{ber_len}: Length of BER data to decode. @var{len}: Output variable containing the length of the BER length field. Extract a length field from BER data. The difference to @code{asn1_get_length_der()} is that this function will return a length even if the value has indefinite encoding. @strong{Returns:} Return the decoded length value, or negative value when the value was too big. @strong{Since:} 2.0 @end deftypefun @subheading asn1_get_octet_der @anchor{asn1_get_octet_der} @deftypefun {int} {asn1_get_octet_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, unsigned char * @var{str}, int @var{str_size}, int * @var{str_len}) @var{der}: DER data to decode containing the OCTET SEQUENCE. @var{der_len}: The length of the @code{der} data to decode. @var{ret_len}: Output variable containing the encoded length of the DER data. @var{str}: Pre-allocated output buffer to put decoded OCTET SEQUENCE in. @var{str_size}: Length of pre-allocated output buffer. @var{str_len}: Output variable containing the length of the contents of the OCTET SEQUENCE. Extract an OCTET SEQUENCE from DER data. Note that this function expects the DER data past the tag field, i.e., the length and content octets. @strong{Returns:} Returns @code{ASN1_SUCCESS} on success, or an error. @end deftypefun @subheading asn1_get_object_id_der @anchor{asn1_get_object_id_der} @deftypefun {int} {asn1_get_object_id_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, char * @var{str}, int @var{str_size}) @var{der}: DER data to decode containing the OBJECT IDENTIFIER @var{der_len}: Length of DER data to decode. @var{ret_len}: Output variable containing the length of the DER data. @var{str}: Pre-allocated output buffer to put the textual object id in. @var{str_size}: Length of pre-allocated output buffer. Converts a DER encoded object identifier to its textual form. This function expects the DER object identifier without the tag. @strong{Returns:} @code{ASN1_SUCCESS} on success, or an error. @end deftypefun @subheading asn1_get_bit_der @anchor{asn1_get_bit_der} @deftypefun {int} {asn1_get_bit_der} (const unsigned char * @var{der}, int @var{der_len}, int * @var{ret_len}, unsigned char * @var{str}, int @var{str_size}, int * @var{bit_len}) @var{der}: DER data to decode containing the BIT SEQUENCE. @var{der_len}: Length of DER data to decode. @var{ret_len}: Output variable containing the length of the DER data. @var{str}: Pre-allocated output buffer to put decoded BIT SEQUENCE in. @var{str_size}: Length of pre-allocated output buffer. @var{bit_len}: Output variable containing the size of the BIT SEQUENCE. Extract a BIT SEQUENCE from DER data. @strong{Returns:} @code{ASN1_SUCCESS} on success, or an error. @end deftypefun @subheading asn1_der_decoding2 @anchor{asn1_der_decoding2} @deftypefun {int} {asn1_der_decoding2} (asn1_node * @var{element}, const void * @var{ider}, int * @var{max_ider_len}, unsigned int @var{flags}, char * @var{errorDescription}) @var{element}: pointer to an ASN1 structure. @var{ider}: vector that contains the DER encoding. @var{max_ider_len}: pointer to an integer giving the information about the maximal number of bytes occupied by * @code{ider} . The real size of the DER encoding is returned through this pointer. @var{flags}: flags controlling the behaviour of the function. @var{errorDescription}: null-terminated string contains details when an error occurred. Fill the structure * @code{element} with values of a DER encoding string. The structure must just be created with function @code{asn1_create_element()} . If @code{ASN1_DECODE_FLAG_ALLOW_PADDING} flag is set then the function will ignore padding after the decoded DER data. Upon a successful return the value of * @code{max_ider_len} will be set to the number of bytes decoded. If @code{ASN1_DECODE_FLAG_STRICT_DER} flag is set then the function will not decode any BER-encoded elements. @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{ELEMENT} is @code{NULL} , and @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't match the structure name (* @code{ELEMENT} deleted). @end deftypefun @subheading asn1_der_decoding @anchor{asn1_der_decoding} @deftypefun {int} {asn1_der_decoding} (asn1_node * @var{element}, const void * @var{ider}, int @var{ider_len}, char * @var{errorDescription}) @var{element}: pointer to an ASN1 structure. @var{ider}: vector that contains the DER encoding. @var{ider_len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1]. @var{errorDescription}: null-terminated string contains details when an error occurred. Fill the structure * @code{element} with values of a DER encoding string. The structure must just be created with function @code{asn1_create_element()} . Note that the * @code{element} variable is provided as a pointer for historical reasons. @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{ELEMENT} is @code{NULL} , and @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't match the structure name (* @code{ELEMENT} deleted). @end deftypefun @subheading asn1_der_decoding_element @anchor{asn1_der_decoding_element} @deftypefun {int} {asn1_der_decoding_element} (asn1_node * @var{structure}, const char * @var{elementName}, const void * @var{ider}, int @var{len}, char * @var{errorDescription}) @var{structure}: pointer to an ASN1 structure @var{elementName}: name of the element to fill @var{ider}: vector that contains the DER encoding of the whole structure. @var{len}: number of bytes of *der: der[0]..der[len-1] @var{errorDescription}: null-terminated string contains details when an error occurred. Fill the element named @code{ELEMENTNAME} with values of a DER encoding string. The structure must just be created with function @code{asn1_create_element()} . The DER vector must contain the encoding string of the whole @code{STRUCTURE} . If an error occurs during the decoding procedure, the * @code{STRUCTURE} is deleted and set equal to @code{NULL} . This function is deprecated and may just be an alias to asn1_der_decoding in future versions. Use @code{asn1_der_decoding()} instead. @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if ELEMENT is @code{NULL} or @code{elementName} == NULL, and @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't match the structure @code{structure} (*ELEMENT deleted). @end deftypefun @subheading asn1_der_decoding_startEnd @anchor{asn1_der_decoding_startEnd} @deftypefun {int} {asn1_der_decoding_startEnd} (asn1_node @var{element}, const void * @var{ider}, int @var{ider_len}, const char * @var{name_element}, int * @var{start}, int * @var{end}) @var{element}: pointer to an ASN1 element @var{ider}: vector that contains the DER encoding. @var{ider_len}: number of bytes of * @code{ider} : @code{ider} [0].. @code{ider} [len-1] @var{name_element}: an element of NAME structure. @var{start}: the position of the first byte of NAME_ELEMENT decoding ( @code{ider} [*start]) @var{end}: the position of the last byte of NAME_ELEMENT decoding ( @code{ider} [*end]) Find the start and end point of an element in a DER encoding string. I mean that if you have a der encoding and you have already used the function @code{asn1_der_decoding()} to fill a structure, it may happen that you want to find the piece of string concerning an element of the structure. One example is the sequence "tbsCertificate" inside an X509 certificate. Note that since libtasn1 3.7 the @code{ider} and @code{ider_len} parameters can be omitted, if the element is already decoded using @code{asn1_der_decoding()} . @strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND} if ELEMENT is @code{asn1_node} EMPTY or @code{name_element} is not a valid element, @code{ASN1_TAG_ERROR} or @code{ASN1_DER_ERROR} if the der encoding doesn't match the structure ELEMENT. @end deftypefun @subheading asn1_expand_any_defined_by @anchor{asn1_expand_any_defined_by} @deftypefun {int} {asn1_expand_any_defined_by} (asn1_node_const @var{definitions}, asn1_node * @var{element}) @var{definitions}: ASN1 definitions @var{element}: pointer to an ASN1 structure Expands every "ANY DEFINED BY" element of a structure created from a DER decoding process (asn1_der_decoding function). The element ANY must be defined by an OBJECT IDENTIFIER. The type used to expand the element ANY is the first one following the definition of the actual value of the OBJECT IDENTIFIER. @strong{Returns:} @code{ASN1_SUCCESS} if Substitution OK, @code{ASN1_ERROR_TYPE_ANY} if some "ANY DEFINED BY" element couldn't be expanded due to a problem in OBJECT_ID -> TYPE association, or other error codes depending on DER decoding. @end deftypefun @subheading asn1_expand_octet_string @anchor{asn1_expand_octet_string} @deftypefun {int} {asn1_expand_octet_string} (asn1_node_const @var{definitions}, asn1_node * @var{element}, const char * @var{octetName}, const char * @var{objectName}) @var{definitions}: ASN1 definitions @var{element}: pointer to an ASN1 structure @var{octetName}: name of the OCTECT STRING field to expand. @var{objectName}: name of the OBJECT IDENTIFIER field to use to define the type for expansion. Expands an "OCTET STRING" element of a structure created from a DER decoding process (the @code{asn1_der_decoding()} function). The type used for expansion is the first one following the definition of the actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. @strong{Returns:} @code{ASN1_SUCCESS} if substitution OK, @code{ASN1_ELEMENT_NOT_FOUND} if @code{objectName} or @code{octetName} are not correct, @code{ASN1_VALUE_NOT_VALID} if it wasn't possible to find the type to use for expansion, or other errors depending on DER decoding. @end deftypefun @subheading asn1_decode_simple_der @anchor{asn1_decode_simple_der} @deftypefun {int} {asn1_decode_simple_der} (unsigned int @var{etype}, const unsigned char * @var{der}, unsigned int @var{_der_len}, const unsigned char ** @var{str}, unsigned int * @var{str_len}) @var{etype}: The type of the string to be encoded (ASN1_ETYPE_) @var{der}: the encoded string @var{_der_len}: the bytes of the encoded string @var{str}: a pointer to the data @var{str_len}: the length of the data Decodes a simple DER encoded type (e.g. a string, which is not constructed). The output is a pointer inside the @code{der} . @strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. @end deftypefun @subheading asn1_decode_simple_ber @anchor{asn1_decode_simple_ber} @deftypefun {int} {asn1_decode_simple_ber} (unsigned int @var{etype}, const unsigned char * @var{der}, unsigned int @var{_der_len}, unsigned char ** @var{str}, unsigned int * @var{str_len}, unsigned int * @var{ber_len}) @var{etype}: The type of the string to be encoded (ASN1_ETYPE_) @var{der}: the encoded string @var{_der_len}: the bytes of the encoded string @var{str}: a pointer to the data @var{str_len}: the length of the data @var{ber_len}: the total length occupied by BER (may be @code{NULL} ) Decodes a BER encoded type. The output is an allocated value of the data. This decodes BER STRINGS only. Other types are decoded as DER. @strong{Returns:} @code{ASN1_SUCCESS} if successful or an error value. @end deftypefun libtasn1-4.16.0/doc/libtasn1.pdf0000644000000000000000000077775513615374731013231 00000000000000%PDF-1.5 %ÐÔÅØ 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xÚmTM¢@½ó+z&ÎÁ±?tBL$ñ°ãd4›½*´.‰<øï·_•èÌf’W¯_wÕ«îrðãc;Šòê`GæUŠOÛV×&³£øç¾öƒ¤Ê®[vïÖæ6ïWÛ7ñÑTÙÖvb¯“uYt/N¼.³ó5·½êÿ¢¥=åS‚> stream xÚmTM¢@½ó+z&ÎÁ±?tBL0ñ°ãd4›½*´.‰<Ì¿ß~U¢Îf’W¯_u½ªîvðãc;ZäÕÁŽÌ«Ÿ¶­®MfGñÏ}í I•]/¶ìÞ­ÍmÞ¯¶o⣩²­íÄ0^'ë²è^œx]fçkn{ÕÿEK{*ʇuÄpg6;µÞ$4»¢;»µgZ8, ’ü²M[Tå›P¯RJG¤eWxm½ñ­ž÷ŽE™7·¢â žÒ"/²îÑ7»¸¦‘¼ýj;{Y—ÇÊ‹"1þt‹m×|‘£o¼irÛåI É‘c¶×º>[TÒ›ÏEnn#×ÛûþbÅø¹‘ûÒî«¶BS¬ØEVå¶­÷™möåÉz‘”s…«¹gËüŸµ)gŽÏR©ð133wÄ xAÄbêí;¬ÒaGL6K& 0+‡}&ö"?‘á°(Ò¦Òa/ ¡cì,•!£½¥‰î-fö3¤Ù*IÃx {aªùð”sIC%ÒðhSô¢¨7å£Å}­HÏ=ŤIYƒ¹(îƒêjŧ ÿZóéàü4{ÖØSOØá5˜‡áZ ä®ekxvKº·Ǭü÷…Ü@2aÂ> stream xÚmSÁnâ0½ç+¼$z Ø¨"¤€ÄaKU¢Õ^C<ÐHàDN8ð÷õÌŠV{Hôüæç=üúØS`¾Jñ m}u%ŒÒßE Y]^/`»w¦¶oâÃÕå:1L·ÙÖVÝ‹omy¾èUÿ­àTÙ ÖÃþŽv¹Êó‘DM^ug{¦…Ç‚° ÉpmUÛ7¡^¥”žX[“ÖôÚã{=1î+kܽ¨8 …@iaª²»¯è_^|Ó˜¼¿µ\¶öXq,ÆŸ>ØvîFŽ^‚ñÎp•=‰!9òÌþÚ4gÀêBË¥0pôùÞÞ‹ ˆñs#P~k@hZ+vQÖÚ¦(ÁöA,åRÄÑf€5ÿĦœq8>K¥Â_¸—žX NˆHæžÐÔ3$¤Çž˜{<Ý0Š*¢5cÕ~ÿP÷õʯÂùÝ5WÂ42^!ž0^#žrq‰xƘœE„3xÎü ñ ªz“)cÒgl1BÌîÒ°õ•?ŸXqû!òŠNA‡¨Wš»A*dý1ùÔ)iȧΰÅç“Оó â9ç’†NVf¤¡–kô¯VäaŠžUJü†ôì?%Íš5Ø»bÿTW£=ј«±®–¾Œ¿É5ëñ2éfè&p2pj³V^ócH£Mc†VYxLS7˜E=›þ1âj· ¾gÈÈ endstream endobj 7 0 obj << /Length 458 /Filter /FlateDecode >> stream xÚ’MÓ0†ïù>:1Æ7‰®TA4œ`î’v#ÚxqÒý÷ø#©JAì*{<¯ßy2@4|€ EšsbDîM§~‡òæóm“NpÖÿJª¨©àfU¨Zi–üÞ6ÅëEÍ£DÉZ¢f™¤¢ë5ßÑWü¾ÛŒv衼k–Å»¦øy6ŠJÉI ç‚‘!#ߢmñ)ûK‰€C D0Š€RH 5!¹Ù £·÷cYqÎñúÔ—¬Æ£ýcWn´cçúœýØ·yóJz³^ÈÊ}·){ëO9Þ:ŸµãÃtévõ%§†Ó0¶‡øW” ŠÅö1bf¤óÕ§ÈÒúaX~B_å,ÏËÒd¡ú¹8£ŒFÿÔa„ Åb*¦iêoÅkF@æz‹Òl7 —µÄ‹Îù®·‰/¼W¨h¸ÊÊuwH(AµtC»†^êtÖ­º%솬ý`côäÝ®³}ïÃiH÷s>¶s~äù‰Y°) QZ?3X³ºº§ *.píšhÚýcµŸ†íÍ®?çw×<‚Âù q&ñ_4¾Æ•ebIõ¯yÊ ¿œw ÆðyÞÍÓáE endstream endobj 15 0 obj << /Length 747 /Filter /FlateDecode >> stream xÚ}TKoÛ0 ¾çW;É@­J–üÂN}£EÑ M¶Ëºƒã(‰0Ç.üh›?RTštË(’ߤe à“A!‚L)^è<¨6á¤Ý* ÇãÍDzœV1ÐÿB¢$ŽƒèÀÛùlrz$¼… fK ' ÁUž³EðƒÍÖ¶#•lF’•Mçl,k’9].زíHpóð÷v>”}#Iÿ$ñ‚–¦ëmÛPs™rqL!™"³»]€nK XĬ¥‡½®m(YÆ[L¡$¶¶óŽŒÁ´~Îî øH*.I5Íû¡+«@Z³éÖ…Ê7ä{h‡r $Aû¥1$ÆΦ\b6¤+›é.m?Øf5Ú~m¤»jª6ŒÀï„zkÓ“]^=î\)¶)û}H–rk— W¥\jR]´Ï˜ø¶³«µ«ÀaÍãL0¸ \…òÓëTÎ9R\(X‰Ü“ A?®„Ô<Ñ)w¨XáT q¥Øu˜+ÖCÜ´]8›W̧ì̦›…+å„„·MEEE*åEžSiÊçò•–ec{Ú—8ÖnÒHW.IÆì5 †–hå‚á J¬è>ŒÚÎÇÁFvŠ»ŠïÍn@Ë­÷³Þ…Xª7†–ƒÄP‚évXslµÈ}d9k—H3‡twø€~hêr—ÆòÛ‡º{[™¦7XL^°ïhgð ý¡{ɕץ Ú’¶ÇxùáýÉüyœ×~u!ØÜ;Ñpt®î‡bv~0l”ºâÞ‡ý9Œ’´`¯vX“‹¦%Ø­Ëò%L0…“¶~¦„šš ­{(> stream xÚíšËrÛ6†÷~ -©…PÜ/ݹ¾dÒÉx:‰²j»`$*áT·¡äŽóö‰ ) „ØIíDã…,Í1~ÿǃs Ô?h¤àH•£Ùê6ŸVGæ—·¯.›èÀI'ò·éÅ/·Œ *4š.F I „n:ý™•ã¿§¿_ÜLý8 ãDÁ:òHQâ#FkEý¸¤jÔ¦cE³üòOˆ`Ùfa^¯6ë1AÙ¾0/»ú;™¡( ”ãz(ýßQ Åf$4ž „YöÚüIµÑ#¡l~?Û—z°æï”Ýâ@è àW=æ…¼{ä‡O:Ø·ú‚=Ó©žZ*øˆ×S¬ð ã]ô¤îÍo'¼?¨õ­/Í `”¥JÛèÒ5wP„QÅ––ËwwævûJÃr_Y?åëù²\ ¢ƒõC$ž58C~ÚIHõ³ ùy8³C~¦I{?{Ò‡™ Aª³ 1…ÊJ×V"¡·•l÷y=Æ2ÛçÆINºã(˜úJ#¿Ïƒù‚N…1I«‡§˜4Ñ“NxŒþ ƒL¦ÊêÈ’žE¡ÂÒ±ˆ-‹wùʧ‘Cø8Hñ3}ÏFaPkl* mx Ð.-$hšlhTÒªSÂJ, ïÊÕ¶)Àt¶ÜæÕn€VÅøLë7lˆAë]*ƒmxŒÁ.4È`šlÃ`TÒ3È0ØÕ €Zß”ª¼úl ¼Ûì‹]AªÓðO‚àÿøu‡´Ö¥"؆ÇìòF0M¶A0*é$ p]¶Z™Eðv,Iv¯€1ÊšlH³yño];ËÍvU˜22È¥î$A✟¦U±dX›RqkÃc¸u½ã–&ÛàÖ“Ä\ªl¯â’ž5 gø$gW›ñ‹l>Ð3èž ÈΠ‰§Ø(©I¥Ë„ÆÈr6‡©:-Õ5(ãiâHê–@ßsu]ÌN0E$€ø¼i÷ÕyÊ:’JR£©k3•&ÛPÕ“<ª«(á@pìª8SWÝÖGI÷ksÞÓláWÅ¢¨Šõ¬ÿ0˜`?r©5P¹éK¬Ž:á‘êèÀ9T%J»ê¨/=c0ÛE<˜uFùT¬ró~a9 wsT¯|Rœ·¾x}²>¤f–6<–YºæÊ`fI“m2KTÒó@‚8žð1OAD‹åܬZ‹1Ê¢<é"Hrü”‰æg†Ìš“ Yƒ¬ëx²4Ù²¨¤ƒŒ(ªË™+Œ®oÞ&¤(%'ìÙõr‹¬¾óDzÊY'Ü·Ñ“NxºÞ æD° OÔ­©‹kzê$R¸ÊÉo¿ßTÕ¦2Üù{i ¥$ç#¡/àÈN*GmxŒ£®§8xÖ¨ÛpÕôqFŽ#·‡~yÿP.—¥?ɉãƒ1àœ×ÅÇ­‹ŽëH*Zmx ­®Í8xJ¨Û ÕÓ<êëz]³µÞåvÛ\á+ÖóòÁ4t— fõõÀm}Éï³IS¢¾ô·ØT«|ðª¦J7)è{özG6él ¹ÿOÙd¢'ðPïÕÔØD‡š¯Dm×|õµ2FÍ-ã™o¾^ݽ7) 9V« {¿àºÞÛ‘ÙìÞ§å¶]×uô›rV¬wE0U(*°ø± ž¡ÙNhêƒÜ†Çä®KABRu›¹§yô c¥ ½XpµYÏŠíÞ=©óâ!¼£Ëf¥Ôùè‹g7¯‰Ù£Éf‘Áû›‰Ú.{ĵkF˜^ \Ò:Þ¼Óe¨ùå:ßç'ÙJ—äŲ3d·¢T»Ûð˜ÝÝy'dÐî˜öÉ Ñ^ endstream endobj 143 0 obj << /Length 1229 /Filter /FlateDecode >> stream xÚ­WÝoã6 ï_‘·S€Ú³ü{o]›+:ÜÒ"M±v{Pl¥α;Én¯ÿýH‘NÒ`7 (PS%~ýH*rÁŸœ”Ñd–$a™“jwy®½Ÿ±¼<‘,€`p$ùÛêä—ÏY6‘QXF¥œ¬6“Læa–fûûVõä/!§¯~?™¯öeqü“QòÊ"žÈYË,E•`T^¤¡LÒQ[屸j§‰½í¦|ë¡êM×¢!¯MŸâ"ŒJ>¾ÚG¢RÔp4.D5ìt;¢g¶v•5k¿§Y´ßj"¾˜u¯\+iÕ˜µUöy”Q|ÇM=ž?[»ÞªŠ÷oŸAßLôê­]¯¼õ~uÝjtí–I(3Iv‹²èìvÊÓi¦™Ppu'Â=¥•ùÉT×ÈÅ x& o<_üˆˆ¼ZÝ+µºêv‚ÚÛj$‰<(ëL{O ÕòÅà„z°šÕïT¼g®º×cXÁà¤L銤ˆÅ…q=\<·ÕÌš·%£ö‘µ= Ñõ‹ùò”Vйè÷LhK+ð­ŒÈx\ê·îõ×úxïØv2}3´L.ô›2p¦ ‘‡r!„C‚ÞÌZ’ŠVäwúö6ØG¨L¥ ´ÀZYý+¡5OÑdaY–¤-)ÇÔËÙ{È–q˜'"©ë6hLˆy¤&Î(·š8³£ôŒ–zô®/ ì4µŸàoXýÏ`,+P-# wΉ7†•E Ó÷ºÕÖ,|×kvå8È?é5ˆ%£ãq´w\–¨Òί÷dú-Qçô©ÈùšÏì]úàÂ(J7c Rñž²VQ|ŠDü·Çÿ/ѯëÂûº~€5Ö¤‡ê¹Äœr‘€ˆ~{Ê ÔO:Ûp¦©hÌÎôlÙ¦³Ä¼Z¬æ—ó刭š¶ÑæÅÝóåÆq5¿ ýÇiý¯´ûèÐ^õŸÐ²²Ÿ§"^Óê¶Ûô˜Ï'ü¥Nƒ<™‰3*šJ,‰r&*8:8[BÙ1¶ÌÆÃ‚¹ ã‹d­®!·0|†^Ó54x`ë0j€;´µï{ÀGwÚo¯íÎ÷II½¾t—‹;"¾hç¨Ó£»¡ÅͰnLÅB¦Ò­ã£è¯†¹à‹±/6ÔÂ÷4 TCx²bÆm˜8`0©o{-nœE¢§øuƒÀÄy.œn6A¯b<*X¦A2-…i7VÕ¹—‰†,çS3<å#< OŒÞソ'ª‡XxúññFFÜý-÷|ŠÅ‡VÑjkµª§6º?ê0AIª°"÷M·¦TæX+9„Ĩ5Óœ„rƒ£ù›³1;¼shzóàÛl€Û[<Ü3r€#~|½JïAÞKŒØ3-ø}E 6¨qœÂã§eÓèæƒx3¥î¦Ö¦1/B˜eCv¿˜e3„Ûn@Ð!ý„ntö;­|ögÞV:yךÄjÌ÷);‰‚üPÃâÛ-Ⱥg×ë;¥2¡€‚蟦­ýò‰ß /£º~r!gÀNìðP8ÜÍG«_|ßãüèøarì‰8/J¾ÉŠ—Ÿ£íøá ©'pÞn®o¯¾r*9íül¨ÃñW¿HY=¹ endstream endobj 146 0 obj << /Length 1272 /Filter /FlateDecode >> stream xÚÅXmoâFþž_ÁGs ï‹×Þ4DˆÃù”@DœªR[U–Ä ØÈ6yiÕÿÞYï:àœ!wTw§|°=;;óÌ3/»·løÃ-a·\J‘`^k²8°Kiv×Ò/£þ6zPìlhž…GŽÓÂ6¶À­pÖr0Gs^í…ÓÖoiÿ~:ðÃWC!_èQi~æÒ#-ì"‚¦\(î1„)«¼uN¬n»ƒ­›Âíu+oc«ÈV“b•I-¹’élÕbkÄ¼Òøp´%o\T*µ)¹¤Ð%”3C&6Ù-ÛR ²§^˜•¯–˲šÒ¬STî…ÖLíäÐgTï¼h{T'vG‰~Êçh±œKm©Ìuà%Ñ€¢çC­a/Z¤”›JH0äz^Ýò!~FQž4Ñ„o©²67þ§q^dñxqiAU½lq³({QÁéØ;„1D©Gß5S@Y•ÊGÝš&¹-ÚÀß*/ô×,ÏSâSå æ†áhM‰Öë:5úÇÍT@)ˆ:œ©œÅÁŸI´ãq¬NÒñ_Póúk­súoL&µM)œûÁ ƒáàFo8ñ½¾ zA¨?U®Õ3¸ÒÒSývûFÿøøç&»g~?Ôˆ^8)^–i9dÔË"(¢D͵:æü´É¶?8o*NGaseŠ—Tåbbxk`$økûéC9# è*ÛžÎ6£^•A½”KóQ!õÒ,KZ®Ge)”s¹PgHÕ¬jq8[R½\¦Ú²®"uh•kS9™+ó@Ö‰M«s1Ô;=.í?¶`{O¡«‹9HxØ0G^¶Îü 7ü^X¥bÓþ/2ËK ¦‚Aè÷ýQcz(F6u?OOÙ“4ËÊ¢Uý1K³…Çy#Þ&So¡Tè¿ÐGYÍF}<׆DÕÛzÆÁRy˜S&¯æ^TÔ& Û8ô!Îjh.¢$º“&:ЛÀ BÔ³ÓÆmœ ñõº#Z¸ÚØë;ÀOÍ~ r¯òeŽýÁí•?ê†~cg:pq[w[³o. î>¾Ï†ÃK¿;øþAÏ>©¶(Óœûƒ0¸šÉÎû`ÛÝ—Áíåeã#êu·[ê ‡³½xLì7á(ôï ì½Ã?w‘Gù>Õ>ì…þ»8GœòÝ\ˆÀûppöÂx!¿íõe"3éËé6ŒÛÛ @x}ú?ÜÀݪú9Uwï²ÍY³{ÏEØ{•üj!³xò£Ü]g»k—?‡wW=\/÷©ùn…|þQq_ƒÛ"Ïåvß¶ìn“øú]…÷mœ]]UæÕ¿@þÇ61e endstream endobj 150 0 obj << /Length 1479 /Filter /FlateDecode >> stream xÚ½Xmo¤6þž_±ßÂJÁÅÆÆª:m’rÊí¶Yrê«T²Ë]P7°ZØkOUÿ{ÇC 5É^*UûÁ`çÏËãaéăDÞDú>‰x8Y=yzv÷q‚7WGÔȹ èö$ÏÒ£¯.…˜PD^D'釾ªt=ùÙ9¿Ï¶M¾›º¾ï;ìtêr.œÙrN(NÕÍn¿jö»_ï³r½)ÊS—1)|ÇŸþš¾=ŠÓÎÁض*Éð±!,ŠIrB}ŽÿâQ©@á`A_–2ÀQ=”ºM/Ãe³S–¢ìÀ B&Y+û5Š ¡Ý "“—D¨©Ã±ßuq·ÉÇá%'\ðçáCI¨½~ÏÏc2$¤áóÈ"$\úÿ Y§ÊâÒfA Ÿ·@úDÀÔ«,Hm œ¾o‘З¯}æÄ>ƒdóŸç’-| øù·‹ÄkŸ?x W¾ w6ÿñÿ÷´Õž¾ˆ/“y|¡^¸sfµD E]¢%U…ê\æBIï‹h/ôœOS:@tÔÙÕEUâ亮ƒéº7–$ñ–{¤µþr«Fñ£šÝ×íö¢Ä%íe5ña_"«ã‰¥ÔwùàÀë¼^í tUn.(ófh/àȈóaº-Ôa86G¿Ô§öNYßY.ëõ1b¼QAÍ7Æ.kp V‚ »7‹µU'}¥Må¤"cí­Qõ|Ð…^šðUÖ}Ʀ#7Œöƒ‰PXSŒØOÑÞHû( yãl´<Äï,Gü1íÄ ¾Ø[£BåzHtý(xEŠhq땞ýÒÀ…-œ´ÃA#ÈðË#­5÷)OEšŽPtoœÚ­HÆ=©ÛR¯ËôcÓœq%=éÔãMþwí“úFÝ7Ðx˜?+”‹TwÞ[g5·/ËìA À¾;-€ÏèGxØåµ93ÐLûM †lŒ¢«¼hix DÔöÒcDÈÎ[oèË¥}bÓãrˆYDƒ»ö ;D[¿qçNmZͪDßû„G¯hŠß\Ï–éè÷o×µ+¿˜>¶\+¸%ê'„µÉjÓçoXó>ÁýÖ¾úBúe.ú,Xí¬}¨tþÅÿp„ƒOõÙ?ŒM¶ endstream endobj 155 0 obj << /Length 1442 /Filter /FlateDecode >> stream xÚ­WmoÛ6þž_¡o“‡šI‘”:ìC–ºEŠ6Ýl–m)¶0[r%¹o¿~G%K¶²X ©ï÷Ô àzqà)ÎIFÞr{ØÙråáÃôÍuvc0w,_üôZ$bêͺKÍïÖ¿Zë]–£1çÜg/Gã0þåì†Pœªêr¿¬÷eŠÃµÎ“M–¯FcÆ”à~8º›¿½˜ÌÛcgÆj,O‚˜GCÂCÉ\°2 å!Ë…dþ,Ûî6&$%ü.+rœ, AcB™Ëõõ(â~ar !±f x®G,ò¿í ©ÈO+œÛdÿ˜ÙÔ­+»ëÒ€‘HpXß®ûáj>™#>³ùôúæÍP,* .^d臥=üj¤0—ÔÒ )Lq…]™Žõfƒj²Ôx~T¿ØÃ^à¶)йÀ¬®q¼IuUâÆD±6>Ø\ôþýåŸ÷“éôÃôþÕdv5½þm~ýáæ~vý×d(AÁZ\½Ún1p\eßS Ål¶”¬ˆiDæ ²Ü%Ë)áAÔÛ¯E BÃO±Oµ¿}"‰»AŽ2¸’0Õ,üCÛ N7ˆ‚ ‹=2·o.ßOG*$ä´ñaÕ!h:°b«¿f[ß~‹or7€ÿ®5”hiË Kó 0ÐK¸í¹å,9ìÂ|à$¶ó6Çߦ‹ÂbY’æc×4A‰^êÌ4Ù´thôU´‘AŸÍq"+ŒÈrè7qèïÝ S™–ñyÄ™imÀÅbg6 ëê¿n(ÍmN‹'ˆ2"EK½Ë¤É¶ÓQzÉcÂW¼öDf‡­„Ãó*ÍÓRÛFâLsi  |¥þ 2 [ñæÐI`>™ì¼õDÇúA^ÔMD÷ ¿ÅÍ}±9Lè*àúÛû«åXèWûHŽ>½f~–g Þtrù¸àÉöZÜí§¤9üý ¶g Ù endstream endobj 161 0 obj << /Length 1136 /Filter /FlateDecode >> stream xÚíWQoÛ6~ϯÐ[e âDJ”%{H'Ó¶:iãÚ>06 •©@”Ãþ{:Ò¶¥ ö<ˆŽ§ãÝÇã}w2õBø£^zÃ("Yœz³ÕIØjë{…Ï—'ÔÚ`X~˜žürÁ¹GC’…õ¦ Ó„ð˜ïüMçÞŸ¾M?OwŽ8coŒh,Ÿ…L™G‡„Q›*IcB££Eƒ€'Ì¿mвh ©MpÜ“(N˜ÙçˆC’dC»…PÜ”«ADýùW}/Ôý ˆ†ÜZÑk£µ–5úãÉá±ÁÍeöÀí†CãNŽ’¤°=DÛZй†8,ó…y¤¾†À¥DÕׯ(§þcÑ,Q{z3 þÄ€6«¹4V [)¦BÍñݽT²túŸyÊÕµ°¡¿ÅeS™Cx…Pȧ~­—(r^¢Ø/‹»Æœõ‹µšµ¸ÈKiK¥öænµ¸—£A@C檀û_ª‡ÖÑ7\. 8€Á>XB¢¡+´µï8²aq°Äý#|èeõ¨Ql–…¥,PZIm ¨udýl^ò³‘µ¸(Ô¢ªW¢Ù)Ú›1‚|*š®c‡pÖñ<[ÊÙ÷cˆz«ñ„r¥Êm¿£ê U‡.«uó°nö/{Ïgñ*±ên6ձݿ#}ô lâYJÒ˜9ޱ×8v€A;7Ê·‘ì¬:0~F²:’uh# "ÿ|ü×RÍ 4”üñ€jQW+´¨ØsfWí =½±4ŒžÓ06Œ‚ã8¹‚ë«Ñ¶RrO*€Ù¹7Ç%­uq¯VR:6È!“ç,Ž-sìmM—–‡;”ÀÄ^?Àg¯Wf±Ö š,…YnL ëªY%¨¶v£xõÝKÐAd¹œ+Ý5““¶~ZFŸÂ…ËE)ê#¯)¨›¦n/¡Ý²åºKsúËÃlBúê£ótÂÕ˜zÌ| -Î,gÅÂôÁ4DòÁäX–s´«¨}™¡¦^yæªðì·«ül܇&J ¹³k*ôy×Ö¤ ­vþÄŒ!¶á!¶¢½T®- .7$39jµ.„9TpÆ8 Ù€ž!I¢£&+KéŠ k ðÉrAAÇÐæ{cf”dÑ.ä»w½·°2ÚÉSd˜ܲEß8&ÔU{•­ïŸCú %$lµêÈ“|«‡Ò.î°,Êʸz$°‘"“3FÂ49*(çÂu\ã×”´ÇRG2Ë;xU(Qo÷ÆåÑŒ´Øv0ƒ;XÚv0ò:Kù ×6Ô—&.Ý‹ì¥ {`7:@x#Aã´Fó]KÐ}ƒc½æn×á\— zýÿmð¿ Ži˜ÁÇ÷°[êmï¬;Œy«优·£/Šñ+´nrFÏ'çÑsÄ\T¥¥½¹Â?þ}ýGþ—-µðñoßD9_ä“|š_MnÐ*ÿxýg~–Oq5=½´úÑè×¾Ùõa|™Oú_™±³j=³i…ýíófüév<¾j±ÙI? ¶r endstream endobj 164 0 obj << /Length 1123 /Filter /FlateDecode >> stream xÚVÛnã6}ÏWø¡ÀÊÀŠI] ô!uÜÔÛÔÞ•¢Åî>hmÚ¢‹!ÉIÜbÿ}‡Ê–º XCr8< }æãx£¹ˆï§³[´¿ã$Û£Äs½–ïm8æî0켩k{‘nì¿’l/0Ähô‹Ž;ùô0™ÁFºq«ÿ£A£®ßàS6[™eêß\Ú‹¦Ú/«ÿö£iB>ÆÓùìúNÐJM èÎÉìFvŸ«º æ„SMÖu±B&òãZI]§›"Å…VSãØ‡º™h°o]fY)žë‘^¬'/Û´Új‡ûóŸLÿ¦¤Ÿ*ÃN*ôwÙ… ¨ÁÀÀ§bž¼ ‡ï_L9  èô² iUL=sê䨍ÙÙÃÝ|é[Ù¿ßEZldîí­P"°–ež'*/Ðûmy·„æûžÓ,Ck# Q%ž˜˜ÁhD‚hµ$&˜”ûÆÒ§„…në‹yÁP&«IÒbH­sÔ¡u#U+ QØZ¯‘O ‘=F—¥ÚÏ çƒŽÊµ ´ðDZ¼bØ IHƒv1ËÒP‘Nƒõf0© :.šlïÓí¨"N:½5½Ó5œì,BޤQáîË›"m¥aGZã·ìL4l‚ºŒ„Þ1Mú$6€âqÜ#\é°CAAV]Ÿ õ ûÚº—vžÈì°!EXz$K‡§–,ƒ}­8ììx1„.íUN>WVB®Zˆ7 6A1Ž’>æÉÀ€ëu%!kóÂiÅ ~ÔÏŸÈ̽à4ßeé2mÂܪ²ËfIn<µÞ½ðÔs¬ÕlÑõéB;¤â‹—‚ RVDõ ‚â®Ï$:˜ÊâkÖ8á0ËçÖê°rj=É¿òk*@!ßYjЯôlزÄ4²°=pNǽGd·¯”R{î@Ò˜ïXIßëÅŒP4kuÓí+ÍuUæÚ?­¶¤ýœ6ÛW´àETÇeV½ßÒ"©¨/¯ÇñéÞâz uƒažW`ˆ¢s(‘KTuŽ‹‡:Ùx´QzŸ7•ÌÏåNaþŠÍuš z2õ[§9ìP XЇݙ1:MD ·!- J;­Ä:Õ<“Ô:Ëêxš¸‹±üÜ´IÑ‘³ëOí¤Ü ÛžèÇÜëmÏ‘¶Ñ%Zìmo™z[>ë€:Ĥ±™~a䢖Y2¶Ÿ.ÅyU}›ë²Ê“z¥>¬Ö´1m—ç”ê5à¶Ýí›Ó i_ö?Ûš endstream endobj 11 0 obj << /Type /ObjStm /N 100 /First 820 /Length 1716 /Filter /FlateDecode >> stream xÚÅXÛnÛF}×WìcúÐÕ^fo…4‰ã @jv´u@‘脈LØŸ³\I¶EJ²uAÃK‘³çÌœ™½Z&1)<3LÁ$1­“š‘ LFŸsÚ0é™&KLáI8ÓS’Ié-SŠIS ÀSèg`«ÐÑjØ[àZ {6$‹~0^2-˜’Aô´„Àoø¡5 Ò@À ü)gð]½ULƒ28à¾gŽ0ã!}Ï ´°·|p]kDd¥Ž…½†ÿá’ æIpšH0gÑß‚ïyà8]6†ôÑq{àYˆàg ZàY…è¢p,Ï!¨<ç Cí…èI@OP)íA/á…2¦˜Åüè࡜@F!¥Â‘1U"Ä  –Dp$êI¤ˆ”À䈓H )D !(iß@9Äs‡RøHxÅ"—èI<Z“Ñ@†.d±$ÛÈ`— à\SG tU"2ŠyŠm0ТÀw#b «ÖI“HáK̘hcЄêlªrBœ(,f ªa2c‘*r †Ê.º@š!aÆ»Ðóød4Ôx0x@=XDüY ˘zéPÓx¯$òBhQŸÆV…¦z™Õ.ºâ±®wtÔ뺻ÉXÿãà[Öë¿)‹:+ê sLg½þY6)§Õ0›`L5/þÊFùàuyË.^X¤ÎuÙC÷ ý }2{U%P.0 ñ›]ö^¾|ÀÕ|íõ_—Õ(«’¸ŒdÚ](O<ÔÒëÀc)(Í‘T˜O¿Ö ̇¼ø0vtÄúç¬ÿùì}ú÷âzëòïÙøæ÷qþµL ùç·bÊËêÛo ®Ì¼9A´MïhëOû'Ð+ÌcõJÑü@þǪžgpjŸ°þ§ì¶^mIFi–uDí=CÈ–£¼Ã€Dýìà‰eç´ß.˲)—8«6MòP%å0`›F¥F§&Õ…2©Ia¨„¢ŠJ(:¡è„¢ŠN(:¡è„¢ŠvkJîQí¬ª@"ÅãdaÑŠ‡»àcS!ÆÀnQsïÊO%ë³òa]í@) q›SJÏ­ïdT»2RÃ`‚àÒ4ŒxÜi:(s\—è¼åÆëN:½':«¹76Ñ9Í1ÓvÒÑžè6'ftVp‡¥Ó™DGŽcsqºTœ3²Á^`^œØ¾›Òì'B ’cÕoÐVÙƒ²¡8±Ò6tä¡­;,%D”†9⤺统ô‘¶ÜÙû錿WPú=E¨×q£#Tއƒ’ Ç¥KÅBÒÒaètÚ—è@\¨Ü„îyZš=ñ9Ïãa!òiï9ÑŠuAí‰Ïžf2í ǹ¤›m׉Z£î1cj´žhQœ8§@Ñœ´§•ä8·¥Zs º¢BÒ´¼Ÿ>±ÉåÂÉîåOí‰Ó¸¸¢/8•u܆îYM?Jå1»Ð³æßÿüºb:_®Ý•>ØIÇ£©ùn#E?i·úØ«÷E]•£é°ÎË¢ñïñ›–ý«óS.ÿ$&u›i•ÅßÅhœi÷¿Éf æ]Qn—AÒËV¯ÓÁõ‚qöܲ9ϯoÆ ûÍ š,ÌÛ¯[=?ä_«AumNË:›¤Ž­·­~'Óy¼£ìg6.o®ãY õ^ñ­…ñ¹ÎÇyÏIïvdïgùþGÌx Ãb’Uó+6kµ…µ8þ;ÚhG>¾ÂÖzn­!µ4´jk õj}~­†)ê endstream endobj 168 0 obj << /Length 382 /Filter /FlateDecode >> stream xÚR]Oƒ0}߯èƒm²V.¥À^u›Q_Œc¢>T(ŒtÌíçÛR†[2£!)÷ãÜ{Îí- Ï|€fŠ8g³ Fi=ñúè¦@Îx¼™À€£HWÉär)ͼ $GB&1öK2ôŠ#òžÜMÉØHøþ?-òJð“ P xà(—$æXoÀ±ÚËz]ÀŠPÀS–y§†|¡µ‘]ÙÎïVÊ*6Dá QÄ™©4Âz Ù¶eÑ0½íð‰ªÐgq8bß<*åºç]ÿð œV¥]©çèÜþýß$Q_ãaŒ(pâ ¬kÙqÎ ³f|–꺖MF(çËBýkbŽ/âGXM]¢j\WUŸÞõ—Åy€Ëf€ÛB[žJ'ßâweU9+S©KgÊÕu+·kÏJv’tMÍû‚aÇæj|Ñ;7Ý3·?Y–{f‡ü¸§Þ¸¿}6o[úTôYV[uxŸßù Às endstream endobj 172 0 obj << /Length 2369 /Filter /FlateDecode >> stream xÚíZ[oã¸~ϯ0öI.Öñ&’û6Í:‹,f’6ñÝNFV£±œÊòdòï{I]¨0±ƒI (ò Фxxîç;¤ðG'&(ΉzR¬R;[ßLÜàâ·#ê÷Í`ãl°óÏ‹£w'RNhJLjèdq=‘4#RÈî¼Årò9ÑÓ/‹ßæ‹î ÉØqç’šM¨"ŒJ$áR™„rᨉéLf,9™žìª¢YmªéŒ+™ÔåuY—UQâuÜ)‚p‘1<8puÊý!„ºcÞOg4¹<ÃWEûíõꮌži*Û]?»óâzâÂ>‘Z%Ì-QÙi‰ƒÎT¨¥(—´ãÎÆk©ÚLgL'Ëòžf t œÁƒJê>\–׫j5°ÁXfH*èˆÃä'€ žµß•u½©¯–嶈i3cDeb LÚߤß5£&#ÜÖ]¿ÝLÅ]Ô.Á=e§™_¦3!D²½·B*‹Õõ#Þ]$Í-˜géÆ÷9¼9 VK7hnýZ•¯½d7×îé)ûSòÖ²ÀÞB“¯@œvæ½÷ض,‹»¼Î­¬IœE{é(%M«¤h(dì*Ké€Sn4„«fWCèb"uL0Aä^%›U…êkÊÚ/oFÛ¶M½+àóÒÍu™7åÒ­]×›uïÌý%Õwêþ)vO0|¦z%ô–…®M 7/ž¤Á Ú ^¼xÑýâå)ÄJ¥¼€õÀ6#qU0©Ò ÇÆ+ÔÀa™âOvhŠðNíQ™­^[g™c.ô††ÛªÓ›·Dwq;ÄÃêÕ½OW°©]È+¿w}ß az³¯ª·´ò½ÝE¹u’ƒ|¦I&xhŠATaŠd·EÃà©´V„3Û&¯?e/š —AÜ\~w³©WÍíšc\&ÇÖ¸¶nŸÿ@ö課\Ž ­1·æ˜]òkH˜.‘¡Sè@Žåª¸Û¹Aà1;djhˆ}©Ë•,Y{ã“*ôm ùW‹P¤V±Û_b7«½O¡Ó«ËOÇÇóËËØE#TtAÔ*•¶ŒÂ¹·n2wbS×eѸ—-ÊõÄê¢DþÝoµ!å7´£²~tg­–.€ÚýøVHC î]y:ÿ„ì‹ÕÏ1>g”¢±Ú³ÜÎ?Ì?ÎÏWgç‹«ùÇ¿,þˆÆy(´ðÓ%%¬OO2^x d~mºxZmšh¼KáÆÕ³O>DŽêSgä %S¨á“ÓsËðÉù§³_£ ƒ˜T:äB„FW°ŽË5'æø6R°4qeBQì@å¨QF“‡Û•µ \õ ²Âè¤H 5‡8…H³9·‘2´í?Îïÿv5¿¸8¿ˆò‚¢eÀ7^ÙY8°±}ô©÷»{·ÆPƒv›yÜ™P>›Pnö^§¿‚ žžœÎ/öèE(ÈK:¸ŸÆXãžîžzà‰n²öC{]í#6¾/˱GÙl¥1ØïØÓ]œ+—Ï8™¿ÞSÏÞœ_-Îϯ>œŸý—¼"¢ÏÝ–3¨1,gFyÎ`¢ãÌMÖ~ÚÞÔhÇ,E8ƒÕ‡•­¾`}½i¿n£±™ ¨ì™Ìç#ØŽ÷IIf˨>žX/Oÿ>V&PÅëÎã ¼·y%R[H„8i†È¾@Ì#ÙAðŒk´/ñ&ð “b"€gy]ç-÷c4úÆ I?ÆQíÞcÿã(mUÝIgX­G(iJ¤ác0ÓRê_ÄP•‘¡mvÍ>Ò ÔQ†¥i'ÌoÉ6õsÔBDõJÔ¦Þµq‰ûtàEŠð`5,‚%óèM¹bÜ”ÚjVµ¡Á©¶\®y§<‚Sƒ@¬º¸ªž 8Õ#8Å[ˆ1sÆß2°„çÑGÂŽ˜ÉŒ„8§/@ 03†°)m«fÖr#Ç= º5Ï=Œ,÷ð츷Û,÷0zXÝݹÑ@£³ŽÝÃÕh…^æB_{"”þÌç„"!‹¥f?®Ÿb—í9ìÞÁúc÷Þ“ãFO4¨Ü÷ÀFf¯å[ F<)k=ç 5êj²u6!ErSVeí .änöØ=}\´­»ûs0ï»™wÍt:À”vïpƒûÌZ¶r–M“Y€i €M_ös(IŽÝ›³ÐìíâQܲCˆ;œXç"S7w[ºÉŵŒº·XÁÃÓŒô@aø4ƒd3À¤˜Î3ìÒÌžÆ1X]Ÿ–"ÉúL¼}æH•ŠÃ›DïòüÝׯï¾'Q !‰èAÄOq°ÕSw ÆÅX9Ɉt÷f UŸ¤¯áõY€P™Až–œµÆÒ‡hµµ;Ÿy8ψáANu=:¡å3âÚþ@ñzá?qŒ ¢(”¦F"nUŒñÈ_ mO©|©¶uDÔ7 èAC` ˆ6ùWRÄ;›$ãû;›Á Ð%îTPóÞ3¿½˜é ¾’¸ûœ•eÔ`e´o$9ó;$pxoó$®¸*G_}É…ÌøÃøMLöVÌ¢(سNáxÍˆÐæG´‹- bR¼ˆÍ@ÄÜï-¨fààŠU°©¨Ò¤MŽ{b¼˜’…‰öÿ½Äq/‘¾º±–újÊ"kë&œõÐpÊ÷ÐpãÞšâP(ó×dVÎö¶ûÐn¹õi0£Kc_Ÿ PIå3ãQƒD4l³áꟶ…^j³Ùf­ 7‡÷ײqÍÒ¯Ùö—<Ö'N'aeãŸþK]7jô°™|x»e?ÒHtŒCÍH嵕}„O(ð}Ö}Îb¥xŽbA!ä“Ü‹6š"¦Éö¶Úú­pYE ~Ðþƒ‹þƒ…ååÎ"‘\ãÚðß+0øÿ­Rx endstream endobj 181 0 obj << /Length 2000 /Filter /FlateDecode >> stream xÚíYKo9¾ûWè¶Ò âòý˜›7–dœ][9™Àè‘ZŽ»•ínoà¿U$ûÁVÛ–í.øàV7ɪúêñI6¡ðÇ&ŽNŒÄI;YÝPÿ¶¼™„‡Ë_NX7‡óÞÈ¿-Oþz®Ô„Qâ¨c“妿Ôr=ù<}û5ûVçål.„˜ÊŸgs)Õô|fåô¾XÕÛ]_ä´Ì7y™«|6çÊ 7u³/Ë_OËV¶âü@%qäž––O˜ ÔŒZj+ 2h™Ukþ³]‰1G”T~¨ä ×úü…NÖðñ× % Öüî‡ÞM`³ðt;¹:ùǘDÆ%qNÄ–e6lúÀë2ÏQ!œBZ⌞̹&ŒGL?~¢ÅM¿Ä™4&N)Ž3çÂtòs¶E=d”7õ÷…jÚŠºª›©¿SEã°D‚$\ŠfÐjWTuðò8˜ÜH",›he ×rL¦Z0@kR0SÉÜXb©òkQPÔkPÕY½]í Ú£ŒíX*¸ØAÐÚé:æÿ±2ÉDPXÉ,ÿ¤‚F¼öæ)<%C<ÅQÌ‚Ø<ÍËÍš£'0¬çêL±0so¶Åƒ³3R;B%¹šq3ýš•O“`‡h£2/Ë]y–W«rûÍçÁX S ‰+zÌ:…ºas.$¡LD+z¹ ö?Œ¥%WÄv±ï«šœVß<`ùj»yU­þ Ù™‡çn=oaý5«ÃÈ|_g[€Ë;½º ,<®óÕmVf,ûªMæàA­Lƒÿï”ÉÄ©úÒMY_}«¡×÷%–c…Šçá!˜´Û}ÇÏ»Á°ª.ïW0=þ\•yVçkü¡¦4VÇŸN//O±ø ßKáS´tŽúNæQþCÅ€¦ÖF €1°¼ø¯@4–üj/Ú5IÐ2.ÄÇ´yëmOB‚†eð¡(~(ò|ùA»ðÿ.+²›|01"„‰[IWó{l„Å .î—™« ªmøn£NYø÷¯™âÌöF Å W6MñÎÃ̘»c )A„nyêù–•U^r¯2K—”©Ž J­ìJfc¯I¢ŸifR\z?V?)$5á´UÀe×Wß¾]\]† #JÙ§ $ƒ¦Þ—׫ٜMk|°Çß¹¬ ?Z„ü]Y†RóêÛL7cú1刔‰~‹÷‹ßËë‹ËëÅo_~Ó ±ËXê%ÔXÞ”Ó( RË5{5;]_Bu;¸ØÕaá‹ïßÚ¡4q,ÅùÝXñîüÝâÒ›rþáãÅÙ¨ã%XÒ)ÖØ°ÅÌ4"f&¼Àd¸ÏðÒ×øŽÑŒ¯²"„/w qI)Ù®óPж¸V5Éi,É’¹ðÆÛ‰1õBÆ:ßUmÖ¢ª%±N>ÍRƒ–b’µ36»¨Îݮ̣:¼¼ó$€Ù28`žT:A<æ/4^J(ëð§ëÅåå‡ËQwk¢…J\ è÷¹l@]U°ãU©[ãž/SPxLR¦pÝï宸‰å í±Çou°[–ÜÒÛK¨ Ì¥µ—Þõ®É§Û¼ÎGä fåQäB#¥…HåvL<(…žQ˜¸›pÇÚM[¯¢­˜æ@ê=ïóÅÈFÂRb€$8›rûc ^°°”%Ƽ°›omyÒn(„Òšç;P͈Á}k¯J=éJh†MWc3Ò­‰Ø­ué+’nÍ÷:Yܹ=à¼Ý}Ì3dõ,,Ø5ú;ö@Q‘¤;óªAÕHÄŠGH XK€@¡ïX× xNQëz`p^¬ßF…XHñWÈlJR•×)ÔÈ‹ã w°]3ìE‹¶îàŽš&*ÓÂm¦Õýj•WÕæþv”; 5Í£-Çã<Í¡ü3”õX¯ÁŒ<aÞmÙš–*0d«Õ&e²ÔC6€,} ‰å(T€Ç6†HÇ© ‘ÛÂÌŸçûŸâ>NüÝÀAL‘4¦h8çP’  S”®¸n>_y¸3¤ƒD†§;8û¸/ªí 6—¡a…ŒwV:ùX‡G¤3<ÿiÉhs›ÝTc˜§GK‘¡Ddÿ?ðО -éÆh¦Zt:~S3²õÚ۠ ·¤À%âïÇ·²ªƒÛWÕ3(«ËÅõùûÓ_F·ÊÃÀA|aTjÊŸ { Ú?öÕ û‚µ‡,§ŒP¨èÇ`XNqÀcØ£Ž›¹wyW8õŸcƒðz”`¡¥°Œc·TÍ!Þ!¸ˆµü¯m€X¡õ4—C‚á6Œ0Ç_Ï¬í­”Ä ûÌÜCÉ`ÃÛŒóu‘Ýîð ¶ öüÏi…ÿñþnÿª¡¥ŽÉÉ>`™ïq°ís°|9›$cšff¯àD¨LX÷4`ƒX“¦já`hjý“BW¤C ÕÍVëÁùkBõð6ÅãÚ¨ì_"`~W4™kC”à‡Pùž?Pðú ŠeºWÞ<îEíõNæ!¶ë§ºIIw_ò<ó§íÅ{Ñ&˜ió‚c{iurl¯Ä³ÍüiÒ+H¶\ƒK9"…ãvå`'¡·!쩽fÀXGñà¶Íî¾X“&§þ YÖ1 endstream endobj 189 0 obj << /Length 2695 /Filter /FlateDecode >> stream xÚµZkoÛFýž_!ì—•‹x–óf±(²®R¤Mí¬í»HA‘¨˜[‹rI)nþýžá C,ÅÑ"€C‰Ãû~œ{):JðŽÒd¤9'©0£ùêYR[~¹‹ËŸQîO{'ÿyýìo¯¤Ñ„¤IJG×Ë>©ëÅèýøìfv·ÉÊ“SÎùX¼89BŽ_1ÞóM¾.ì1.³eVfÅ<;9eRðtL““×?=›\·Ì%cJiO>Ó°å$œ^Le¡\81gUA†´”(M‰²>*˜´´ÞHF Üüi” š÷õÑÕ¨ÁÕíèêÙ¿b)$MEÈv^f³Ma¬p˜Òã0Ö á*ä›Ýf«¬8át¼±Ì‡Nä ' †dœ0îžxŸñÖgtüÁ?§`$’JÉìs§ÜÀèÒÔÏäÅæεu§NשcíÙª¤Ï–Š”ÊšÇKdâ\a¢=wS†°ÆV”Ph2´•­ý8¬©Cû…ì˜fD1 ZVRoÀb@5ãEÄw,5„kzÞöéäE•/üÑ»‡¦JÉÓ§™j&š©UhªVX›“$îZ‰Š‹ç×úvis+Ú.U]œ‘’®I.ˆ«Ážp ËY}¢òµÒ=áµ·j&#cYÍÁÁÅ:TS)¢$üaâÔœü9[ÝÝzé·U^|Š12µAï­퉻ßó? R9F‹§DHy8­Þ–èŽ*ñ9+Ý­rî õ'þ¨@ F"¢àŒoˆIŠv§Q $™I䘢7ò#pe(V :YÀµÑ6eçY¹‰¡(V×ê#È€ØI‘Ð (Ï£¥º¾<ÜÁo~ýoJΠBn{çÜ›óA ˜~8Ùîݦ´ãïþ¶qèf1Z¥—¶µÕ‹˜ €0´ƒ/¯ÎéôêÝÙÙäê*&“8è„Ê‘Ú"á.jêéI$b|ñsÔGë€ÑäÍä—ÉùõôüâzúêâÝù1–”cbHÓÏXíHˆVâÀÒqÊE@NC¬“û*V¬7. CHÞ¾6‡ƒ ê)1õP"YzÈØ&QûÑRŽ2¶YZ}Á•§2o©1ÃðãðG†¼»ZëDÖ+‰ñ“}úèöy/z³›Ux3° o(\ɯÞ^½~3yp Tì.~×ÛMŒ … ,=h†àÈ<©R@h‰`dß6™'¤)-ć{§B® ÑèžGá WQ²Þ9bÌhD±RoèÊ€¾TD HéM;\§îië•]ã“„&jÀ(ï­*Σ5çWëE4kªŒ_('žìÒÙ "¢´§òi$ï¶wmûS–l†dä“ÇQÕfƒ»q©— œ8+ðºVì( ts3óò±Ï­·îý…—3ï-GÀúœWù&®‡+Ðãð *ÌüưÉ{¨WÄ´ˆºßYõó7" Wf Må,šÍóåÇõƵ0÷ÁBsk¨›6J‰Âܘ—Þu£ÁÛ& ö¼ªbð !”¦,hûo/_Û¦ÿò—IL3cÛe—…š@þ]¯¯)zP<—J„9Ô1›^ÿçínŽûYêJÔt§¿¾|ónÏV’w–/w€Í„Gؼ|ó&*8ª»ÈYüT2ê·¥Ï2 ráò=¯'R»[‡ó8Ã`ým`¥˜òQv¿¡Íþצ@ÕÇàÍ™&iÈùñ—<¾=ílÏ÷½˜xâ{‰'!ÒGˆËºª5Ä‘¼±ø &•¸”BRM¸ôÿ¸,]¬¬0ªA¶'ðÔŽÍidYùUÈ®-ýn7ÝGKÍžsûñtÇ®óÒ¤‹‹k²ìµUÖB³UTº`u5k5·?5îo²2ZÜ®oQâQ«n}TÝç··²3ã®ËláãÞI.ƒ×ÛdPæYPÚj‡¿ž`éNÔöÂ^@Uá™û8´5îÌg··õ«"Ü®±dýí}¾¹ñLá7O,ûc;»ußÂD‘öù»÷=ݱ„R]º²Ó‹-”{pÿ‹­ïÙq©ýK‰î…®S¿¯nÞš¼QD%NU£È¸„¿çs•YU-··qH%|Â>‘Ù½‹y|Ÿ4ÀÙ^t)Ñ»:B•]¹ý¡Õ¡ÝFÅ?å–Ó òj-~œœO._ŸM'———Q Ôdجφ5!æÝŒbgÅ1´¯W<Ä:ürþ.>Ÿ°ïX£Â ÂVá.M¡â8P—¦”)»¦X͍ ®ÃW"9XÈ6˜Ð̦œæGaÍ0¯ ÆCÞõ õm=BÇÒLšzR ØÚ}nt¢„ºT}; öëA ©ç5³Wßõ0ö2/ÝyjÍ0m…,ð <Ðæ³NGTÙÊßø[#á"^ÓRl?Ðx–ÕÇà-à&`ö€õ#_mÛ†þ°ä©?zÚξýuv»nh‘ÝŒÒýZhÔë§ý>¦±"öüpCéô{¯ÕŦôé­#B¶È5Æl?ŸH9®Ûý‰ñÅëÂÅi•ÍÊþ¶°ÝÇúæ û ‡ƒ1Ú>Áì…@_ùʵÝSÛn¢nt¯œ¦ÑãÁV§…ÄÍfÙ½ lýã~‘ÄÇÿÝVþÀlÙ‚îl·æë;5 ¨’¯x;«ˆêÖ\õÙÖÀøÑ_*XØ“ìHˆAÛÃ5þ}¨/í&x[,ž»k˜±¼Ï«Ì}ôFUc÷ µ_;+ISÊÍNÒåro[¯¬/üÏ5¬uh’AÉ較‡ëgyQ ¶ìƒ=|zÛáKÑù²7Á™¤)¢ÿÖûŠ  endstream endobj 198 0 obj << /Length 2514 /Filter /FlateDecode >> stream xÚÍY[oÛÈ~ϯö¥RMç>Ã.&Î"‹4Ûí}É#Ñ1QYr(*‰ÿ}¿¹ð24e;µZ,ü r8sΙï\¾3c6¡øc“ŒNŒ$“v²¸zBýhõyÞÿü„ÅysLœ÷fþãôÉ__+5a”d4c“Ó‹¾¨ÓåäÃôåe~]Õl.„˜Êç³¹”júzfåt·^Ôåfí¾ÈiU\U±^³9WRdSÆfOyr|Ú*Wœ?ÐJ7ó–™–O˜ vF3µ•„ ÌÌ·ëVá—VcQRù©’+'ëÃG:Yâã/Jd~óS¯&˜À,žV““'¿id\’,“©ÚÅæz&ØôfDµRDšì0ª5üóTõzäÙtY8ÝC/ ·ZJÍXtå¸M´ncÓq¥N$SŠ»•sa»9~M¹®gð‡òŸc»7çëM£SÓ¾Nè!R4 ÿ ŠÆY‰|I¸äͤq¯q¡‰Ehl›y :¦Zè€4)t©:.*/‹2ÝAÇm 6É KlÖZ¸ÜÖc»ÀV-'= ٱج1Û§Ãbù—yL›§czŒ„ˆžšóu~UŒéR@±N¦À¯XάœÌáhàqWhøS‹‰–†0.…&Ó–«! Òchtg.`£:³D)‘ªˆ€+àuÛÆâ¶Zü?œ5}'&É‘:ÉÁ:‹ºY®v"útt+Ä`šã S»|ó•YN_ÛÙœMk¤w¹Î»úìcÃï£uµ J3MubÀÀ·¾Õ(JÌAo9Wšžo¹·}ÛÛ‰°„SíEQˆ aÕ"™n›kÌQƒm¿.‹Õ2ìÔ¯ó;-×áwYlë Ù t•›EÌ „nù€Ú¡1'›]µ(~w')Á=*âÎI†\Q ŠzîÀ›KˆÄýÜõà¾íáBŒÁYºÛ—U‘ט.™™æágY×áÉ-л o›‹dZîcÞQÚ› þQ!¥§Zý^C€—̼(HT?oÊ×™ÒÓ¼*óO+lu®3==½Ìëðñ¢m™Ü[U|Ù•òµeážg¬EÑÎn±ÐÀFŒh‹J½ r?yƒ¢=Å÷y\(H”YZY®óõ²Xoí¶åúó˜-ZÃMŸ²ÏÞUçŪ¸*Öµ£ú®¢ „ƒ}¨mVÇØW&ýŒ-Áÿ¾¨wÕzû|L*8@Ó6ÃÌ1Óßn¯qÞ‹“wìüäìåËã““1©†#@Ú‚ºi¢x·X[aÑú´9›ƒ†ÑùV ˆ?¤UXΩ9H;ªÊAÓØ,w×c(D›Ã(U(<ÕyOjÀ•± Íþû6ÔGo<»f›ÝߋʌXÆÑŒjÇMr"mF¨RkFa©$‘Ý&3÷¶O=B· :Uªûîþ‰? jŸæÜWÚÆ 20ŸË´Öýù\¢Œ¹`pʉU’;fv?ÀÝSGàîÍx;íK=PEe•<ÃÁÒ>޹9N ™å²yHÝΖuKCAÝå6|ì¨Û½}+W«`y¸'l&þßóE=صnjIAp°‡`×—éë Eq3Ø_Ë–·uµ[@U1Ê ôMïÎÞ¾ÝSŽÐ”y‘—«ÎÔ!]ŠŒ0Úð¥}_ £PŽB—'¶ÌF&úV•õØ©U!H˜<ˆZ-‰FO‘¨ý:Ó–Õnœ1i†ã”9ôÍßêù×Në€/žíA.oÀ¼n"ó÷(¾T8—d²(±†ýðåëΫÍfô ­ ¸ðѧÖ6éûîo¸B¼ëáýM–‘¶ôÉØkûê²S.ïÐíŽ ²5¿ì{6å}C´^r Àcs£Ìk•ió~U¬GÃ%¹9ÙKÃÌ€®yZîîº-’˜°‰@è[ú8^D™è´œ(›*hÞŒ_¦d8o Û€ë° ¢.Á¥?g9óAe¿K0DºÃA¿<ÿÐÍFK =ßbŒp .þÝ–Ëø1ÎêWç1ÒoÜÊÍ. s/y'¬ÛﶨÇŸhwr_R6ÝSä¦Ì&­ˆuGgwl]Ô‡³’8zòS*X€‘mpH±(/nÂHØ Nua|Vz›çŠšé›‹0â"ÚO)GÞì$Më„¿Y¯pn3º”ÒtúûŒ1>}ñöì8è¹r»Ùù„†²öLî>åÑF7Ãýù˶¹ÕEƒ`‡eáê:ñ/˜àbS]¹'Þdrñ¹¨ÜF3Œ\„9Øè “ž:ãXc®\}ÙHâe¡ìl´¡1ƒ/}ç› "®ÜEš÷‹õåî ü·oe}é7AÓ|Ï×IÉq††°jd4¨M[‡Y ÂY/Ž”eÑfÜ4JšNIF]KV»›ÒþðÓ^ ¹wŸ‚ïˆÃ𘠪8p§¶+£ íÞ>ЄtoØÆœ}Œj«°–†W¸-ôˆaK †].yä|OÚ µwæ Þ\Å„í»I´njœÓƒõ¤¨¥$QÕ”‰Î. J앚Û‘$:cep‰Èþ.08`K$º2Ä¥{üõ_§o~}÷âm³b†Û‚åFÛ‚e‚€üîw ÑÍexe×ÏÜ1†öEôs•‡º†=(¼_\Žš>¸ò&È#Ô>éHø'éÙ¾ 5 Jmõûi_‰i;¹ë—ß º­Ñ6åJ©‡ËzÞD™õu U±Ý­ê£=½¸A•7¿Ì*sc–¢µU^½§çTù<8€ZŽÎšY›ªmãݵ¼‹¢ªŸ¡Œ>Tkóp”ëOÛ—UþA™\ I¹ÝîŠêl]~Ùo^ÞøJJ(Ö[9‘ÏB*úKØ¿5ý¥Â²Áÿq^ÛEU^7ÿñ<;ˆ<´»±øÉöùœoÞÿ|ü~ôÀ‰C<ïú섉 ªG“®çÞ„B77y¬h UÆN½¥EÓ´=‘¶qÀ¨ãµE´&±¾_­è÷ׯQÄ¥q»—ÒÌ=Úé|Ôqœ#ÙúkéîdÖRáÑœ¡Z0juWd¢°9Ò}a{ìãáqÔ>÷ÿÁõöÍE†>Õˆ”vnÙ™Q3‹²Ð¼9c¸nÀr#ã`!õ•¸+*åVN®Cô-ChøÜ ³Ô¾P÷2†óÀàf0"èâfÔh¡úW!£FãÌ«÷ØìIJH ­qGcz2Úïf‹QŒuߘŸî5÷YºBº¢ »ö^Ä>¤³wüÿ?œ¹‹¾4)ßýóøý wïqzüj´²XM²îêöE, ±•®ªÚÅò°Y¯nâ!Ç5«ñN7–žuñ9¯ËpiûªÐG†©ô‘[WaIÃRÿhnÙ¤ endstream endobj 205 0 obj << /Length 2605 /Filter /FlateDecode >> stream xÚíZmoÛ8þÞ_á[,P·æñU/9äŠ6M{)Úä¶qoÑÛîÅVbmm9+)Ûö~ýÍp([réXNÓ.Xˆù&rHÎ3ópH1àð' DJ±DǃÉâ·¥åÕ€¯Ÿ?®ÝŽZ-ŸŒüí™1ÁYÂ1_¶»O?G³ôºÎÊáH)èƒáHk<Æ:¸)&u¾,°Fev™•Y1Ɇ#i´J!‡¿Œ_<8¯7Rö”[~.fÔSˆ˜Åƒ0ÖL(M’>9;{yüøôÇÝœU(X$èݶü÷P<~ùæ„L°Ê8¸©jÊ]Àâ £L=s‰b(£àf>wÅY¹È‹´Î¦”¯ê2/®ÜÈa{d)ƒÍÐßù¤3 \Ô´¿Fi@4OgJ0)ä­}%,^5X–¾N@ Xö—ç™[¬s¿Dš©D÷–(-¦Ød0R±a¡4ƒH# U¾<>%5ûË!)g¶1謀Ö0°möûЄA:¿É½)Æ•øfË-B¦ÔJ±~Ž„€ ̳âP GI$ƒ‘¯c1#TóÕ?vwL:¹¤ÿó,-‡"ÃhŸÑh°6fûÚ©Ún]œøÞöþ«-ÏH%Ó‘î(Ðç«„v^U:{òâø–Q&qpòôøt|òìäøõD+ ÖVs8V„V3)ý¶Úü¾m#°ÖÙ[÷!¯gTš¥üjÖîÁŽäÌP¹’ç)Hî*»NKg}`=/Ð6}¢tJ?ÓeM‰wÜð …Æ\1¯Z€-•‘ê€S Ì<ÞíãLqÝ¿;Q0t,º1Ú™Õ˜€‘ˆ¹Å5mŸù–@Ј’ˆ5§¼à¼IjªR¾ÑbÅBî0„*Ô-,¨5°[/´`±ˆo…B§Û³“§‡Ó*¡‚ªYÚlxÇyÂjJð­],¼óE¶Õ}®'׆ ¯a"µvŸX•RÙ˜k5ÀÀº¼ ²e‘QÁò’ ÀW®èrY.Òº:ð­×ȉÚËnC÷öí«WOŸÎf‹EUýÇ×o³‡ý•é/Ð"&÷q½÷%UüÕ¤ò %X²¶ùÝ)Ôlöp±xèE0xP}áôFšs&"ÑñûiÄh»ˆBuf{GňX"“»ìÀKædçúG=×_ï370âÉÚ)Ágð;©ÙÈQF R‰.´ïOø]HK†Ÿ}E”Ä\pà+œ{Áö`£œi#ÛÛaâÆÅh˜‹ßÅh&Ãèv2Úé·7qø"-Ȫ§å'ê\TµQ$ILeiíê䌜/0¡ƒçe–Ù>䎑Ÿ zc“_•£Í@åóh¼îyVde:Ïÿ›M·ú´Ú ï‘0ªåÓ0·òi˜A…¿ÖEÙÄ%ýÖ³¼¢y¨ÿy0dWûà A 1ã:éØ3´RÌï#4gQ¡’†)ßEè[$Ö$è?X4?#6m6÷ |XÔLJíÏjºS½Í³“¿î–&k¢»m…—I$,L¢?†IŒôW6R&„Œî¹ÞùÞÊ)pÞñ.K/Ö˜e%#ÍU`URìÔ4ŸË®¨ÂF²l < f“e1u5tÅTj-ò'úþºÌ&y…>²Ì !œ@ÛìÌó÷Ck}¸ä{½¸ÿ$)’Ñ¥–—ßðÚ‹ pÁ¸ôNI³XÇýµh+¥p+Ê5¬¤üšÑ-à¢!4fÄ#Îýí·#Dິ°F껈ÍvZcng~}ì"»0RÙ9Q™e00± (@va—½lnÔ®@E[ð/ ™¤“üzBEOS«üóüj†‰šö¬a+ŠáTÿìh|Œ‘#c‚óñë“Óç”éD 8³½¥yQQ‰"&–6„4A8ÖCd”Àø9a´.¡”BFÕ+¦”°ê„‰|³C_ôˆFº\“:««oZýÞ&¹ÚëwBé(º ÙûjžV³ï?ráí7’ÌhÓ§ãh[Çr{Çáuì …‘=OÜ 8Ét(Z€ c¢ó if´p1ð½t¾Óo=*N^X Ë ¦©14`º(ZëÁ¦sõá%å¦CÊÏm{/% œp¼a&¥Ä’”˜ÁÓWÔ{KÂ,b0á °°ˆ¡3*ð"+1öw1#'䟸ù7ýpC­»úé±½ONÆx2ækw‚™60ß %^UyM‰˜^–Wiç`צáw”ŽHh›µhÁ„E &rWƒ#x.!¶`G9ìhhÃ͘ÿ¸=ó*5PˆXÜ)ÊÞc”ßnõÚøz—ÑÈvŸ=8¸^åeáJ¶×ië¤Uë>‡WùGw7J€<Þ{KË:;@8úçÙÉѱ×AÎt´’8G=Ipúøº·NÀ|mApM:‹;$E×Ù@›Ö“ÈU®ñ$¿üD#ÙàV-äR &×YY¤.Xã$î§Î·§¦Š4‚Ž_­»»õm Vwž¬¶ü–h¥­xSm{`À6‰=×ïó,­ ¯f$m˜}· g@ðõú pЄ±œ¦’®e(³êf^Âp¢y>òÛê]ˆˆBÆ£x aX! ¾ ùù>˜B%˜XçÁÛr1Pî>s>8ð£ï• ^' 0ÍRÅ,NÜ!ºÌëìóQ%7vëîaTÉ¡‹8²…ˆšIVÖÞÀЉY¸ÏÉ;¢³ (Ž`õEuÔ.aÕ ˜lø×æÜ1©ýQ¡p¿¯ÿ‚Iô~¥qå´8Ï~»±¯‰|k‘´÷”ÉBh™þÞƒ»>>}ë5HJ´#T]ƪ:æH©†uê`ÚxJ˜"Ì©#­ót¶@#Úo&õM™uÿÙ™‘“¤cIÏ|s|zd_9éàìÙ%ºÏŸ´çùS´ñüI·mR´a“"}Ëó'…‡îpçO§Ç?yÍ(¢Hv½3âIû¡‘,²Ò‘3ÅVa¬&2€«›„ÁOdŠp±|e€´ôÔÍà±b ËRRm6ÏtQS-}­®¯i!‹©]%¬*èZT(¨œ–»ÑÇMy‘.\ ´¡Í¼â™;jFÇ>ää6ÖW¾°*0è=À#hŽï¼zîP–Üéu^?t~ÏÁŸ¨]VnàX½F$ãD´G|ú‘¼©/—åv+9umÕ’*AEð¡ … ´Øx`QmÅ Ãð=²éç‘õ†GŽ#{C»¿C 4ê^ü±Pˆó°—CþòQܵŸCŽà´(÷8¤ôvÈÙ¤fàAnóR$÷ðòc¿k¥^&z¯‹Fz_µòÁø*¶Ln:±15$ÿÕÁ"ÙID¢³)-g¿`”ØÎ†¥fZꯂ½}9ØÉÈ0ò¸C›<òp=)£{ÁîËm`×´' †“¨Ñýµ~ Ì ÂÌF؆Ø×t“=zùø|ì¿Íí8Ùgz‰O@Ûãfÿ¢²Xe endstream endobj 209 0 obj << /Length 2846 /Filter /FlateDecode >> stream xÚ­ZmsÛ6þž_¡é—P½ €HfÆ×q9UÆ‘¯¶Ü™LšÉÐmkN"]’²Ïùõ·‹áÚéuòÁ¸\ìvŸ]…(üc£œŽÒ8&y’–ÛWTí6×#ýpöþ3t œ8”o¯þy,ĈQ’ÓœW.«Åjô9:º)n»²Oâ8Ž’7ãI’ˆèxœ%Ñ®ZvëºÂ7IÔ”WeSVËr<á"‰óˆÅã/‹¯¦‹þpÁù ¥DÊÇb¦®˜Œe$É,!,N´¤ge·kªö ž äÒ%O$áîŠòð|ξž_MÏÏ µgƒ”‘”%–z}:¥IÔÝ”úán,dTlvfy?æYT´zÑ–ÝO!ò„dYî 0=™~œÎ_ç§‹¯Ç§ów!QÏHž¥Ž,!æ$½rU±-Cœ¸ Y>02òVu‡Ä£Iœ¦„q0>‹ š¨Ð^}è»^ée¹)·e…JƒªÊùEµ ‰Å(õþíðäbªÔ…§YX]p+Ëþ\[Ös]ß)/øÄ=ô Š]hYºÖ;Wu³-:¢¿‡èÍ)0Àï'–gð7!©äÆmÅlPÿÑG+c9‰Iˆ1ÁbŒ×Ï_èh/?Œ(Àø^‘nG I”r›Ñù«_uTûÇ28.ÏÅ‹sslS«À±BŸ²¿çX*ÿÔ»±äÑ“æeÀ“+ë$Ò\¿Ïâ>)°èËà;FrŠv3¸ÕCVÝn»P¦ýŠŠ~u\*©ÀTÚO§‚2ï„„ð$¶Da¨ÙƒsB™|d:kº ™ú¦óãIJ0]I9C˜œYÕp¹²hUÎNcÂ¥ø{Ά++!©xg/ëªíŒaR—:f{Ë4uÝ…ÌY‚Qa©~ÒEóT×g‰÷þ¦0õàÇÐA)¤º@6 œ#‡sTÂKÇr/ÝáyµM=ÁóbHlR†r‚d ÖÙžjkÈ´rO±q_ 6ùBÁ ÕˆçNl²A‚jÂÈæF?f¡bÅzc/æ$—ýÙªø&Ñ­þÀH®K3T§ÚIsqÔvÍn õ°$aA4ã “oØ3…C*Åžªâ¹ê+ud}¥ÿö¯œBaÝ®Wæå¾œöÛÂøâA9~§·u‰V©eeÕÅœVш­Uä68úÒRktÍb€å²«Ñ΢—Pðè~½Ùè=¸JËb]éWÚ«•¯[ŸØ)¡"¶¨Û®5¬/•‹K½(ôw·ãIµ~»-·uó`®‘ÖýFËr³±upƒ6{0^Øl0þÒhYtåJïafÝxʃþÂJªÅ‚‘˜öYe~qròDa‰t®Ça -Ìç9­¿r{w Iœï…¥ ‘Ý…7R7~p^*½º²ÕºÚíûÀ0·_¦_1V Ì„}!ú´YµîÖÅÆ˜é¦Þ¬Ú½+Ю¿•öŒž Ñn2 xwÐ`X]À™IpÂ>2Äíº2ÞEÃ7ö¢áËBÿqÂ$áy4»2¯+ŸGªyáï鿳Óùá‰%WXÌî†WwƒÔ1Íà>j±"2À ñ_À€o%w7ƒ\‚W…æøEeÎ6WS=YyP­ñ„EC‚MƒØ«×†Ç-À•Cbn]Oe)I3á'nããʼ‰1hLá~k‹2mJƒ›ÏܲxøÜs Õ¾ø²¤i»G Ûh“Gϧ¿^LçGÓLjCPíA:J²ŒðTì#Ž$u pøžT’à)²¢ö›þl$òÄ·&Mž nB°1É@ $,À“ÿG0&R’3¬t›e%S‡«@†¿X©‚}ŠÔÁzLúC(IyOñ3 ·%Dˆæy.èî˜kw£xm •a¥ŸñfŽPÝ.ûAù_4S·ÑVª¶¶ÒÙUÉu¢ ‰ËÜŽs@œjë³Â-À!ˆñ;È^+×{þL˜%4Ìü0ð6T}¡j"—|uÉ,—k¼JKý²-ÿØ™9…{½,OsÔ¥ÒŸëô DÿëbÌ¢•9ê&FØ ÐÁlOº§§øùèâì Ò_0&)@úô'I&½~^b}Q^§岼íŠËMi,K|t­\«‘ÙjÀ”Åî2˜)aË]Óx™g°`äéÄ”Ø ;½{H_:œò>¯;ÅJö™ŸÊÆl. 5a&Š¥?’Cimõëû5h ž6ZaKzmw¿•M1 jVõG¶ý‘m/ÑÚp¼r¦]RC¿Çe°ÝÍm‚b(Ž•C·ò¶á”dÃÄM‰©Å7¥WzÕMù#² Ü¿$Ûù³ùbú~zö&œP ²þÔ߯Œ±G6ƒ÷R(›Z¸;Ô £à_Õ¯[Kº½õ$Qc¯ù*¯ËÆ`"#‚Úªƒ Ó<&A€‘ºXô_!Iô.Æ; ÿ=>Ö¼Mg®9`¦&[Ðà(Ó$A)˜ÌÝKþÝbP#ä_ž•$<Oç§g‡8‹YLßýœyÖ£ñCã*Cp¹³7º²×Þ«XÍ uÿW^Ýún<Ä¥²ÕN54—ª·(›ÖüûAª…ñtx{zz2=œ…—€f†zái‚ѧ‚ñmUp¡R9¾×²Y袶ëJc2\CØÊíŒ:tÏ—ÞÅžt1 1ÃI ãÊ Ú7þ£B–¸4Ï‹tllu*QÐîåBÙNŸ ’ï!¿“éü@˜ð1Š“)¤ªùô«€¡?}ûaz´À^–E³wPgÇ3LSjÃKE°¶7se¦efz@Káú×ÆÇ† gx* =Ør9ø]¤›íÌmy[4¢¿ì[æ~º±ª;‹å];ŒÙó#ªé}±#!|H 5ˆLƒÔMƒÏÃþnêþ±¡çp¥VâÀô´]I 5B¿på—aⵯ[Wÿñ¼^ÁÁ@$òjÂÅâh±Þ–á2&‰F˜~SSÃ^8õT‡ì )W^øÄNøÀ;]þx¤ÆÝ¥y¾2ßY8ÁÌÏ áߥb|–ßáûOŸ>Nì6Ðyðãã»w77Ûmì¾¥ "Ï:cøÝäæõvû:(³t«×OÕ·ç²WìÒ¼Hñ^¿ÉÓÂA䎅ž~Sá1_ùÍž l·‹zAp‡Ë_œ3ó³›Ýï˪lÝ~+WOFyN¡m ÖÁXBfC¤²Æ@Ç8–n¤K=Q”Ìt¹é°î#]2éÒÎ5ñ¥žúJÝzw×–¦&é¼QmÛ‡Î6e?“Î`l¿2-¦X(‹Îg³ùû7zá©Lû¢Oþ86ôIð ‘e§D Îm†gÝ ÁƒÎwÇÁz.·– ;©oƒ±°§· ‚s%b0RIxÆëY/}Æ÷ì‘Y à͵>£7CfÍï´9&À%šªß””çqsß OüƒJÛ`À§ÀǼKÌ´À}Ýké;l¦ða˜ «øÃ­úÊe”ØáÁ²÷Û˜ž‹mÅ0×;Týðé¾Þ endstream endobj 214 0 obj << /Length 3055 /Filter /FlateDecode >> stream xÚ­Z[oÛÆ~ϯú©-÷ìd€ô qäÀ#·¶\ Hƒ‘h›8å’Trœ_foä.½®œžÀ\’ÃëÎ|32™`ø#“ORÆPγÉjû ë§ÍÍÄ,Îß>#–.ÂÄ£|½|ö¯c!&£çd²¼ö·Z®'¦G·Å]W6³„16å/f çbz<Ëøt_¯ºjW«7|Ú”×eSÖ«r–PÁY>%|öqùîÙ|Ù3”>QJEùPÌÔ“ e™qD7’ž—ݾ©ÛŠ/KŸœçˆe v×”¯.äêâòèh~qa©¤ ¥‚8êê”–dúy&ä´ØìKs[µêŠAsŶ\ÿãK0ÆiÀx~:?_,¯gË«ã³ËÅ›˜„„)ódˆíN`óÜÑÔŶŒmES”ƒÜN­¢™$,(“é$! awØuàMЭ0«qµ6·å¦Ü–õŒfÓ.ªlž#.Uuz9? (8’gÔ7¶âÕÝB8™eÕÖÏ\šû} ÝÞ’]ïšþÓò)Spju&†c d«Nù/¡9ë˜n’¡Œerïçï¯æççgç1µ2†( ´¢i>]*ÑÔ“ÝÜ‚ …RAÝ[•išM?U7æYYïö7·fÝí̵…/JC×¹­›²ÝoŒƒ@Qž",C…•† Ù´RgW¤ð©ŠeõdU´eLûŽìmFÅDl&Ñ—j³±›îŒ ÃÏŠªÃótºßª·Ÿ@x0Ac^ì® å'íî®´âÕe¹.×h–’MÏÆ»íô+ÐÁd%ý®°®'#.xîæKœ3*£àlº.ºÂ<-tÂ#- <øZ6»”¿énÍk8 ¹’!<ß.LáU3ƒHœ%—{X5u̾4#HfòÉù‰‚¥qi‚§6ܪk'ZiϹ€d&G!p×ìÔGŸ+0g4]r”¥Ù!c”‘ÌË+ºD(#!C§˜b WäIÎÏAÊM©Å¶&®NüÕBr$¸˜õ‰*>âÉ^½›`$`Û/šp;×Z‚ÍäâÙo¦L„L 0Ës®w"ê‘bÚ”Å:ÂT(ò=˜ _„éC †œ%¨Ð^½RV¾ú¬T¾êîï,g‰ƒÜ/$rBb-YÀâ…÷•01JÀ "ňåìáÄ;#20i1äÉäz/eL[urYGÜÇ0G’§ß…7Ã9Â) yCþl;k—4 &ˆ ¦Ùíº˜õ¨€XèÓòÏæ”š=5r[©Lp[X„÷cŒQBaÉGIdÀ†rÄP'©FÀ3Ê…ÃÞ逺>»ÓòÀH)’"í_Ù:ÿøöL Á؃œî­P%ッÛê¦.­ì§GÌ• 8¨=à*‹~¦Ðõ‚Ÿ  TJ2°gÚ¾1ñè<>‚T9ÊeÏ_Cv>½3Xé  çH(= si»f¿8[¢¨(vã„H$09€:áhK1ÂT\à«¿Ò,uq…kÿÊGmÖµ-Ô)ór,§û¶°ž¿×a¶7¿¨›Â §®ÊMq­ØŠÕ€ÖbŠ‚{†Ò­ÍXè ; íqã"ê óMð¼ ‰{ü­!ÏV¨Önm1”¹)Ìw·+N;óv[nwͽÇF ÌVåfcëz±QF»·nØl4Àعs¡²÷|à 'N¬qû¸?Œ‹ËÓÓGbHÁï„<—iŠ2Hÿ×A- ^ÎòQ\ƨ>]ÝãûȰqÿDaòn'uÕUÅÆšév·Y·£3ÐV_KÇ£ßäÝ>FuêRŽ÷.pÀزLf#+,ûðóø1õ»/{¢†8P6R)•ŒÀ•KeäA¥„:Jš²°P†ò3ŸªšÚJ¦éÌ—ü:wy”ašÆ @T×3é…ò¿V8Õ CU(Ô³6k_×ÔöêZ[Ú0e¥Ù²`]˜K«[Õ ¸ ›øôäºg§ÉnÕ‚³_áÓDk†ƒ.fyr¶xu T2ªÖN-Lg¢VU8v …J*þÉpk¤8”Iž¥Óª3·eQ·NŒ¢ ô°+‡ÞZÒ,Ì<&wÛÎ?Ë¡c)ÛRSû@'M¸Âb­Ïl¦å•EkU}㈠ûÙ Õ¤¬þ[hú½º—HBíIŠ?1áMk¿ }v×?\­^ÒéÅü·Ëùâhüm:á¦üŽ ¯  Ú)¥6 ÎŽºöhA–À,0 Íü;È@UßDd\½pUõ>>W‘›úDôC,ÚlÛ÷ÿ&ñ1dyp—ž:|9qn¦Ó¶„úº¶f«£%+íýAé?4GYÞSNªv礳²Ÿ\Ûþžåà¡soÀ¶C³6´ *ƒ=x  ãÌx”$·Cc¤o5°€kk‹ÇªR'he>iË¿öfD¬H‚i"Â…%¦£JiÍë/•’Áª˜ÕW=SEp§° Гڼ~mϯíÅ©ìvÞ|Mo:’yÛ=ØáQ[Àc9¡L¿iºeQ»‡jí°ËÓÇlüJ‘dñlÔNœ,–ó·óóÑ@Í Ÿ÷\ŸB¦j†n+õC§Œ9-Ï[×êoïÆqr½k¶Aß\Þ”+B€š<ª— 1{$1ÓŠÔÇõ¿Q®Ï°çz¸ª¹w¢á±ŽØ[Vy2h‰!5ݵ:g–ÆÕq³î§ïvöÀΚ© ˜«ƒ~­ôÃÿÊZAÍþùøo endstream endobj 219 0 obj << /Length 2574 /Filter /FlateDecode >> stream xÚ­Y[sÛ¸~ϯÐ[åN„âJûæz•­w;µ•L;ÙŒ‡‘([3²”Š’·é¯ïw"hÈqHйá\¾ˆÇO >°J±BçƒéÃ+îF7wÿrýÛ+Ö°pÔYù÷É«¿½1f 8+x!“y—Ôd6ø8<»/¿l«ÍÉH)5Ô¿œŒ´6Ã7'¹îVÓíb½¢=ÜTójS­¦ÕÉH­Š¡0'Ÿ&¿¿OZæFÊJI+ŸŠi»b ‘³|åš ¥ƒ¤ÿ¸:?ÿBlûJÁxžƒ¸[x>‡ÌÖ /OߎéM«ÙbZn«ÚO”þ1=‘ùð~½ ¥è{Kß_¿@Ã|X½ÆXn†N„ÃÓ‹÷ÒŸ‹åÒ¯®ÃÂébþ5üÿ¾ò‹Ê%,º*·‹Çi‡a°®F$:´÷ÂŽ„bÂx‰—Õt[ÍXP-26Td,7™_yzù樂dº] hž Ð[ÇôY®èiéI:ûÁ¾þZêHZãõ§¿‚â‰:¢~À©Ok~_ûøËÚQ›-Vw~h=÷Fòz#/µ·ܰÞnvÓínSyß+ñ^.—_ýä®þ†¥‚M¯+PXÕµ²îR]0•«ÆZ§7—âöæýÙÙøæ&e[«˜5¢Y½ Ûfbøxb`Çå®òŸ ²lÆ(Ķš½Nñ\‚±/ÆoÇ—“ÛË«É훫÷—¿¦D N#UG†uâE³fU>T)RÒ²!ÕPªÃ~†å™7dµÞÂæP®ô òbæ?«eõP9Ú&µ- ¦³H×äHßЯsÙµ6ñ‚o8wp–^ý¥‘«q_o}Î×›ö¯OäõJK[èžÖ•F€,8XÌRºeŠå*”{;~{;¾¾¾ºN©•+&e¤•´ÅpB¢ÑKGvÿé2Ë–T ï ²´ùðóâÎU«õîîÞ¿o×þYã•_·mHoªz·ôEµe<‹r)8R&G@Ó“â˜|™F¦e]¥”·Ÿ¬u´%lšò3Js¦Yò&]û-(=¿ )1^Q¶Ü=ÐìgŸ„6~b=÷+?»ÝöiŸ«ªšQ.@F͇W}j>óL¡ƒ/bn® ;/8gÚèTþA&sf$«p¤®r[úÑÒ9 †œ8ø_µY ýÝöÞËaÉ|_<1þP6nŠ© ²&Á/wxÛ¬R–¹`Yž½8AI˜ºY\yçYyn‹y#ZÝ ›eY¬ù—Íšþô¸€=“ùR³ÜæßÚpÎr‘w‹K×d¤®Õ`ʱž– A¤f™ å­¬W¢Áÿiƒ3Ú ŒÒŒ+Eáã'>˜aò÷g„ÿtK édXn^ýÓ‹˜­»¢Ð ; öÛMUÎl ÐÇak ‚‰¹nË»d) &]” (í#™j™~Úï’`…1ÒY5muY¬2Œ4Ψ·¤âmË1ãqÎ•ð…¶ºüÁ Ë"úšIÝ.Jï”TÜï/XfÅ“!é4&S0 M³“0{4C´´ÐMIò€¢JðÎ8³B‡wf<³˜72W½ †±ÝÕ(Îr'6ëõ6e> ’¼é×>< ª$ZФ9¦ÃðDýDQ‡/z «Š˜ï¬Ú$OR¹dR‰ŸGukºójaWó¶åÚCtèP‹üE§©mzß!ÈïV»/×t]Ú=LKÔÈB'?=“ïU}ô²èÐu™½èر@mhìÕ~ÂJõ a8Q˜/ºñ›.ÿhdeÞáw»W/25z°B}@~a{ÉæÀ%†P®R¥ŠüÍb§Òº!°åF6ÛtÙD㲟vYaç’Ÿwp¡úã~½œõÒŽO¸ÍS˜íÝÂÓùäþR MêMÝEÑnØvg/ß_\8̤ÔÒÙŠÈrfsÊ`Œ^Ò î $mÆ0ÿ¾Š–õŽUrÇ”$Wß¿ÿé‹ÉÎÉìCU®`ÜùnÙ˜“ýEegÙéåß'²ÿ¬Ù&ºüÈ?1+|LZBsûCVè"¸²}+ŒÄ§v·ˆíÿSš¢O endstream endobj 225 0 obj << /Length 2554 /Filter /FlateDecode >> stream xÚ­ZmsÛÆþî_Á`&¼àÞé'ב]g\µ•˜™¶ŽG‘„„´âþúîÞ @K”9ž±Àa÷vo_žG:KáeéLsN2af«ûW©½»»¹ÁÅ»WÔÏ[ÀÄEoæ_—¯~x+匦$K3:[ÞôE-׳ɛ»|Û»ù‚sžˆç !dòvnD²¯VmYWøD$»â¦ØÕª˜/˜ä0NSˆ)ï0_u>¾Å  )A“O‡-¢$“zèZ¯èn_ëÊ‹dÒz÷ªF3¯:¥*:ðŽNUxõ×T¦~Ú@ì˜è¢kUW¶x`TVMy[Ùj´Â¿Ë}5ÿÎ Ò}AÁ³NTÓîbê°ú².æ¾wòÊ Å·1©L¨˜=¡WP[¢v€Ÿ¸<¶¹Ì Ì›®0¸G}Ã8¦LTg›ˆÛf¡ôqa>´iÙ,<ä7ÈîY8ØÐ¡…°Ÿô°ŠÃ¬K%ØûŰÛQ3äD¥,ˆ´=ZJZYA­wf¬ó6'Qu^Ä \zm£äãŒpÝ\¦DS5N>¡»ÜãÐàø0÷†J)W6=Q”0ÞÄÎkLÌx62ñryáLìº4؈+ÿ˜~"ÿ~5ƒA,(ÈÈ™1*­ˆ€­›± Ÿpw'ü­!tà¥Ã'ê•P¢ÄÈö^·õÉ v–Xn"k÷;H ýNfLýx¿¡þ@¥‡‚ „}Û~¢¡ü¢(©õñû]Y\d!ʵµ=àR׫yr_ä4ä›ýÆ]_ã _(ìMóm\ØXY»öN“ lÔ€>F}!RC8xíE¾Ú'(@¸Gžè‡ ”€ ’r¸EŒ+ ûÇÿÀ‚ `î:a0†*pËB¸ƒP#`èjÄB¦à>)Ì:ÕËÂe§ƒ2=*>nä0#nn£èj»ÉW¡ —Õ˜E0•Є9 ô84µ+óëMá=Lµ$J||^·EPž·ú[ÿx³<[º!TŸ÷çïüóÜ£ÀÒ‡ZU·¡ú®6{ˆ¬.Mû–¹¨ô`<8¯X-貺lóÚmBáZexßå¼»™Û–õÅ]ô$^úìYå´â›eëž}ÅŸ[?§Å…ãë ”P•E[ß(è%IU×m8àŘña« c[nnýEEGp8•˜×&ä5ݱˆU^E"½¾F»B¬ï/æQ”3ƒãà0 ]¶#ZÄâu€£ò™Â8˾Ž÷àh÷Ùsð¾H!ï¸9 ÞGYRè@_Wò¯‹ˆv*Ôi´CÊËLµ7åývQÌ >댞D10*Àèt¨xªp!*úÍL£¬ÚÑ@'¯‹+gí$áP†(A"C0þ²éªí—mÎ)`L6Âà«}®O2[ªGõ£Gu¦ ;Vú¦3dU_±‚MÈ—ðž—‘7 ‚v\±ÝD gIþ,ƒ¦Añ¼M~àóv3Ez¸&JfO’(HJ³áw­ÖÖzß&¾™peFPqØÏðõ <|ô =oÖ:öÞx ¶1-^_BžGª%W°íTÛÎ(Rù-8‘« "ˆ»&«½ŸÏ–ÿùçYžJØ‹¨Ex*ªæªwÚè({ŒrU:ÅUû;ñY¥GUŽžIÙ)È*Šbêä%j£'®1#¡J9òiÈè¡:èQÓìÿºçø*ÝAÖ¼Z?¹§"²–‘¿! W3f›¬ù6x‡Z€¢¸âOú[L9 Ÿu£Ä¨`b\AñquÅŒŠbã[e@蘞$m:P.8•~Ì©t h:q¤nWÖ{ÿºG*vüúòœP'lPåüÔMùûÜ—0˜Ñ}hÜuÑ®åQ•¼oà @ÏM κ5g!f²3?|yÉlßXHz±“.Õ¢ßð¡–%w¥ëyN|sWï7^-ž‰èp&âžnó•:ïá*۰ȼ‰Rj °éð,–& /!1•4©.ƈ;{_•m™½¡@À"zu/¦È´Ì‚ïŒw@¨Gúì4ða%¢ŸÝáS„d@ÝÆä¹#—°ŒÉÖ_Ù¸Æ-6r+Ô–ÿ¸ǧÁ 'àGƒ³Zw“ÿ¶AEŸ¿r5i,“}Ø8a€¾CµÌ·>g*ÛÙQÕC‰ñ´;~Š[nFSö¬Ðø³Â©có]>ãXª~?àL¨läû Kô›£ŠtG5ˆéË_Þ¼9»¼Œ6fËkà 5ûÕªhÿ! Âiz…D»]í¡uïT4F2©€SÙ1‡JT1¢`ê)H&ÊâÜ{­P§XòFZ±Š,¯¡§YÇ (×FÅÅitf)IÍHéÇ¢h´–cÖ׿k¯Êõ$¿ª# Gh¹“ž¯² =øPÔ_ÎëŽ&\_9Qâã#­L¼£o¥OÑ.Ø“™ø!Ót2"YjBM÷ÂÍ&¿m¢oŸO+Ž9’éýˆƒ‹ŽHÞÕ¡owÔ¦âñÈO 07îsÿ·OJcÍcCùƒéó)¦S{Vóü" D•›Sœ$–òãVéQ×— TħPQšö¿K?ë0á/㓌GÛÌ-3¨òÍa$xïÿãµ endstream endobj 232 0 obj << /Length 2551 /Filter /FlateDecode >> stream xÚÅZKsÛ8¾ûWè¶r*Â/œ[&V¦<›Ø3¶²ËÅHÅ-‰ôŠT¼ž_¿A‚‚4¶ãÚ-L`£»Ñ¯Ñ£þð(KF‚R”19šoN3º½Ù‡«_N°[7…“ÞÊŸg'ÿÄù'(K2<š-û¤f‹ÑÍøã*hÔötB)³ŸN'Œññ§SÉÆ»rÞU©gØx«–j«Ê¹:Îh6ÆâôvöëÉtæ7ç„<“K½rÍ4í³‰±Dr”J†0e–Ó?ÌóûZo;Š`$€fb!ØxsJÄxW7V´oÀ¸+ûò§ÚVšÎh⾜`Ž2ÌJ¶*oTm—6+e5p6½²# …Ê[彪–ƒÅ@V|/já–<ÿKÍC0Uê5M‚1µEN0Ñ, 9»RÍn[Ö?¹¥ÆXŠR’¶:øp}﮿~ü8½¾ŽiLDmWË@F¶/#?juæµ}¹üÇû˜$i0ñÏŸ¿Nï..gúéü,ÆŒ>lœõ˜‰‘NP‚q»¦n¶Q;H$ÒªíÓŒ#™ P%E˜c;YVîr+Ñ÷S8|],œ€çgQ %ADÈ@À/Ó/wÓ««Ë«G’"‰e¨gk'âD"‘yê Œ²¾k›ª¶–ï¢.ÿÖZ|á¬lËS<®v÷+»,/Yο›Uá ~ž×QæÀU8Iª˜¼[ƒ!Ge\Ëäc±^» ¦€)5¹ÝÛ{ ¡ûfeŸK¥ÀwœSH2‚M l8ãå@yB(b)±ôóºÄmDú·5gˆ3>J†‰u°¹¹MF ˜üu” „ÍÒ͈!fj=º>ù݆¤p[LÊ2fhq“¾MdSÆPBÞhS–!&ÂMþXfÕ‚Sj×Þ@(§>”ãñmw´eœ£P fš oS•öN¸QêÈxç·L“Ðq ˜‚#$9¶!Fب¼‘—»u¦—TÛxx=»Š+ÄLD«ôh0ÐKR6àÍ*»tJø;T½ýì;¶È›Üѯݤ›1ð°ÕÂ";³Ê >u°Fô±ˆ±rx$Ü-7‚%aHqa¸ÄùÅ/ȞˬŠHÞÆ\Ǩƭx%À¼z(T‚bhL`Ä:+;Ç<ÀóÇ0‘Žç¢jT xò¦…]nh ©›Í‚k±™­:TÌ×»… @\HU»Ž y•öâÅÌ=æ°ôã|¼° TnÒì¤Çmœ°ƒ¹I4Oö¥gRúÕ)wžïje¿,;Óî§þóàÖ4šq½Ä("¢z0ˆ¾Y4a ¼…£$ÅÈ´˜Ò)¡AR6¸S¶¸ë"ÇbÌu,m,€©¦²Ã5kå†VîÁGQ˜s_ïjûâWX»Äƒ2 ¬—Q鬖ŸMáã+ûúaÄêâÏÖpsÙ7Ù—ê›–«5ˆ]íÈìhR?·ú2øÎ† ñtÀërþ ä&ðœe¡ïsÂ!„'ò%ÈœB$ËÒ·A暟#Ù ŠäŒ‘·Ù”îÝô7³ñ‡¸Ð1 ÍìÇzQ6=€®Ýc^u›0:(G—m/Áèñ#ƒ ½QŒÐÁP{àh]–ãRì'ûæfék M‹'¢­É]ì- qBb}“½…@©Ì½mYÃÎB¹·{µVU6«`sÒU;8¨oH§ 8ªîþ¢Ì7*¶Ô+¸;PW†P(Ų„†QÃ$ߪX)©¨¾ñÄŠu‡Ù’¿®îð*9PUEk[3-A߀ÒÛï¦Ûmµ=Sõ|[<OйÄ0ÖÝ.od‚èð¦Ãž¼•8æÛY’!à¶ ¯rŠR®ü3ÉEß<¹´­o‘ܵÛpa`7 `Eg%`’Bfä}†HjSÉ„ýÊbW²HRù2:¦‹b~ ѽ˜­Îtà’r|^M‘¯Ÿ¬ä«j½pʰèÆ4”k5S-]Á`ïþݪ=ⶆ‚†ûœSGÃÁÕt‚°^Ì´p?(N”¦æêªM[jlÛe·vóи*¡»ßqùÂØõn>Wuíj%ÇFP¤¼¼³lô«/>|™ºýº€¦_M`rQÇ$u<Ãvq/½¾'#"/èÉödÒÌI C©aèP&‘ˆºÓÏÓ/Ó‹™iÄ|ºüzoÄФoÙ;1]d8’}z‰ÏèÄb"£ A'^{91*l–AxZN‡%…¨š&"P6°ÖcÌD¸š[sUîña‹fUí¢¼ïÔû-½+ ÊÒgõ¸{Hé!Qü—,|#¢=$L|Ig.ÓC¸W+×<‚Á.?eÁÔ¡æ–"xî]¥èê(lù~ÃÈšøU&YhF‘.;ÚE"ºÃü‚J§ P6¼E¥ªi±ÌµàïU´‰®BßhWˆdDòpW§¦ý3ÔñÛlœI5I°ïÁœ 1•ýxi¼®tpôµ1è¶wÁ- 8`J)ÿ_=¬×4z"TA¤H°#ÍÙã­¬W5’4‘4ïô/‹,íVþÙKšþš¾½ê¥¾°Z(_‹ioðh#%ÞÞ€¼E!5¿Aw(Aîyywãs/ª :ýÛîg«@ÿú†à×ÕšŸKsÅÜÿíĶȿ­U¯ÇoK(ßqжù«å`ÒËÔ_e~!³¶q\ÐS0íd endstream endobj 239 0 obj << /Length 2101 /Filter /FlateDecode >> stream xÚÍZ[oÛÆ~÷¯à#]D{8{ãnßW-PéI¬<¥AK´L@¡\’JÒþú3Ë].¹i˱zP°(r8÷Ë·£@”à?ˆt¥ŒÍU´þ|‘´w«md/ÞÿzŽn„‹åëÕÅ~"‚„èDC´º²Zm¢ñÕ}öÐäÕå‚1ó/œ‹ø—KÅãC¹nŠ}ižð¸Êïò*/×ùå‚ Ît êòÓê·‹åÊ ”ž¨¥¡|BMET$'À¸Õtù­©²uc5ͬZ»¼Ü6÷öÖ ð|·±_îªýg{õóò½¥ÝdMFŒÒ(+ÊBŸ$I¬œ÷ys¨ÊúGG¨Å%BãJäNEÜÜçæÅäë=:IáÅÆ>òJâõ—K!ãlwÈ_™ïi¼¯ì[ °Ï÷Ž]QnrcPY4ޝå¼&⵿Þç=PñháT]# À*ì¥Z½Ä?Ym¿4Vë½p[lûÛæÓ(ÓØgEioeþ+þm^Ù›V3/¸“á4K;©#¥©±Ž»Cí"!‡‘`‚*i ä0/šßsD­½ûæHë!– ’€r.²$ù·užo&r¢0]«M^ÝÌÈ䌤4í]Æ)¡”i É’” øhA‘L[Ò¬.¡+ª?}µh"¸ˆ$VG6X/?%Ñþ%Dà­¯-éçˆFÃ]t}ñÎVU(('Zó–h—Û¼™ÊQìLRªD(µÉ¶RSJ„”瑚*ŒîH*†m2M´ ZØptíæ#6Aæ› ÄŸú¤CLÛ@2…]Ì»(±DV¡ å :öͼñBe´8†×Šuïþ‘ˆÄ‘"0͹Oóõ¾¬]<”u±-Û Âæ¶6©}Ÿ¹>þƒc”`Îi6Èà)q¦ïzšW–©pìSL© ",Š‘è&L'Ï·-@ªêoh3V¥ñ=:ßƧ S’€wÑ®ž³‹êÃæy3´±£.ó´ÏÂðìІ}¹}DÆÌÞWG)½:=ú•bÊ˰÷Ϥ>`æKÞ±lç?g¦µ§ø9hÞdR¸chG*dŠ;jŠ @Rãb穯uFhÊÂZ…SÈ‚¶¬—Ž0™¨G¿ñ8‚Çû»80ï~º ¶¡â Ÿ˜#}(Néóû¡y8¸¼´±*²Û]îÊboó6+Ê¢Kª^%L5¤ƒ¸«¡]V×3¡²¢ƒP=ÇkÏ×Òb|8nÖჇÞó+Ó‚2\~íC1c‹U0𸯢‘-H¢ÄómI[[Ð½ÇæŒ ©—lÛÁR‘|6ñȌٛ·-q>…3¨ÄN }B¼ýðæÍäÈ’m¦Zq¨&DjFõç^?§^§ùÚ¨fRÄáêr3ãúQó><ã"x ¬–‰ aõ$êã@¸ðÝê§ë·psýáêjy}=ÅÑ“¾1Û£ ‹ëÃz{¡ëÕûª3Þ~æUµ¯f€›Ò„RöàÆ¹&pÜß¾ ¸qŽ@Ÿ€ÛÎ"Ôá¶¡PW·Çrqä”w¹‘ Äb½0lkÓà a<º¦Ån]D¾¼íÚ 7kíÍí €¦‘¨SûÜí<€›:\«/å!X¸=ɽHáö$¼1…ÅFÛŽZÍ4|*ÓQÃýŒcým¨Àèà9Ž&ÝìÂãûqŽnG—áDÏ…s^¿ç`rSþïCÞ¦‰‘›“`8^1]1Á€ WLà"tÒÀÁ“Ö²•Uïøë–gæzwjî§0<Ž{BhÓ`ú¢£HF”ò“±¨Àƒ­j3µ?b5÷YÓ€¢¶Ž»Ãìû¾»%ªº%×ôÖ-ÿbB”;‚bˆá6ïßgu×0‚ý–aTv¹†±~PðÓöt‰8ÚÓA·§Ã‹dƒÁžÚd~On­…4e¾Íšâ‹ƒŽÏÐBüêö]CIc ¿u3DÝÖÍïìPía´n‹“œq]`zMº‚Q<ùº£$™Ä5HŠTÖ¨S` •ºëç€5†=iu©×R÷-ÂX7“Â'*Qç®B1”ð¹µ¶ùØË¡Íñ^jo,ÝLáŒýŒÿ›Í3MúÈj ¾w7ŬÔ)˜3c U8=$¬lÿ>FMm¿õœFDþàT7gA„¡ãéM]üOq˜ËýæíyXÌàÁÐI³€É„È”þÓû®Áù˜ NÔ¿_­–+Ëîz‰úîÃòíÕò‘e™ä£Ë2š˜9Oϱ,3¬$¾ølÐæ  Ÿ€`¬ûýiŒn´ùõDUøÑ¯5 úŸXF±ð;®t—sÓ U8«É–nÆ"ŬT)Qé A¹Ä ²–•äìIòóaà3u=ã´½Úü Ý Ò·•#[d2^\þ·ÊÙngµZgM§×~`äíÁ"â°Ðüc¿ÀôÁv“ÄòUÕuœÙ Ñ0ÈgÌq60…ŸQF /Í +ÉÜ­ïŸ#šŒÎhOº•y·ÎV ìГñž5•Tgñ²’Œ=¯ÓHª}ipÿËyWœÊ£ÒàÝÏðæaWæ¦ñ¢¹ç ÿfnÑC=CæÎ\^/" GÍ Ãqy¢ÔÂîµçk.‰ŒßÜ‘RKWªxË)%Kâ·ûö¬¤Ew„k¯Ú#œy·?¿áûù·‡¶xòuS{½†gÀ|âG¸\Ëê&iØAÌOp®ù¸3p7ìIN^¨‡=Èï“G.wékó¡h}†ß¿s…lªë?މ endstream endobj 246 0 obj << /Length 2467 /Filter /FlateDecode >> stream xÚíZÛnÛH}÷WèQD½ì›œ·Ä–3c+؇L Ð%1)/E%™ýú­êj^š¢;Öìb‹E6«ª«O>]2ðâ``¤d±Šóû³ÀÞ-Vº¸y{ÆÝ¸1 ·F¾™žýíRëXÄ|0]¶MMƒOÃóuòP¦Åh,¥ª_Gc¥ôðr©á>Ÿ—Ù6Ç'jX¤Ë´Hóy: ­d<äñèóôÝÙdZ;×B<1Jyf$\²âta†‘b\* 3Ùå¼røÚç1ÓJÛ¡Jh´õés0XÀÃwƒ€i°ùͽÀÁÕfp{ö{ŸG.‹cå»]¥eW¥Y$OäUs&"í{ÝÞÆ¡~ù0÷E Æ8M±a¡à~ÙâЩ@‰ÓL[ðIÓIö`^»ˆÚ0‡ƒ±ŒsIc?De Q>üìÞ ,ÖZà›cÆ B“ÊË`O[0Í`igÛ»/ßY¶˜Õ¾Ã í›‡ ¯,üèÀ ó)&”¬Í·ù®¤zÚç»l•§ ª¡ùHDÃuâjígÈ´ qn˜ŒkSMTž;±HÄÕ Wd/ËÑ|ÙgJ6fÌŽa qµñÙ&Í{çi€÷;°sé^j¦e| ~Ž}HùAzà=-ëõÜ•'ÉŽ€¨ oí²¦}hм ÞøoFE$˜µËö£ØæšÅa˾jx1¹¡$/’2¡ðË-}.Ò9\ÁLi•4àˆ-M.Éò,_¹ÖnÀ‡7ï&çS²wu1¹ž^]^ý¾¸]0øÅÜ‹»C?R1ƒ´ ô„ªËÊÔD ™0Ò'ß)—3À ¡[5ë´FM'Yˆš¸“¬÷i¾*×4¿í’æì(몾²Þ$à®lHI¨Ü—Í `‘Í sBâ%˜v‚?Êê¤àþ|Ø»ºü:Òá0)²änS!äªAǦΞtÙÇÀ§)]{™<’0ØŠé%¬.̃ØÃ€w‚ÿ­HÇÉfC‹2OJ"Kˆ¦5©»ý—•H©–²~ܸL¿—ûdãlÀ> é@Žw,°¨Ø ..B¯ÜdW_F y ·|ýÂÕÇÝMqíTYÃ@šövôH <ü0­²N«Í,¤f°Ox yNØùŠÿ¥E¹ƒ÷”bI)î° «šZЛx]%^É)¡0—Ê®$ ³+ ŸYæ­Õƒ/ËmqÏ`†a4œ®3ç{¹ÇÝÞ²^ ¤Oá~úýB0(—vv:¿ÙÕˆ¯ÉÕÑ‚c4íáî·¬\o«ŒÕVÊdå¤M{}/}7i¹/òݯ6iFª V+ùúöšÏn?žŸOnoûÖÝÜÂzg%Q.‡»ý|žîv¯Ü„\ĉ{šŶpQúêkÌ•a&Œ­¤R•¤z\bkä¹à4[ÑEü)û$^Äö¼Þe}^MÀ$OãÕhHqÇë1…GL€¿¿@áÂ;k1Vhø³’×ü„äõ,û’·cùxÔö$Pëa“$„~’ŽJj x¦ódI­þJIýæÊééÛÉï'Pš×çø ^±ãÂZ=CX+ ü¬N"¬Ñ”þ …µœEú$ÂMÁYåÿÂú™ÂzAñ‚ÞÚZqµ¨xËU€¤ ¸>ŸœXVË8`9‰¬–Q ÊLV®ê¡Êî×"ŠvviãÑ‹SK ¦Z}ßçPÁêÀØ:@E~P 6é^{˜ÞtPªN# |ÌL¾—ERÉõäQ(.‹í}Gð·*í@´‹§ˆv‰ žD´KFëÇv/HO Zñ$^5$ÒØñŠD$ùp(})—ÀôÚÄNI«S)i–è¼å·£¥mgR?«OÜ¿t"ävû1B2>H"¨Ÿ¦ðud ¿%óÂIвh ùͺÍ}µÓ/ß"»õº@ÓMzŸæåÓ¹Õ!AQç`[µ]z}¿©ÆWväXŠ•7•÷ÊqDqF¾*lu©8pØQeê>ù>Ë98À1NróˆŠThÃÛªNÏr“¬v}>$‡]O¼´n©ã"ÝÍ‹ìÁ"½§lBüXoã´µ"´Nb҃⺭싵­[f¬H‰”ž€*Ø×ý¼*Ž©IòÖ&îìØ þêöuDÍ¢ŠËuRömg»ÎfVë¶4§s #à…#Ò‡œ{Û@®o¿/ ”þñËd/V%(G4¥u';¯!¨ àËSx²‰¡ =¯OÛïŠPÆB?*øY=^UVÙW+9ì`\%…ÍÄ~¾¶¯ß‘uT1ÞHX‹ì;ŽøÅÚÞßãÿ4žR6C–Ý)+f8hhþg™"R¸v€˜[p €2Kð„ÒK¿ô© ÄL6Åy ÏH½©zìJì¦d¹Hmÿü9ÝÅUjY "Ã׺%Ó³ÌM¤°:ˆ‚ÇW‹í~µ¦tp±¡± ï–Ô¢EÜYÈÞÂü’ŬkrìL—3Ó$Å•o5žº(î Vl7›ÃÓº[Éub;ÙÙv_£K§ú Ù…Ñ&œ~Âíh@ÓVŒ.zK0ûÍà1¶L—÷–mà@ßݾdXO§uØt³^¤ðeãrþmæmNUœ;œÐie¾/Štá䵋«=Ë "‚RtÕ¡‚ÈÒñ`@ç@¼Ó ܘº}rÁφRí¶¶ÖÉ!*@imöXDø×?rjáŠß›_lbð% ª Cª‚v੬@_‘_À¶Î÷•RùsÜïèw…6n\ú¡¬êÃÅ/µÈF¶kÔW×aÜî¡ZEIg.W¨›½¸Ã•Ù‹ZÊ éR[¦ç]ZÒÒ¢®2x½¬ÿ¿}³(Ã×@Am 7æ!YØ%¥Õ²`zô’,zˆ]Áª ÝrZÐ#÷“TàÎzcÊáGÇG9 Ih€;…-÷ºMlGÏ#Ä ,é«e xÞ[Ø.åqYé§u\÷ IÉ9@ŸMp[8ÕœELâïX­ž“ôv'KMÊXý;YÃýÉ©txC·Ó›«óéì¢ú³‚n?D:º‚ãm5‘^€ðÍn-±.ë¿Dƒ.G0&ߺ×ündIÐîµ'@ñw:ûo&7ãÎï–(ꉻc•Zúv¸{G endstream endobj 253 0 obj << /Length 2425 /Filter /FlateDecode >> stream xÚíZIoG¾ëWð6ÍY©½ªäà±å`GÆHÔɈ6Ù iPM¥Ù´‘?¯–^ªX¤(…ÉÌÁнß¾}O$# d”ã‘b å\æØ>­¹‹ë/ˆ?7ƒ“ÁÉM/¾{'Ĉ`”㜌¦÷CRÓÅècöfY<6e=ž0Æ2þýx¹ÈÞ5ÏvÕ¼Ym*ó†guy_Öe5/Ç*8Ë3ŠÇwÓŸ..§sAé‰Rš“ûbª¡˜„h¤GRsDw’^—Í®®¶ß¾p\s‰¸ @Ýž|}sEf7·oÞ\ÞÜøÓ EXðöôêTÄ"{{yí.@Í ¨©³ÅªúÍ=úðó«[‚Z|/ß_þry5]}˜ÎÞ}¸½z›’€Ð1ª"$¨çHæNžlŠØ„I†Ø•À‡ð·iy‘ìô¾º}ÿ>EŽJDI§Ó+c€<+ªEŠ Uˆjè?}ýãìòúúÃuжfˆkÝžßÔI!ÂŒ4Á5§ÒtÞdY³,ÝÅÂ7\ì¹Þ¹å¶úGãž<Í| –†ÓhB9 hMK GÒeÛÔ»9eér¤*ü‹_±ÀÿL;@ŸàPÎêƒcQ®Ë¦\M‚ÜiM­‘à¸u?Ñ 8?¡ i­Ü·ŠmEÚ ý½K=Br$¸IÆeÊ$ßÇ;Ï­÷7ÞLnàY³qZ•û4ÅØ½1¥Rf>ž¬1Wu‰’zn"¡:öfÔ5IöÅØ·œ7oáfY4]@Yi‹Uµõò¶•Ùõrý´„žkR¨ŽA:+Hp+´¨½$äjƒT±ý¨Ê Ò„)øt<» ‹Œbr)ŒR£ìŒúŸ\ óÖÙÜ»ÏOæÕMé Ó>N7%¸6—ø¸w`.0­£$AI!­òçÑùˆïJŽ2@<“ØpBîÒ~¦BQ“ÐÑédŒÆE…d_d¬×ú›eý°2]¤hJs¿èF7m$ãuQÂÍzë^]–Õ0ݸÎûÕzy>ßÕu¹@®Îy¹}Þ­@¤ ÇÊåǺ›R@6ÿ$9Ä6O÷h:áPͺƒ_WÍÒ1ü2Ð×;sæÞÄœù,S›’æ>šÃÌ#g%4žH)³i,xéÔ%œBVé°ÖÙص}å3èØÝøÄð¶¯KpŒwŠ“Ùœ¹ßU][ÁUa‚È<îÐ3Gpæíd:{_¤ãY2¸Ÿû¼óhn›S༫MS†EnPÒ’NS&ãô)N FJp•ÌŠzU|ZûÙuåƒð±Þ‹~|óÆ*|¬þ@¢Q°ì~ã;Ærµ…J½šk÷¬´…¾ßf¸ +/LeGFøó¾Á¼o0ï<0S-΂ò¸©bó(9¶r;ü H)@+0\x8Ê@úLL€šÅLÃFÊí´çmÞïÅÀ©“ ^oWvùbÿ©»Mf¢—+¡!ê8Z‚ þI#oY,ìzLÉ6ùNÝõäˆõ«­'w=0•ñ|¸àûv ÷ê–yth×:1I_°ëa¤±ð݉÷“±t´¿±«@)òÀ&j·dO¯r ÈQO¬[(PMÔ}ÅpcùÃFDeÙ¿rÒØ)‰Ø³¶DXç'ˆ-OßMpL¢"¿º |;î «{Û"6Ü…µ>F#Qwχ÷(r k¾]+µ{£aõ?¼bp£ó笆tHèYvC† 3'ì†ÎÂÕ/‡"®§,‡ÎÁ¾Ýì·MQ7—]Rüí«¡¸sSÕ~„À  ÕapEþÜnŠ!”Yû/FãåPj›¡'=çüêòAÉ *'9à¡üù+‚®h Ùo€r«V6øÐ–‰ÁLÒ13@mvÄŒJ Ö7•H•ÃL`œôUâ2EèCSçG¨÷Ap à!RžÞ/±&b¡ÿþŸNìñøÿÅ„)ÿ¨PCL endstream endobj 260 0 obj << /Length 3065 /Filter /FlateDecode >> stream xÚåZ[sÛ¸~ϯÐô¥ÔN„w°IyÇéÆÞÚJ§™Ô£¡%z­Ž,zE*Yÿûž€P/±gúÐуHÄ98÷ï€t”ÂŽ²t¤9'™0£Åí›ÔŽn¹‹óŸßP?o'½™ïgoþr,刦$K3:š]÷—š-G_“£›ü®.¶ã ç<O„Éñ؈d·YÔ«rƒOD²-®‹m±Yã “‚g £ãËÙÇ7ÓYK\2öD.qæ›JõÙ¤Ô3RFÊ…ãtµ6=ÍßÛÅ(×Dki§r•ár_/ÓÑ~¥DèÑw;óvÄ Ó®Ö£‹7ÿˆÒ”ÊBªëbƒD‡b¤À<Ï`5;ÉŠM$›1ÓÉîvÌLrr2I#×òÚý_á£ûº¨œP›áŸ<…R‚—i¸û!#L)dÇHd%MŒÎž·Î×ô’ØZŒÁä3N襛ŠŒI‘Ì€MPIXÊÝ ›ü¶ˆhZH’R0 • ˼HÓI¥€¥ ¨‘:ªÅº¸eƒ†êØž80šŠÆsïýw{Éé»OS7RÕÛÝ¢Þm „Ò„Jãåàm¯ªóm”Ђ–lÀK}S8šw`{:)ÁÈh²ªWcš4^ÜœŸÊ“§Tl«Ú=m¬3´Y»ƒ=eÀ|¢A€ü@±çéb WnÀµ]J3í¶4ýeúiz:s,‹EiÝi¹ÚüÖð-Ó¸Ó }ŠgÚçOVЗ°(ê†K0¡Bå›e40h³ì1Õ¬ºÈº§“uþB¬IJc:ašH‚•æeJ¡DbT…¥$ãÿ¥€€[• (œup¼%Ldš:éá…ó{™7QU‘eVü&)W§âC«›í'÷]VþAîþ>LÏ›U 8â[¸&ãIJ?qc·En3llYƒJnê›Õ¬u²ºvÿ÷H´Ü¹››ï¾aF)ÜHîþ–6©ÀÅ€¾‚}ÊRëm‘/ïÝÍ®*ü[ÎáâºÉým¢"”lõ”W:žæšð©Ûª›‚¦‚<¢}t>*_¥„ñÖDjܘf6<­ÁØ×î6wm$}‹ÛçãÜø­Ýç½»²Æ9èÒ8y3MQ8Ú o¾ã;¹ÍÜþqŸ8ÊÓŽ¡dpðnUØÆÐp<;¨»}¿@Ñ‹ʦí¦u“Grï¢E˜2¬õŒÿlãCñG~{·öשׁA8©Šßw¶p‹y¦HmÌõbÿSL3²?£¾ªŽŠm½BÙ,ò:º¨‚B¬SetÍ J5ÞÆƒM!!”Í¿dš¹‘EŸœ“ıԊ7Çi‰R¤¶&ƒÊÆ›je‹V¼\¯®j4W¼ d›fz\6j„'D-ˆ÷¬MÅy›ª‰B‘”`óu¥Dj&Þå[¨„ :¯§ òî«KwSÞÚD{®Q4YÂ%¸†`C‹“d0©B·l-¤1DÝbcC]˜•ø€héFv•·û=ÑéŒ0ÁöBÄSM²AS„ê°jÌ Êd24€ó\eSEK`¨÷¸6Í¢ï.NéüâóÑÑôâ"ƃÛºÀ-…ò_(Ú^í/ýýí¡ÌÇ èú,:?=›ÍÏ>Ÿ~ˆÃ ÆÇ†,À»gdKJÃHã²³Hj0.ex –M¹,¢v(IÖ lúé×Ù·r¹­ ¾"Ó«`ý>wVU/UíÞ*·ð¦´kóÞK¸ZºÑ^´< ja‡¢ž½û9𖼏¦ççgçÑRŠZÙÆ¼øŽÁòÒÎF,90ùÁ5 … 5Æù 0>«ãÈ «ãÐÒY›õíjóçÚ½q›× ôÙwëW2]Òp·É¤LÐb¼‹† 6~‹!þ†HKR€¹­½DPÍlÙ&-•âS²MÕ)ˆ &¬:C¢” ’e®¥hSgÿqç£ê€°f„‹¼ a­‰Ò4$ Á–c±°G™¥”€I¾ e–*bÀ²ÊËÂÖEd×L @®üuh[¯å!í«vÓ{™ŽÂŠJƒQ`%î}èëñ*°¦\¤Éeç+ó$€T   p«»„•5“.9ýÎóÍ=ä‡ëìz~åé«4ð¸ Ãr»J‡6T@L SO(AX¦`ÖBà?Ý"xG‡”¤Ñû­„ާˆ!Ä lé¦á]8ÒÅà@“§êuh ÅYÒ†r³òQ”pJXý­¬- ­bRTPüˆ6 ¿õQ4Õ Ü € hPá ˆ"™yÑ©2„e—ÒlO¾ýþÙ`»À:˜d£Ð®¶òdϬâMÊAqZ…)Ä{j_Ž¡Ó`Êí£o`¶hŠª½÷dýaëá:U!ôuIa±NWwóg˜FÀŸ˜tj¼ÚMåaWšZÆDN×|ÛÖç}´)!K«GGWª~q«~˜ŸœN?¸›÷_¢)9…âY<ŒÅXÍFóžÈ^ÒÝaPàcìRi—t"Ýu D €¹× *¨ÒÜIÓz@?$&LšÌ\[ÂXu¡=v¨­… èlß}Wùá"ᣠ¡¢R xÓ¡'_5½㺺ØX8{ÿqz4s×' T:9>™ž7Ér…Ojûæ]CŸ¹–Š}Xº_Ÿ±æÍ½ýà Ý¾‚…qoº° tDÛØ­c=¥²i \—ëu‰‹~÷mÑÁ½~Ì9ÐxÈÁèóµ„:2õC@q cÙÈ öåné30þL>³±®f·õ5øäÅWõÎíG µ ²E³¥ü|öå×éuŪ€9„­ÊÛhGg„v˜îñf‹§:B{ô&Þ6rÅÄCÅÔ#et4ⲋr·^ZÀwG)îíÙvàn¹óÃ6ŸÀîþ ¾]YÇì£â¿·–½X#2Ë!¨&2ã/‰5"SP¡ »—þ¤óÄ kÍçT çþ“Õ„g¸à¡Ë¡}øZU>š¯r´··Þ¹|ª-Á]üq`±Ý–þ²‰EÕ8§$›®¯ÞœØÄ^ïýuà3ØvÉ^¾áZP¶= ¾½ aßÂh‰P¿ÔEIkP'RÏéK‰3J vÝõ„÷Ó 6 •GQ¯ ¢JÜî¼O|¡ŒÛ÷Ë!ËÀn ,g ‚Œ‘/ƒ1)`Z&®eþã *! øUhsAÀ|BÚC(öÅ2aCnCQL౞x…k1­÷Q=Œ¢¸qÚL€¢0öQíiWw½ª|û-íZMÛ mù4oRiHMB|7æ5©]ý§XôÉ~£ÑêqˆÈ¡ŠÈ¤ù?‡ˆûbé#FÞFgÌ”Š¥„Ó®zi¾°ÁɊУY[„^ÌÎONî>q(ÖK?»ôgo6^Æ¿Äð„q–Pü@ 6b7{gðTÓgYe ËB9–áß±,dW7Ã`W7»ûŽm˜hÙ†AÀ~ ?Ð?í¦yBºvmlØžå10Q+ ì+zÎØ‚{¦d’GÏ„¥!‚?½°EUÍÜz^S‘5 `´ìáE¡*fq,Ï”·eÙÝö°<Ž:,ïŽËì€Ãó83w¶ÜÂû¥ƒ>4éû8 )ñÛª°01½ðßE8d„Ï„üÁƒ2ˆú¢unÖ`¡"s¼A¨ÂBÅ­j­À¯<÷žsØ£VDgƒ#§ö"‘r?ñHr?ñ™;ŸHÛx6¶ß&•þ@Óö]ºYmº¨‚@çø¡]qà•Æ›ðaÏ›"0yÅõÂurº¯ò\`p‹à7O/†¯Š¤J<¾beÑ’ l€^qäz…²ŽÊ8f˜ eÿT*æˆ$£úPžB$!IÆÂ3¦çgø [v Ùb‡ R·äÖƒµq†x±(·[`êí¡~£ ~ÿùî—ÏS+¸:‰Ë!¨º Hhå ºoFÜQÞûÄYU««µgÎ}DbšžûŽÄt΄õ&3g†í^Âr‘¿qW÷Õ‡w×GpæË€%–¤ÿ)ž²‹ endstream endobj 266 0 obj << /Length 1847 /Filter /FlateDecode >> stream xÚíYIoÛF¾ûWðHÕtö%·,NÐ HSK9I`h¡m¢2¥JTÿû¾Y8âPT¼É@Š>&gÞþ¾yE2 $38SŒ!Ãu6»>Áîéú2ó7goOHX7„…ÃÖÊ—ã“_ß‘Œ 6$_´EçÙçüÕÕdUëÁ1–óçƒ!ç"3Ð<ßV³º\Vö Ï×ÅE±.ªY1RÁ™É)|¿;9Gå‚Ò;ZiWiFÂ`g0SjŽãÞÌɦ"¿£$B \¸¥œ +ëóWœÍáå» #2¿»¥×, îÙèä>„rd OÕ΋Ù@à¦G»ÂˆpyíJ aDª}S^¯=Š)QHA:¡˜R†(']·×Vk·v¨ÀHQ“ !T ¿ö3 ‹ÅBò¯a§„ì #µ;‡LC¶âö”U=€*.­ç6ÈóâÜ{{uKÜÖM¤F’“FÂ,pX–(âà km«MyYs_Üe5 :¯Ã.ÕÞ² çͶ¢¾Y}ÂA ¢–ýâÅΖզöMõÁ^¥R• !ÚD¿ifm¸šØ~£<Ög P‡QË.‰)D# ™h™Ñlù Âà/!16äç‹¢êÓ§„tô4.Sž¨d‰w,ÖëaÐ58{S?À?_F ÂŽ$¾Ó.5½ú©F”ê–ú–ëIÅq¨X&ZGv†îV hW2XÑ5âfX©ó¢·“$b2áP—çã«Â×QºÝ¹²¼ð׺Y†—Õex¸ô×i{€õÒý?÷ À]ϼA‹~èR&@…Ê$Åp%]Lá*B à…b)¤¤Î1ỉ"JyOÇ~<ÝW˱F’wµœ@¿i•ª=˜6 ySÚv§BøÜ#Б’w²3Ñ 4krÓ\I– é¼¹—³©ý`[:AÄâxËøŽJæOÈc¨„†°GK¢4öN'b¶wÌ¡ˆM]}×Ŧ]Ûñ=ûaD÷É4œI$Íc•=«$&«&^¹í6•/-~¨<DMgEÓç“zÒkFÝgF7#N—…ˆËGe„Iw¼[Q˜“Gd6]ÖW ¦ñbM Y;=óºˆÉ²ùTÄE.azq÷¯OÏüMH­ ©…'µ øXmª@—f¡£8[^—ö0Ð$ÿ~UúãÆ¿.ƒòjYûwH­·³º˜[p”ÃXë Nå¶^méQ†²l†ö…¡w…QÂQ4/vŠ3OÚ/D“½ƒ¼s`¤I< PX¢ÒÚ’óѧW¯NG£>¤ŒCSÒ¿ÙÎfÅfs±]ø8,ƒç“*4ézíñüÛ@È|²ØÁütÂãªôc£Æwè¹ÆˆÁöc ôV&úýQ´‡>Ñ~Û@ ÅÍ@Ÿ(ž:Ÿï2Õ˧™ê§ÿ•©žšê%¢ŒÜ{ªg,ñ÷¶©ž ò°©~OOÛ¥C£¼1ˆ™ûOò}:<´Ã¸¦‘`HžïiÅ$Ãûµj;Ǻ›¥ Ä@!ÇÚ¹W0?#WàŠÚˆcp+ªÁž[¨Â´6T¡­õ§d LÀVÕã™LLî«ÂíLá*SH”þÏʇƒL˜c0£˜¡ü©™Â~è{ˆC@ ^Çð°¶*ç¸ýHUÍ`Î~ g­—õdáÝMBàœ˜Í¶«²©À©#4þþ¥ã=pcñôz⪹©ì6à'6S‹"8ZòáÓû÷ÎÛ¯CðJÁô¯ôXÇŽ¥Ù‹³ÐÞ¤­dŸ$G ð'ɵ?wìˆ1ÙûÒ‰¤Ž8Ñ‹…'y³Áþ«‘'A—I]ù8=ÀÓìΫ“Ýækí)>rÎv Gã³ß>¼µ»G!CÕâÆþœüO¿ƒ¶¦eÛþ5¤oÝ”rÑE–IX\¶—¦á?ãˆqIS~=BógÀ0/i~jcd)#a5_øiB‰ü"0„Mñƒ€@jcîÂø¨]ÊŽBø¬(Á‚ÖU`>ÖžØZl5öóícÉÏ·e9o±ŸUKc‡ò`´Rw¡;, î;þë ß/C–¯]G4æ4‚aøÔÀZNkW%nÔÄÞAHm`Y¡p^oÒm×!FÛ´ÊJ¤ZÆÉ×>ª—Í3˜ÖþÙ÷Ò¹}:ñPfëråø´Ï-H9áçÅj Ë ®mkÜÚ¼\” a=ª_6¶&v)Jƒ>lv$LuX=ÓyùÖüv»û¾e¶IóÅ+\'€(«úIèé.¸9*ÁÒç½½J¡6ã±HìýÚ$É}?6POŽóã1B¡eœéžvÂw ‹;3ÇÖíݳ¥V<þëËmPÄE–v±´Ì(*á.@‘-§ ô‡ endstream endobj 273 0 obj << /Length 1868 /Filter /FlateDecode >> stream xÚ­XK“ÓF¾ï¯ð-2…'ó‰œTRÔ’ìnÈ(Jkk± [2’ !¿>ÝÓ#Yc´‹7µåƒ¤yôsúëo,f~b–ñ™SŠe:-·gÜ6fôrñë™ë°p1ZùóÕÙ/Œ™ Î2ž‰ÙÕÍXÔÕjö&y¶Îw]ÑÌJ©D?™/´6É‹yª“}µìʺÂ4ÅMÑÕ²˜/¤Ñ*K¤š¿»úýìùÕ ÜHy¢•¸ò;f ‘²tfSÍ„ÒdéEÑ훪{œHr|ð¾DÒÍEÒ”ÕšùRvëÑ‘¬ŠvÙ”»à lªoÂ|EÏ¢iê†ÍÆØäj] 7ÿá«mËm¹ÉÔÕa°k‚  ¸¸Š CV_­ Œ Mêjó•ÞVå[.TN¥ I‡™nwôV†g¾\».L{ƒáé•ÑηÜðj.]²ßÎeš\CzR˜‡aA µbE;¯qQ0#§Ç¦¼îò¶ô…^/"7ù¡ðþA¦Ü8S¸ÎB–²(KOÂÒ(©Ú2Ë-ìð+ÿ@[ê²ÂG8šB '±íò®\Òû¿ES/`Ŷ¬òŽ<ÑsJ9,  _ßC|t²yU1iû"Xä=Ç첄´Lš¯$ËlÖ›/˜¥E©œ Í”¶Ò‹´‚9Xy`i‚§™ãeeòÏëþŸr³)óóàÌpÐÚƒ8Å8( Ñ•–…Øú4…ªû4”“3ÚÌŒãŒõ柭`²È üâ—ngši‘ÂÛfvyö'•]¬NHͲLÏŒÍÀ Ejá´êj5¡Ø€t÷0ze\Æj+< X¾“¹Že‚£˜!Êo¶Ô["y6Z,6”•î¸>‹Ò÷U J• }Þ”ÕŠÆü~Ë#`BKÓ´ßõ–Ej4“Z•|>é ,éÌÀÔ…ãð€ôáSL‡/Ö&] j/KàP?(-r#V­¸fV»Ñ­xƸ±î%ç.ÄÅE«“阔?–þT!KÊô Sa“X*l„u×£)] ©!ÂÎÆ@VåÛÉÄJÃÄœ<€fňAüÎÇy„dSçU3Vé¾ÍêäüÕ/Ï'Ê*ƒä€ #¡®RsœHÛ!7Ò©87G]4K™…!‘öxzy`rSl ß<:8v„MFÀ¡,aæ!¦±~€.nÍ‘×Ô®6Ò㺊p=´rl ÔE6ƒ}?´4ç•“¬Ð<°¨/‚ Q“º,ò†PBt–Üø†/¾ÇÂs¤ˆ–ùfS¬2в,Òƒ›wÉx Á5yŠê›z;%ÚZ–J;Y.G­UA·P ÈŒÎDà >„ÈpbèM½ÝùÎX·ä6,ÃTzT-=aÐFŽxK‹6@ŒVá'uÑ´´¶-vyCYÅUטó¯ô¾ª» tY–ü½†Í~ðÑ”÷À4™rê÷ ãbˆÓ:oIjNÆ û€ :tp ­m£Àõ,׳Øõcϰ8lâiÖQH¦Îó-—ô‡UôïqÜ€lŸ“ £˜6î´K!Gx(3 î4_Ê6¨*»om´='¤ï?¾ôºÁÀº STå&œ ‘I²1äy }ÀÝ£´ ßANòÉIw8´S Íè¤2B›Ó)æ-¼KÖôÝí~Ó…®R7S^ txÂù_/_ÞRÔæPúeKU‡.u'¢Þ,:&= É9´áÔ³˜ž*ÞÍñ4O™²âA8Êâ.ôë90­u™|œPoÁc'F=`š–"RÿÕv o›jžÜ÷Y`{òÿ³½Àé-=wÀ·G#ê·„||ÿylÊK€”q©îEÿÖ¢:ƒw² ¾ŠaoS|ºËàË\‹ï’%$Òëqƒà‰<MÑPmp©…€«ûQX§P)¬O½(ÅÓ>Ïþvzkž å1]¸(>í˦¿ö%P©y¬Ûb\7iétYc³!ÄiuÝS éô¤ŒžaÕ€ ‘M¸ÁÓ[A/ŸçÞ*2<àŽWÀ¼ñ×AüÀÏ^°£rœo³˜Â=uü #ä¥WAj^…ú à°yâv‡•§†ý„70Û ˜Š&WÙ Ñ”ÖF( :¹ÃY•Ý ÛsxŠÂ|›weë›ð ™²ÉoAD>i9aå= JwyÛúÃz=Ÿô†–-'@+URÜcÿ¸Ô‡ÃCe`¬+ÈQX}½È0´ªè¸3â^B[nwôw’þá9üû4ú3£(&#t:.âýëç—¿½:Ÿ ”“úC8‰)ƒÞ<˜²/»üzSÜB_µ1·bY¬[eü½žæ:X `tŸ?ž25xðÇa" ïžÙÀ³ÙW‹®Ü½)¡Ð¨Ha/æhå-÷£SΞãiTº/ˆ åpjE·zº·P6 1‰«z[ñéÒ3z4U“hzüW"ëÛÄ¥¦…þ endstream endobj 165 0 obj << /Type /ObjStm /N 100 /First 874 /Length 1195 /Filter /FlateDecode >> stream xÚÕ˜ÍnÜ6Çïû|.ç“$`äоÒÚ9風…íéÛ÷?²“f%#”å´ÀlÈŸ†ó¥¡¸½¥’È9i\j"Ÿ÷Äĸzbm‰*%!MV@õD´®ž´¦%ÓŽjK渧’¼Ä8®¡¶•T¡’§æŠ«¤^b\SŸæ-õWÝj,âeG ‹SÃ]Ç(ƒ§½L‡}b1%z˜V‰uà‚ÂêáKÁ¿˜®0›cÙ*mÇ“}`£Ô(`Kb$–†\Z<%ˆÅþB+ÃEf˜€áÄÂ1…Qqh&À:1–Ø&z<Ä”ÝCÀ_cxº £Œ‘îá¶&)±3 ÅBØÅ˜š”²'‘°€1% Ga¿ÈÄ@PA x‡$œdÁˆ÷°z*׋A˜(l“'‚†=½FDòQ¬””‚Q”£!•š4laT‡ŠùŽ1R¡©ŒTƒÑžÔ‚‰j²XT5id‰ +L`ÃHƒ½lÐÓ‚1”ZŸ(ì ›¡T§,¡Œ¦S”!E¬!„a…91¨L‰EÝ’aU '3¨ è3 «˜#‘góXY°k¢v­NúðTT)W<Þ‘_“¨ô¨M† 1£&Ä’‡@Üwgg»ý«tA0ª¤7iÿëo¿ã5@Ð, L¿úôñã»Ý‹w~}u—ÎÎÒþè÷ü9ÌŽpßßÄ»4‰xbÿúæúý/‡»t‘ö¯_§ýÛÃç»ôUÙÛ¿ÿ:`âòÏÃnÿŠWw·x/¦Çwû7‡ÛëO7ï·Óë> ý|øãÃåOןÓEÁ¼Hµó;,syƒg³{îAýäS=ò©¢œŸäÏV'‡¹µlu‰ú®7Í(±1WZ–BCN“!×=k]SW_KiVb½R¿Ü`%ýpƒNSýË3qó¼46Z¦±oMc+ãÍoœCõˆS·Ü™†œhÏÕÆú° 动žDŽú"G­®ËQ·EŽÚеEŽÔ†˜‘äŽF<âÄ$cïrøòÈØxO!C}ÙÑ»oÍP¯ã Ío%ûc lÆYéYš 9©šKáSˆ=›Ç>>·Å>>@7ì¦ÿ:ñ#¶V.}éQÝìÑø}Ÿ3®– »ÀvÏêbU)lé"VÄ[cE2ŽÕŒ14):X-ëŠ6×­¨«c‚XQr"ØHjr8%fQr8ˆfæ“H/›¯kf8ÏSÄ:NÑŒqÂgVõ!§¥äF}ÈáTŒÉ6±þÏD'š8‹oŒ½ŒO+sÆ#¦ÌCN¢årø@ÏñCÃ8öGaÝð<¿îeÙš¤nŽýŠÖ4cœðÁC6äT5WÒ!Ç8®Ä/#§ÐsÔ±WÝ{µqìgŒ×žÛ#ç†9§½eã1'È¥ºŸÄÇ«É"öF[co<ŽýŒqFì»9¥àê#¥¿aŸBÝ{YƾmŽ}_ûcFco”6ä¸Ö?µ?µÓ£hÿ‡}Ü—½ÄWö’‡_¿‰ƒ¯è%3&½õ!§Õs«<äØq`–:æX²<öÍ8ì ™O£5Õekª´5•uEkš1N’­÷!gÞ2û˜Ã'NµöÔÖô¬D|?öÿÚö^a endstream endobj 279 0 obj << /Length 2733 /Filter /FlateDecode >> stream xÚY[oÛF~ϯò²`1^D²ûäÔNàEê w‹b³49’fC‘ZYÇÿ~ÏmHJbÑ€8sæÌí\¿3V«þÔ*Viùyœ­Ê㛀¨Ý~ÅŸ?¾Q·ÆÍŒóýÓ›w’d¥?rµzÚ­¥|l:®§jõo/Œ×ÿyúÇ›û§q¥$ ÿâ–Èyµg®Tê‡*‰qO8Õ6‹}żÝíé´ÞDÊÓMe¾C+M¼Ûõ&ÙFÞíi ¯kå™fÏCÍ®íŽEoÚOÉ‹Ç~oC\n¥þ6‘«ÜúŠ—úk<®7Êû—‰½ë<ò:­yÑ»–NPGÝàŽ=¯OcŸL©«y³sé©8ñƒhµQ¹¯Âœwü×:‹<ÝYžEžò£nEø‰½ÇvfÞïø£øû¼Þ`»c®02Ü –U[?ÄåÈ…P$ÀüÚ™ý=±&±¦á*ð#wŒ’Ï»ççÝDtÜÛ×@%Ë7ó“8i²AAp3žNÝð= NÔôfv|ÿ°Îb1ô¾´»ü‚?E§™ûJ«šŠ.K<4¥iJe~¶JòÌO²üOly73f¶üí٠Ϥkúþôûw;»óÛnÿîòaûiðWḯ‘,# ý0Kù÷lÝ+~ÚFäg, ç$Ær4}¯+¦õ-K4Žü…zE#Õ±}gž‡^„þ;2éîd~'mÉ”ÀTä«„ÏÒîd‡ï{µ¸¯ÜÒiØoÐEƒ°s—H=Ížý†L/_Y¯i…PÔu;ˆ®|ö0ô³,=þz³ÝÞçŸïozÿéž8‘adgy:À9ã óN¸Ç¢k­ñnqÊÝâ\ÈŽˆÂÅþ±øFrã^ÁƒÇ‚î=5Ü<·^¯¿÷ìÏ(šÔk¿É@ÛÉ®ýAw¼ÆnhJ4û¢æ!Tص «wC2R,ïÔÉ;eï/?³ìLù‰ÊœïîÐ<<®P9.Óðý4xÖ)Y‰ (Z©j?ÀacgsWXŒªvèd¢fëEb·ÆØBhdP–‡X'Òp{Ç=Û@‚_€Á*Q(>&m'lè:ôØÐc 6g¦C†,2N½Ó˜„ŠÀ/QàvdªÐ?²-Wf÷ÊÆ Êt8¡aµñæÇ£îJûÊlnɦm6g”cŸÍ€€ö›Àç‹.[ˆ|a*n•+çjY0™#vN¶ºcqÉøŽöMs+PŠ¡?Û Ü®’ÉÃsm,߇xÚ ê¦`A^ÛÉ:ßz{ÊÁêP¼=yëG›Žiä¸mG¯Bïå`jÍLìãÀ"™Žå }¸¿5•î(#ÜñÄnôg7]6ÛN*ë‰KJvIÞÇ¢’õ<‹‡äyÖ'œ ”y˜Ä“̱㈾44l¡Kà÷+€tk½ëßÂÝÃmŽw/‘x`¶£.Yª?=·àÚ`ýÉÖ+&/@:iÄhÏ·"Ӽ˘»(ŠJÅž†8÷hu=ÐDÜÙax$Ÿ%‚âxÀ3¹a‹£ ad N´â$÷d0òS­Ý¡ìÅü¿ðôºÑF<¤~F»,—. z|2“ç”;"²cL2 P<0KR(hköË•lLØhyteÐã&¡,Zʯï`^A^ —:Êl«0vž¢UÁâ%I¼$âƒGE~JLÒÀ<1'ËÐS¾±#rhÙ ¤…2 Ù÷à e10˜½”8/V¶WP © gË͉õ*!‘SBŠHRÏœ;„Öî»â(»Ú¡®¸ ¶# rœFfºjÊW½ŽN° ßTLÔVl b«Ð’Œbú^¤’+]5£R Ê­4‹MåÞ{Ê´‚‘µ¦Ø Gä8ë×à™Nj—Ämð0D8´‘IÇGj*˜ ÂeÑpcr^è€>+n‰moe…Wî $È㢳 +wz_tU­­åaÎõ —á½Ûû/äh9YxS–‡mnôrÐS’4’UI4ðu¨’”-äBF;ÃaÃO ~¿¡ _¾ ¦¤Ú¿(&NfŠ‘uKsr™:! ]“Š@Ò—Cëîi˜£Æyì1 ¡”:1aQ¹ƒ„Ö”?6KÀT ‚½ýüùÓ÷ï>=<ýÆÓoïx½»ûOÿ|ür póyÞŠ£9t…Nq:ÕˆçÉx ¿"ÑÙv¦8Â}B§Ñ„N£ü,oc WËäØ*ƒÐšÌVÙ˲;)µ0œ²X>8 œÆ!žê¢Dˆ4Ù'ׯFyUþï¡­)ˆ"‹eDCaûFxÈy0:R'ÀXñ(Ô¢¼R2í †\TB(‡Ù°%z@ý¦™÷eàˆÇ Fã…ápÌ—#‹r$[W›@H([@Èô¨0,j \¯ ¯0«sf X{hÆ(„ƒ¦Yº@5t®òN ­âBZqî"gÌ Ð ÷œ°r§"„‰€i C3°è0Æà„“ƒsuˆ¢î.Q @©k[ÕI¡xÃñÅDØeç?aSJUjV+N-Ø›ûöɑϔ@ÄsÛ88‰Ó®o”ÔJÊÕQÐ81¡6§ Rr4©KË5¯/(‰`h 0´ª S´§®Q|üV0¼ÅƒøŸU„¯,õ©ç6£Èt†jvü•U¸3ÖX\š„™àï”J$æAQáw^vm3šËÒµš3ljpÌ[Hÿ7˜Nb |ø°v ºb€ããÇyh ÷ ZòeÌÝ  uàOóÒ‚²Pà[^,oyo™BúÝºŠ wBËkÜÎÛÜ¡~䚬o›Ï\{³ )oœ®L†Á+¯S,æ_ /’¯:ÎL±%ŽP5‹aÄU³H¤§ŸŠÛòðDCÄrb@g`\L‹E@þÎñ÷Øl-ž{óùÛ§.É:„Ü‹f?{ýGú 36xW;¿2鋦Lü{ :Zð§Å÷®í „´%NýtÒ¢_0¸R jú‰¹S@•=ª{¨=qèòP¯¯Äùµ §PÙ⽞TÀ¸\Jø(§`Kh$Æ8Z0Ú“EÌu"öOE'g(µsöðˆ¨Ÿ 2y? 94þߤ´7’x`îIÀ]> stream xÚZmsÛ8þÞ_‘É—SfÖY½Zö~Ë6}ÛéÞu®™ÙÞ]ï#É6§¶ä¥Ms¿þ< -'ÊîMg"A‚p“‹˜þ%ëø¢Ì²ëu¾º¨¯b¡öÛ 4þþîU¢| b\L8¾{õãÛ¢¸Hâëu¼N.î6SQwõÅ¿¢›ãñj‘®¢¦­í÷«E–eÑÍOø¾îŽW4òhÛ-òèC»éúƒl×Òœ¬È“(-®þ}÷Ë«7wA‡"MÿOe™óO´M’äzy±\å×I–Cá»]à 'ÑW"}hYÃ߯Š"2½5Ò0ü¹©XQw‰®é¯’HgVôM"& ƶ½kkÓ?žÏFïa×9;Øaß8/S‰uãì¶5CSÿ@„586 ms‘d×IÍïah1gºN£A¥R³Û`ï§äý,Ï÷C,^#Z!‹ãHô!*¢í[5žht–3r„î)=L»íè[FÕx£LW´:«oöqM}¶¥{ÛºéY£œDZ²¨Cç#éÒºæúj‘gEôaÃÔ,2tØ :u³8°Ð6@ÿ'ùš(Ë4v8tž¥2æn­—š‰Aydr¬Ð±Q«ËX7·-h‘¯#³ßw|$²Z â@*gE,ZŠÔ9ù€Ît  GZFÛ…,+¾ÌL·0Ÿ‚?–qÀé‡6"Câ²<ú_>°¦ïЛ…ç^èýˆUH39š´ŒÕ!Ê$º¥C<Ó¦ –®"Þ_²«〶­]Þìæs ‡vÎU¤f*~rЧ -‰3–æm×’oùÍ- /VtÈãTÐáõÄQzï®VYÔ|¸/¹Q5=,Ë·ëúÍ£qÎlyÏÜc·âï@"´%!•ÇÉIÔÞ: AžÀ ˜ø–îõA³’5›qÀ 'ï7ºž¿Eô³©xâ·Å“­ñMÉe cЪB”¹?Ùü„ĬH@Ô BœÑôßdN«ªt*ð`fC„‚š™@“{ƒ‹¼rhz•á'…Ùf:N{+•À!¸÷^Ê¢º9• ÀÅ_wÍàqŠˆÈ÷ ]ÚxÒ]‡@VݹɺótgÊIwIµQâ8suŒÞÑ<Œì‘‘ýŽ/ÙKùÜfP‡¯¶L24öë]ÜÜÖàææÁô߯#Ga–Ši™hî 7*åK5I§œY´“‹“¨ ¤œ ÈÌžTÙ²Kóà¼å ?UÓk2 k’ŸYWucOÁ£ òHªüg<]mÄs@h×gpÄ÷h3<ŠËœRåy#7fŒæHeIÏi@²,áÖôE>J©Üó”K'lð%ê¹/¦FHŸÃÛ4I´˜ÌqèÆ©°N…±»‘öÝï7 LîßMô}1›¦CýƒKŒFe³ô̬(éíuÆßކèröv|óÝŽò +èÁ Ù4’¸‚ŒYÄLukæ ½Y䨫öcÝ`ท‘é7Ÿ_ù€>cz7Î¥ÛÁ©³åÚ'–ÞÑLH.BKeühîDV²\_—+z+§×”ãë–edy/“‹ ùKH~¡é¹ÐÏï~ýˆµÄ%hø‹'ŒzÇ-qUó= —ç©Í")‹ëUž>¸Í‡K™–¹½»ÕÓÔ`W£GX½ 7 «¤‹Ñ€åÓCûýݯuâ'Ž3ÊÚ>W½= Ag»}‹\óyœžÒA‚ñ`ZÍo8^ðŒ™F79÷2)&ÎļȢ([ëå¥âý¤ôÙXšÁÄî}†;Ÿþúîˆùš¼~;ã"b¦½cM(ŽàòLg– œ;t3ùb‘ç-ÎXõeB*Ó‚’Rî0€¡¥ ÄrËδk%}Y2kà/Ÿ(Àƒ>• ÃÈ‘çºÞý¹n<åag‘ˆ¢‹¼‹È·ÔKÛúG0Ë2‹9yY[£ J·wèëSR¡•š;JžÂ OóyV±S“;Ô*t§Bx1HÞ 9C£<êÖÜü$Ö nýÜdG„zðqÂXœu¬€ˆùÉþć ‹©Ãý‰áA„q‰·¹òàá5Æþ(‹Ð•­,§MPõò;+—@s.‡ûew—•ÇùjzaŒœ&¼„àë:ò÷›ÎüBƒ_„f"æøª\³ß(ëq?:0¸18õ6¯ß¼W5‹æâ’V Ä3˜Ð6M- r ªm×í9âe)^öÍÖÞ³©2¡Äk_ªâ´gUF\°(‘é"Z¹§Äö¾æ—2¾2kz-Yµ¡ˆ5›õÀJœŽH¿•õ%ëˆQ~ð9:Ë7Ÿ¼hF2IFÏ"»þÁƒB#øwÅJ}q¯}=G¤©>šnIaTÓ.H×jæÄ•˜Ë»oàrîRÕ‡k¶Tƒsù<µZXì4X(î»= º‚N`N¤‰±$¦<]n€éÞpñ‹³Ê? MoaŠQ­•/_:$Eà­m[eÕZeæËœâŽHB§L¹gÊ4){1>W0ª\㎒ûKГ?>w€”ÏÊ›f¥ØLšÙ!ÔbŸïQ‹²é¡·÷ãШPŸ> stream xÚYK“ÛÆ¾ëWð°JÜàEðM’-gS–”8W©âfá4’öß»¿î\b¥˜ééééé÷4ƒO¿`“ù›$Šn²8Ýäõ Ÿ¡ÝÃF¿þü"P¼!ï^üõí~¿ ü›ÌÏ‚ÍÝqIê®ØüÇ{u>owaêÙ¦(¿nwQy¯~ï›ö¼¥•Dzy ön›cÛÕf(Û†öDû8ðÂÃö¿wñÓÝÄÃ> ÿOfù=n÷7Y°ßÒø&ˆbá8¼Ùîßûí§__¿Ú¦‘wwûNþð·ïG›`sH÷›]ÜìÝÎÀnÇí.¯6Û0ñe’ãªÓÌ4©W”ýЕ÷ã`ea8YYø±e¡åcmÈhpÙÈ×0ðQ&µ-Êqxõvx/ ‘´K"ÕÉzÞÖµíòÒT•îh;¾é2ˆnèúÌ|Ó6˜t"¶÷}ïܵ8îsYXð}Ÿfp£²—Ñ/en›Þê¹Éa¾yW>œÜMÜ´á÷Š-9$ó¶J¨]ð8F±•4’…^oDsa#e“È3d„Ñ´½Ì‡Ö¡+yl:]ï,„”bÌ!¡ ƪ*Ð]K¾SìCÉtd±v‘^˜¤A S„tA´¢C sè¶eŠ%Ü£Ì/D©¾ìgðíð‡V†S 0µ£•½@~a1ÈöØX?Û1°j£¶&¬)çãÝèÍläSSæ29Ðvkú±cÁ“O±à ÚÞ“áù P²G†æ­¿k+EgýÐJgM!J^ ÇN$`~Lrß ¢5…ñ…QUô/¡ˆð)5õ{LLžÛó cò5{ñ\ê×~ͱñdšåäèX‘{ܬ]äwÞG3 C‰u§_º %Ü`Åveº+CÛ´#ù)Yc 6îéä„ ÛZ=EúôÄÈã=c?ÈÌT0QŒŽmU©Øx.ª!Фx±kætåbìj{›‹¬.¢YkA8 “…ñÒGÁ¨²8@˜\6Œ3ol v PP{SëH™ÜÂ{]Ì` ¥.Bjqw1¥jÜY³aÐ÷‚³3â÷=Å<Š»+·'ã;Wbp€˜Æ <‘Än-)EšÎ\òb·ïE„ÿü÷«÷w·wŸMi°¨09,x§Éy$^û“NºR¼–Agÿîï}¶Û'p6sú"wjTdĺn$+ÌNf–è³'r~/ìéÌ@àd¨«áVGŠá Ÿ¸ O: k gÃOÙðAT¢ í©[N q ~¾¯;YÕé+‰ü/½`TS~¢É”ÒhGgÿËîI Îß,î ­ÃéšwÛ4ÀW²ˆ¡×: J&<¾‘¸eBÞÜä'‡ˆ…¯ƒÉ§ ƒîJ¼²&ÚâUÓu®ZÀ‘yeMåaQBƒÊ>”÷ÕYs];` ihyÝN@rÕ¯CO%ä!J¼· ØiÚØ½Y86„6D¼Aö#t,uŽn³ÀűÇ"™#RrB¯ g¸OWg-™›ÎzÖúBß»WJ4 2–ñD)&ö½×T¬¬ö²¡MÂÐ KðYþ¡VXwòg(rréòø(ËS!´ôa•êïv­läd $Æ”L j·ObïÎYÖBÒ‚t¡\µO—6ØË‰àrÇd£Ç‘ .Z•ú¥daÁæd5ArF­[ôNtd÷ŠŽÈ¥Xލ”¦Â¯.›™“(U©F(‰{’*—ûtÎÐщ Ú±W£*oÜS€"ŠØ£ì}6<¦Ç-VÔ±F RRß6†¸“LÏO‚æI±oòa4•{\ôè &³|sHI1ڙκ) Z©Z™™â&_„ˆÈ;›û¼¦ÃlY fËŠŠV¸`"à²;ø‡³ùc´²6SÀWŠR³Ò⊛`ý¹ºkR×`³Ô5€q]ó­çRD6¿HC4›l’½"¯ÆÂÊÄ(¶$½ÔÞt¤EEàäÙ™¦?“áŠp±pX´N03eü)®áT¥*3Óuôp~ëŠ,•§dº—B^†dé+K±;† |LâéìÊoQ¦ 6ifd¯”5—÷ÃxòßvhŽFs…¡0gޮ屢Yp÷‹pž3Ǽìíz»SÿÄ!“žÿSŠÂÀÙç }1ªŠdÁ€ª%,V•zœ{fÓ k+¥#>µXZ+ÀÆ"¯–ôñ@ø:ü]fÒ(‰]?,¦z{!¸)Ç$êÚ‰‹’4¸1€—÷KÔw”†";¿iU\²í{yõ÷Òá“?’eÎPÖ:ðw¥ð'­ø¬kB¼_žÃltñÍŠvr÷ÞºPr¢—©kïO©áúÒ\ØÕî_á?œ÷"„ endstream endobj 291 0 obj << /Length 2590 /Filter /FlateDecode >> stream xÚYÛrÜÆ}×Wlé%`wÁy“Eʦ-'®ˆq*å\Ìr'Âk Vÿ>}`‚NŠUÄLϽ§ûôéYµ áOmÊp“Çñ®LŠÍþô&$iÿ¸áÂß~x£¤ß:n½žßß¿ùîCšnT¸+ÃRmîþT÷õæ_Á»óùjnkóíjÇqðîÏü}߯ åÙ´(H‚»öÐõ§j0] câ4QA”_ýûþ§7·÷ãÒ(ú?7‹=ÿÇn•JvyQl²"Ù©8‘-ï®¶Y·ö•–iñ[ÃQ÷fh¤ø+¡z”Úç0 «¶æî]ËÂqؾÃÎ_ñŸîí5³40n¬ZRÌ xx%£§µjcÓîn?ôÝÉ-P \êÓNAoUìZPñN¥|º›Žîc9iZqÀ}*àmçÊÍ ¥áØ‘  HÃ÷Ü믦»X®ÁQr< \˜HPOG³Ç™,²ÇîÒÔ²Š9¸©u/S?±>¨95\IpMGe÷Š·ÿÀÖ“8h@!·$|I cmƒàGhìúg–Z½g³Â:Œßõ…NðÀ ’< þyUÄAwá§ŠwG£.V/æ±ÕIJxkW*Ze׎R±x*pÖÁ›…fÒXì]oM[52úòZmrµ{“I¬MøhX$ Š{ö'c±ÏŽvºUù®L ø¦»Le¼ßïÅ/>‚bqlÊßá(g…²ó (:߸æjeå{Ãbû§9¤w×ó÷Ôõz¾5Ëæåõ‘k2ƒÑÒÒk‹Ýs˜Ïš·Àöw_ý¼£¡e2R~IÑX8±UÔæs¨’=Á’å´µY×_ü®h‘(ü :¨ õX,à%(0ìmTÂèîQtsØûÉ€©„7‡ßFWVŠ8-;ÛÌø ´ñ,’ÝdhQ€æŒ&‚r9(·-:G/mŸû’52[, ÖWÀså9Y,JLu¬dÔA³¯³JV<¬VŒT ѯÙ.m£­Ýá™K½FE᜚Ï8Ž<*‚f0z8ëFü~1½vv&_ìTXŠÉ缡÷bòŸ†j Ùs±y @0|œ9€plm ‘]sl*ÐuÁ&ï]éBv•{v…B¶+òhRL)ž•û°ÏG™Œdĉé´i–ÌO{#§ýœI÷_å®Pwd  ÅË8xÑ0·Ý`öÚú`”Lƒ^Øo†âñkne+ïj÷J°»:ŸûÌïóý¢˜7ÂåÁÄ2¤¶îß´HýŸj?ºáy'_õy®`K¬bfÈk›ŠÝ¦ì„±qÍÏýAÎ}×î›KMÈ©6N']ã‘´ù â0Í„©ìdkk‚XÖ”™*6 j­ö{ðl˜Ž…Ù4óÌÍgïÎËÛöλ"èîé ¿'IÀ˜S¾4klý ­ T4®­ ý‘pì“eƒR!~¥|*„!¤­ 9ÊòH.×P êë©åK2íÂÔÁ½^N\Òð˜É›r`”³«üaÕ›¢4äÁ—ƒ4–ÆûÀŠ»î‚…¤ cêk †¡H*HÑZ˜X¦\Á5F‡¦OL|,ÏB$ÅR{ïS‡ | OO÷tAß;篩텳ÿIÇd|#`Ljdºê©ñǹGð¨ªuL³j¢*¨çØ´D!‡ÿb'¼h²‹’hŽƒwë8˜FŽÊGŸ„Ê­c# A4H>C2!üó-z^š¯LFÑ A¨[&4„U-‚ž”Ã)5´®®Ùœ!‡û`o!\‰D'ð+t‹âÙ…GS‰•Ä*BŒšQõT…û˜ÍÓ\è鈛Še§a1£ ¡1‘—A,œ{û7$ö Q·]À° ¾Pœ21wÏ‚»Ãؽ—^ƺø ”ÝO  ÿ"ý<#YI¶kñ³¬¢U¯9r@1ó-"ïº %ó‚tpVQ ¥¡“U=HœÌ#Ò¥»èßG!©[ál/ßKNIúŽJúÏYÿPíä˦[NädÛ'ÆåZîÖ\fl¹4ZŸ¸©Övß›>|éBN¹B¨Q8‹4áj^…êÔ¦]P?Û´°%ò¢Û ƒÒ]gs úé@p†B«œ‰n×aa#šæ' ¾7$Æçë’ëÆ®Å7÷4“‡o•²Žb&8P8s˜æÙ÷{fË8AÇHáζÈB“Á= úªµçª÷˜OäƒiIêì¬4‰ÖŸ˜¯1CŸÆ|¡S=+£d¸ZQgj³=´L(ÆàC9ß–;Äò²ü·æ•÷§Äúƒ¼í/N!¿<ðŽ¦žî' |Uý~àxäÚt@¥haðt.´’U-rY7˜*5ôsŠRŽQÌ~1q´Â½ðÅòJKOb­—c¾’€c“øÄ€¿¾þìæ¯ñ U߻٧–c÷MeNp'Î@wE‘ÒjaKR‹Æž9.™­Qì,]Pì,s&c¹ÆÙ ½€åöT üR;aM&a¾•÷àÞÍ$?P@é÷KÕ˜ÃókIH˜¢ »¶®zyüò % M¾!8VdÅaÊ)|a‡.¥ŸÉŒ–!ò8ì¿¢Ý3B‡ºB“gyÔ,ez_¦ÉÝE„ôr/¿VþJ7Á* endstream endobj 295 0 obj << /Length 2639 /Filter /FlateDecode >> stream xÚY[sÛº~ϯðä¥ôŒ­’â½ç)qœSŸIâ™Æm§Óô! µDª¼Äv§?¾{ÒprFÀb±»Øý°ŠÎBøEgex–ÇñªLгÍñMHÔnwÆ¿üú&’y—0ñÒ™ùþîÍ?¦éY®Ê°ŒÎî¶.«»úìŸÁ»Óéür]ª©õÓùeÇÁ»?ñ÷ª=ÃȳnvHH‚›fÛvÇjÐmkâ4‰‚uqþ¯»ßÞ\ßYÒõúw ‹3"mE«ì,+’U',ð3ÊÔŽˆ”¦A{bi°]«^ïšjPÜíÛ#µ² •ÉÕá «¶üöª7³Õ9õ2S¾ºÁݾŸ#©Óõ†Õùe…ÁÝy‘-ïPŸG¦9ì5t`}\% ƒª®ívºC}Áù/£x¥|¤A…;ÀÙ%ÎeÂA÷·Hjº1BeF¨<)_§S@O7 ^Ÿ[²u­¿…Q¢j&þí¼ˆÕõ°î½Ùs£š^5í]8t†‡&¹GˆgÇ9¢D#‰ ½{ö/îÔpÝldhÛµGv-Ví3“[¸ã& 12xŸ•!]å…ˆðPxĆGì¸]9\Ï¡À#)p„k{¡°ý-LCŠÐö];îöÜ©º®jv³ðÔcU£¤a,L`y$ó‡+ŸÊDXÁA£ Š­ÙSf~`»lF³£°=tªªŸ= ¹ä0Ö”xò59tC$ž9’8òà}¹ÙÆúŠ€f Ñ5AÔS‰²ÐwLìJÉ `Qfî(È´yÀlf£rþB©>;‰†‹lâ\ä&gFbhI¬6ª%Ú$@Añâ R9 R˜#æä)ûê°•-¦¹0œó˜¼ :Ô„!E7Ü¢¡„ý ¬ŒÐ%¢`ôÊQ {lnTÖ©Ó¡Úˆ9¬]ÚC-†­†)êéEÜ“dÔu/y0·ØÂexÂ4Ź{ã=Ä’½õLW/Ì96|ÀmY°˜ó¦„;Š3y)é¯WÏ—„ˆÛ a%XL À– nÆçZ ¹nùK&Á†ñ2^¬{n}2h;;“Y‚…æ|À®å³Ž„ãµ X¢5à‡‚ùøZÁ0j39¤;ÖÊ:â§ê†ù˜<òÌ$ ŽðöÙx€sMzvQãý,¦ã8Z-+R±OJ1Ül¿ºýüþæËÍ—_™ý‡Û«¿~¾þr÷•ÎÖ½ÀŸ,¬cgƒwaï5FE$’u@Xë"ùQ{n Æ&›ÜÌe”†Ì:uPƒåš)cS›Eì ØW¸ð)Ç,ˆJ#Za³;öLD¨º˜Rñ;èHHøSqlq*s$_À Çå[‰zÑ@=F¢$ZîÈKdf"Šç4’P[’ÿs“ÿsе5†0JÏClðý³Ószqå³—ÜÁÜyq!_³òuVFw°« ×KÓ÷ž46 ejŠ$@Æ7˜ˆbÔ‘[,6zþÞøÞ²<äBà~§×Ç`ʤ2%» ú{àc,ø½ŠÃŽÇ8ü¤¼0—¸æ°ÊvEÒ”)bŠÚ%@É zÇsDæP”GLE™•ÏeâB|ÐýæPé#¸ÕëÁ£Êü„H™Nˆ½FzÛ˜å<úÌq‹äΟ¬ &jEr‘b¯#õDë€Äƒ†—SÀùCmÀu<}ŸXpjiæäÝ4sžæÐ‘$\s£OœšGBèá S7x.ä:§jˆ@9*¨Nf1ô‹óÀ_Ü—žï:f"2‰›3‰‘’i%ôÒ&]—ä™|=±›.œ`Ú“ËÄð—rÓ̵PŒÊ÷"À8ëIaÁ^õF".\€Á¸ ÛñÐ3ˆpä– zXªæÀ‹^N‚•™^F-ƒF°ml9LðÊF"¥„T̈÷É?á¥u.êÈÍ­Å–­ª`GËðCCo—Çæ}kqHWF$ ½óÄêÛt ‘ÊH÷”ïT·âöy2SnÌ„[Ó³úh8ÖÿûÁ‹¯wlfÊYÎë­øYnËY8‹"›;[Âm&ñ¾¯”äp²ãÂ/yÁದX! –pxœï`Ì¢”ÇL&fycÝ &éTœ‹Dˆ9· ø›3’Ic¹½xâùá`1X’&N‡•5 `eíÏ ½¶{~˽”H‚ªåÒc:†ïéÌ}Óµ7‘Â@xãÈ÷+5/l˜>/+a.j¼õ,äÆl«JDš Ç …ÄŽB<¶qŠÌI¹Ü3)hÏw\4iõ<ÂÐn^„Di9S$¥€“rƽxÁ½$îT )„¦½Å+U†¶úž¡Öô˜HkÀ˜Ã2;›Â”Ŧqì­¥®ÞzÀ·l™YôýéÓõÕÝÍí—¯Ìèö£¤óßÃñÐÓÛ•:&zÄ)—¿€¸isõ¹ßôT¥ÞqŸgbªè‰÷5ƶ=›òuRzÜ’é3¸î| Å3‹Ý3»SšvC²};óliè¦Ö™G¼\œ>i%Œð@^Öfé‚— kxõ|ÕSψbò~É2®ºçA`{c‘öÑÃT-‹¾×¦Ç£"RîØ Ô‘†á‹²¼ËÓD3ì[àà ËÓ±Ñþ±Iê¢1-”OXrb6Ò¶Xê¸-Å>¬„ÀU;2Ñ`&þC Ì,_ÅeÒýœj%ñª7„üÔð„Éé/€ÏòÌß ?ùã$Nœ‡+vÔÓÐUôoM’ò}I' ãµï*¤¦ö‚“-<²’¹õ0VÉÕIèï¡N€S¼@ CrgŒ¾õxé­köÙ‹Mp¿ˆ ;Ô.ó…»à¸SððÒH]¢ x‚ŸÉa©µ58kÁ߬'e´F!‹6•ïÊ¿ÐäçV €h×U1±Ùÿ±3íž²gpç¿;së М9¯µõÍe]A£©­ƒÞ³ãêÍìá4åÏ¡é!÷âT+ówñÿ N/f endstream endobj 301 0 obj << /Length 2768 /Filter /FlateDecode >> stream xÚYYs¹~÷¯`ùe‡U¦2÷‘7%Vl%^{KV•+•ÍÄI”‡3 0­Ÿ¾0‡4ònña€F£Ñè ÀhÂ/ZUáªH’«*-WÛ㛨v¿âÆÝ‡7‘ðm€q3áüÛý›¿ü#ËVQxU…U´ºßMEÝ׫ÿ×§Óz—nkóc½I’$¸þ+ÿÞÖ0òdÚ=Òà¶Ýuö¨zÓµ0'ÉÒ(ˆ«õïÿùææ~Ð!‹ã?©,rþ‘¶ÙUe«¼L¯¢$e‹«õ&ÏÃà•ûðáîæÃõºL‚ûÛ/ŸYïo·÷EáÏïo~»YG|?ß3íNûr÷¯¯¨ø*Ê®ò2[m¢â*¬21 0†E°íŽëMœ`ºidÓIXÝŽÇûƒfÂû¬üç£Æ -.Ð3Og™ÅôŽ µ¶æqå|\Ã,-Ód–iNŸ”U½æÕÖ"­­õ‰Ö¯éÅô´ð~”\EYÄ©;r-*ÆJáZyÆZÁ÷‚ÄÎ~wï _$ w>N;ÎAWî>{CÛ¤áeØõU{=Q×[ópóå¨ks>úE£­j]/íAá´$ ~ÿ«ýÞê=Øã-ÓÌŽ¿ì hl%b­Ù¼€lµ;7½„qì,zöÙÄãit2Švüm;‘qvº–Is4ý(gª;«Þ€® x ŠV¨ `MW1L„èÒÜžèð‹°Á¢ÖñègéùÇ/Õ{AšIæÑÔg¿ò—EsW’Ý‚êF)èþíÁ±`x’˜ÆñkáÆY YL»mÎ5ˆ{<ªZîn§§i ’y^|2[Ý:YG¢U‹L²<‰9š'¦¡é‘4èÆ¹² ýÚœôÙPÄáɨ_f‹32j…MÜ:ë£Ó ¥¥, J.g’Ëe “&&Ç.¥É¸v:5(çîÕ°¬B9ïàC$­Ä³Yå×à…,“î±ðé=sZý¿³±Ú';³t"Æé­Ôm &LC7`-l¶ê¡Ñ²dÇô‚ó€»å…H0£Ý\ò à‹}½[HŠà æe”½qšË| ¼Ÿ•«‚v€|ŽùíSúƒj™Öµ2÷ Çje^lˆ9ŒÖi8Æy22¾^.‘•ç–_ˆ6ïI²£¢*ÄI\I¿Fmµ$/9¾[/ʹ ½$6L·Š"ó;­Þûa‘·d2Lz8LLûŒw¶ïª¢íö¤ˆÛµ›¤L .Žöf0¤Sx—Ù¸’·4*Ðe*¡_¦/M,|އ)Mq­ÙÚY€°ÊUVÁÌø‹qšG|ÀÜ/ƒíˆkœä°:É¡©,:© 'kX.ñ í¥˜î…ÒWõÜb—£KfÙ}9t ëDkz£sŽofxC2½@swýùë§̼À'ù$Ú¬j?°Ò¤äR ßm×:•‰ŠqRááŒä玲¹…þÂï‘]Q›ßÃ(Ý’$¬ÏxwÌÁgÍYØnù‰;鮹ßÚ¸¥X¢5KLØXˆ$ŸÎØg¬=VŽ›,&¸"I=CB ¬Â<¸Ó˜`tÐ#ÿmË!‰pË5]é+OÁ¾–ÎÀé¾6i5ÔXé99N·[¤H„Áùê«DØ‚]ËÍ9V¡ÔM+8ºl€ˆ á5˜˜¹G_@Ç×——/1¶g^JŵF\wÔB±LüÅÛ–Cÿ™Ípl††ïÍ‹—ˆ¤2ƒêÚȃKw<ÊÅ'Ç£ØìMK È>³~/ ×pJô4}M/äò¾D@S”Á¿1=ÐT8m[ì ÖÁYŠiý4‘>®MU X¥ dMKAá@&“‰–K›hp“š®ã¤L@6^¤fbóZÈÀû}âη5”He­7‚ä%Ê1nÛ(säJK8p,—eÃèŒÅ:†-S/ÃH5\ªÑdØa}“jâMìÝ´ûƸwü9&…©’zSyÔ­õa}jëŸ ŸÈsƒÀE¸ÚQ¨éhë¤ÈÄ]@­GÛàQ’Sy ‘­â™â{ ¨aŠ‚ò=ATÈôÀ)Nv'˜©µâ3 xT(°­_ÅØ °qÏØó`î jTí8çp¸7÷ ­Á¢,‹¿Š¹Ùó¡ÑÔUå)DXŒu)¦©Ês/âþeÈœ¬æä4Í«p6‰Ø´ð™•p$ù²&Ñ2T@>Ür”AÐ1ªë:´aoˆ×Œ•Z:¿/0´œçÞâ^£’øÞÃ%”ϼL¶1Û,ú«³Oo >É—K°»„EÂ,täB»˜5â&H˜üœ%Úz‡#…ž å÷6‘6µ£Qù„f÷T'N/ÔO<(ú-í‡ï<ªÝËÝxcÔ¶§;$Q“Ÿ˜Ê˜›»_o?ÿ1€+tœO*4tø¾…—9‘OËnJuç‡f¬Ï±ø$Ôøn3Â$ñæâEødýc«OÒVŽ5"þXc%å›kžÃVgãdÀ2q2\xŸ¨`¯Bíz¨ê0¤ú^O=wºå’€Ž¿d4t™ÎÙ*ÅÔ*H«€Ê %>^Ù¥Šð œ^g–ž‹¦æ·Á͆§c“Ÿ€LýNîÉT\ôRéÜwøD(Háƒp¨U^ì]Ï–{ÃSÀl1ß¹³-–døËP2¥`¡†yÄ7¸´ ø)µÕ\ñé2ÓpãÑtCÁÎø‰dÑZŸ–Œ™ä¡Ühq’,byÂpþã¼9eŒ;€pRXÛ{CêŒÎRv!®–^´ªXP"·IAøZmZ×+¾Ä@‹†âÝ!B±”“s$ˆBÄÝ|¹F>ö)4ÎRaîròÐ;ÕÏTZºIþÀç¨!Oœ|äCâ̓U!ú'Žû£9‘yÌòTTbÂ]>ð.‘kxßR­¤v3äLÃpHýãN¹™… Öt¹S˜ã½ÂÙ†{QLB­ÇbddhPÌâ èRpˆ¢Š9ö,)8Šeó¨U+«ž0tLgç:ä!O¬ùv°¬Õ®×öY¥¨äH£yzIþÚY=½Ù –$^#D!öKþ åN ãþDƒ6_µiæÐ0c‡øˆ|™ ß„¯^*P5ëDïÞxÙcÌávÔø ä—Þjy¢¬ÇmneÔog¶‹l²K¯Ó3ÃŒo׉Նû väý,ø]ÊO8„ÉSýŸ¬tY$¾A3e’õINË9 ¬3=×fþ=³jÎÿáXNèQÂà+hÈß!ahԧȸŠL³>$À–„ä Ô/¼à-¶òâ±ÅO†\ðÄ䱘<š‘@‘a<‘¡ü`„>ÇÔ@@4>ª#…ñNœœÉ¡/îÐ4vS}bN_½XQ.Ä&Q5FÃH™GRüóq*x›¸&»ÃþíLï%ÑôÙ:QE¥GTQ5ETaH·ŒÉ¼Å%JRÕßl"Q^l韽©jîSÆ¥€U¤,×#+Ý$O2žcø¦—cušÊ[MÉÿ©‘ öå©»|µV8uÈEdªÞ°5þ‚åò·Ëä$ØOþÓH' G°Ïg;Œ<pü÷XŠÿ]yyåÿ#þ?ÏÁ?é endstream endobj 305 0 obj << /Length 2239 /Filter /FlateDecode >> stream xÚX[oã¶~ß_aä¥2;¢îê[šf·9ؤÀ:ÛEqö<Ы‹.ñ¦¿¾3œ¡$Û*¶‘Ãáp8óÍ… þÄ"u±ï¯Ó Ydå;×P›— >}x'˜oŒ« ç/ÏïnÞ‡áB¸ëÔMÅây7õœ/þëÜË•—8ªÊõ÷åÊ÷}çögúÞÕ‡%¬¼éê óPíꦔ®+Øã‡p|wù¿çÿ¼»t=ï_*‹œ?ÔvD‹( ÖÂHaX]®¢ÈuÞ~þüéžTýtÿÇÃæá÷§ )úû{"?ÿö°¡ÑLJ»û§Í=*»ðÄZ‹•ˆ@hJBŸ÷j¹ ÂÈy¿L|§Qf;›¥pê]·ôb爦͔­î«œ´RkÑÎC¿-t»§•J¯a”Ä ùU·*'žWäWM Zb¬w´ÒYu><}>Ó /NþZ„‚”ÿµ6ÌúRU(²c¥üÐs>êLU­Â‰pvM]¹Ó¥âQ=RÀ°Aš:›>C1{Zåipª.RŽº(Hò–0DäV—º ­hV¤=èFw'ê“öF˜ïŒƒC£Z¾^Ñþt0˜Ñ3n{^B›Çhsœäú«+|ÕÐÌŒTÕI]ð|–Ìs8¤¥ ]Ð\o U2¹f9Y]eª©Úõœé7ä‘)þ…ðMƒEä%ë0ð–{5a§8ˆ¦qp.Ô¾ïºÃÏ77ÇãqýRõëºy¹ÉêÃ[¡vÝ͹V^*Ö>ÈüwZYîK­N¢ó\¨ÑŠì´qºŽQÄ4Ìîå€,ÏŸŠü<ƒÞåJ8Œ` è–8^4mæ’>¹n;HV=嬹C ²úÿ3jÄ=䲇ÂÇû—5–óg†è FrŠh–ŽÔ Ùt:ëM\ yF “Ò¼Á¤#T·´{kœ|…ÜX7Ä"+›„`¡j™Ö Ws·‡C¡•‰ëˆsBäèã-ò@ì®{¢îMž#%™σú`3å2üîꢨqÇ‘|2åõL¸…¨xN4ˆ·\w6ÉDŽÒÀÞœÊ4Öý±/О":…Œ±§[øŽFƒ‰5ÚÜFöª@#´4`ç)怼5S¿=ý«ºUÍÛì.IŸ¼‘»„•eԘɑd°tRžp¶ ç¬< là/áp…„‡ £ÉØ0e^¢Üs"&RÇ\£woD‘$ð¶fË%ÄiÔžq¡Ût#øRw¾8‹,òQ2!=k“"€cp&rœF?¬*¦Ð2WitNW9¬Œ¤iƽ…”íä.^ÆòÁ?Õéi%’_ Ú1´¦G”ŠB×:IÌ;ÉI>ÈL0ÅuI¨lèœïo4ÍdEƒ6æ|Âq¯Ç²ï:»¾ë5ƒÅó6 æ¨D#€ŒÃdÚxÄöÀxÚ'ÄNI0þ qLª& êO,Ýø(£q ­B O­`€’eêÐI¨×gô9oœBšF4%¸”J‡t‹‘üF‹²ïöu£ÿ2&†~r%,š| ÄK<úÃÕ€íìDRccy±7ƒ½ð޾%•?sW.¬3ݫܺ§>÷áéÃy§ËÝ3ÖŠGÙ¶\?1ï¸Î#œÔ¦KÍM;<¹.Ð’¼V7¶Ù…åîÔíÆ¨±»ŒøÇ» g7˜–Jš>×M§ ×u¾˜hŠœÖ¾ "güõsšÚbN€nR5ö–DcC§>xîC‘Ý%ã§L£_öÔ"C§GK&ëæsRq²hkG|ÅZZJ©«ƒÀ´“™. nËeÌ£]Ï^|k¼L@ÉßhÉ€¾ ªŽ0Œ D@”Äü8¹%²­6séoš…‘-@ˆ4Pž=‘¢xì‘Ü_‘ž´ò]–‡‚•˜OÛíøZˆ)áÀgðöVaè…~?$>N±‡„;h$kL »âí µAÜþñîÊæd›r/x''½(•Ω¯;TƧ‰ö¡†½U¿&øÿ &`™‚Éĵ),uZm`Ñf~ß1ƒŒ¨ÓøÜ˜:ÞùînõËŸ«Í-š$‰­“í®Q`µÁÄH©Ë²¶|·Fé®ÑðŒÛ®6{*FÀw[èo“mþ ìÒ¸zbڜ՜5íý¼4ê#ŽO52«MšÃ4Ç\3 iJò "hQ‡U®#jF{â1/!õÝ"xó¡ÑU¦²˜S÷PH¬^BÎÅï¶o;ø6Ä‚¿ÉªïPbt›Õ׬½,4èWiÉÉ» ¾‘qf©\YÍØB ßlD9-¯SÍ.š^krë€Ð ÄFLëZ– Wx2ÊJÿÅÇp“jñPeSï`Ö÷ýw>?üpü͉TÚ"è…NÈ’X/Úô¸Ïv`;îk )+(–ð!ÅܦEÃ4c¯DOˆI…¥“c[VOï}k¼PDzIlò"Ð ªÐ/ÚDMt/Qâ–û_b×Äæ¹n2[‹è'Óý¼Qv¦ øa„¦À9µ„@ؘj‹£á—;œL’Äì¶³²Žkº¢¥ÎªÑ¢ ¹3.°¥o&¸þ [Ž¡)tvü;a=õ‡ß=!û3á¶é[ÞC&ôЄé5‘&­d~v:Wh3ºYgòr¦)gmóûý{SI endstream endobj 309 0 obj << /Length 1327 /Filter /FlateDecode >> stream xÚWëoÛ6ÿž¿ÂØ—Ê@¬Š"­G÷)Mš.ÅV›»/ë€*s•Eƒ¢’ø¿ßzø‘-ñÈ»ãïÞ4›EðÇfy4K9s‘ÍÊíEävÍÃŒ¿¼`žoŒ‹ çûÕÅÛÛårÆ¢0r6[­§ªVÕì¯àj·›/â,M¥žç Îypõ޾×z7‡“½jpCwÍZ›ma•n@†/ 8›ÿ½útña5`XÆñ+Á"ç Ú,ž1r‘Äm’‰qáÑÞÜ|ø|óõ7D˜.ƒ_ôœ³à‰«éÛµÒolTK«_U)›vβž/X  "Ø£Ý:ªP Ên+<°-xìEp3ËC{'®æÜõ¹¿>‹†ës½ßV mDâ}àdº–¶÷¸Ö±n ¤çqJäÁ“QÖÊæ¨œÊ²î*¯¿ Žƒ—‚GéuÉ;ÖgQÙD{å~_”?<ó N4ôyv5Æý…H %4Mß ªž:’iÉ " dXFž÷ûw íX¯ ô›7á¹æ £#ŒSP—@cÏIÝØ!x6ö=ÁS×÷Rì{Ö;îÜ5´³LßDPr ‘ˆàvž‰Âà8À»£&Cª\ÏFß’¸‹ îC4÷‡“ɦ2Ù(ã.á‘»º(%ö­ê&šð Ô»ëŒ0ʦ„Aý/bO>,ŽQ·pºÃŸ¨ÑÕªñÍŒ©Õ©ö\[i˜Ä9µ5‘'ïè²×Ä>}ÚôX…Lhß¼ Îì VõMS¦=,ÙXô²¾2çªXÀy¦Ö¤jÏ•Ñÿ å,Ì"q€öËÂ,Î` …yÆs“ ¡p/¡·s~hÃKðb˜?‚¿?'%”æaºÌNkˆg ÖPJo †·CFsŸj(;­!<EÑ º³D ÕºjÀ­i5ð<§hiõV‡ÿyæRoQö^5¾O¸sø?KÇn Õ\Rþo¥yý;C·ýÜw¯ gµPÔ0&ð"²Û¿!Ü$ÛNÙ£—C«lçpÑh`€wÅèÜj×;×uæa'1KT¡Ð—ÈØh×¹¬·‹zTEMŒò¹Øî°r¥ý;£aÜo‰(Ý[ÖiP¡â4A[]8QÈHp-\_õd-‹Ö'ß‘C‡òBlj”O®G ç~w…)êZÖDù§.}söT‰ÔF«Ò+Côø]»É€«fí7sq·_QÁ =tVx(.0¸˜NŸIN|”4èD Þþ%Åv|bŒ‹è'¼¬ÆÀ+C]ŸEî Ì{ü.QFüâûß:ÿzä endstream endobj 325 0 obj << /Length 955 /Filter /FlateDecode >> stream xÚíXMsÚ0½ó+|43±ªoK½µI“4“fÒBOiœ„0Ô8ýø÷]Y21ÆMsÈ”vrˆÁOûì}O«]H„áDG)cHsç=\}[ÜGöâÓY8\À¤|;ì½:""i¬I4¼‹!È\Ö¨á$º‰íß/zï†ëH‚Ò@JƒÜâT4")¢Dpà O%G„qKw¼ÈÇÙ²ì',ñû|’ý4ôvGŒKjV%q £§vå ¤‘BZÊ*¸CÁB]üÑ*'Ç‹~BU<™æ÷ÀÃY¼,÷Åh@)…w©–¾î'$%öÝøDöß{ù-©¦ˆSI ¯KÙ%ktÒ€Wj6ÓÝYeMl§SLlÑ;‰‰ˆB´Z‹|’ƒeÖ`@0Èߪ³OY—’PeŸà~e›Y–^e‰keweqŠ$p¯•½îSŠUVìÛ½i}(ÛwÖ.I¡Z?ÁýZ7óîßÅĵÖ;ˆAk¡%|Ô® ®1Óx5îÃN~Èæ£m•%F’°ÃR9`ÇuЀ{°! õ!”Ø¡M¼y¾+ƒ˜’#Å…e> :ßOO.lY8»úlÍsÚW2.²Ì~}bNçYŸÄ¹ñU9*§‹Ü‚/§ã,_eÛ6#Ò´1ú>k'N¥Hq…ÀðÞ{wC' ø¶b­V1î•,Œy-Ùf³w™FµKª”?–…Kú$ûnŠv6[,ç™Íùª»ÛR‡Ým¹$…îÎ5Ú¿9Y÷ ÆZë¼ÉÚ½31h%ïyÐÎ<ÏF{dÓø &|æ¼1›~-ͱŽ:!QÊÜ\Da ôDî5EÙíŠPbg‹6ñ¦/˜‘š@×À<‚É>t£òqæù0šæÖ¥)¿–UyάOŒ/êÇÿ¶~&–*a€ÐˆWÁÍ-Ž&pëÂ3%£pQ”JW³hÐû¸. ¢1³ D™{æÜž“Ž#€b =P7 ˜É4Ëu.ö ö4à[ém‡ìv£ù ”vv»P€i9sèu€ «™bQ”fVÜÒQDyúÏu˜ÏmIký…b?j©Ük©S Bº,HJ;=–,åì2°ÔàqikØÊ´š[åÖSM«à­ŽlÉ›MW¥½½¸ëèB©DD½ü´ã“š¥J,õÜ/µÃtO•Ôa¤´ƒÐ#547¼;†R—47«ÎÊû_9þ°r„u(k;íjÚ!ý•c'éo`uË¥ endstream endobj 371 0 obj << /Length 1874 /Filter /FlateDecode >> stream xÚíÜÏs£6ð{þ 7k‘Hê±ÓM§=vrëtbHÖm‚=˜l7ÿ}…!$=ûÚwzØlûâ¯y úK7‰þ‡nT²œ•ÊÍîå&1ÿ¶}Ú ?üöó 붺pëTþxóù.Ë64!*Qtsÿ¸É(%ýSÕ}µùýç·ÜÿzóåÞ¾RÆ2²¯ 2%ÛPAÍÒ>S¿«\¦„òtˆ»»Ué§×f×íÍí–‹ìSÙTÃ?•]9üôKSÕßû·õùŽÓ$*ÏÍ‹é#ä‚ðL ¯UžZ”m[¾±®­ëá¤S/Q²·¦ü‡Û-tøƒ-þF/ÿ·wú SŒ¤Œnò4'Bdø¦ê­Sn™ÓCÿ%M+U,HÂ:x¨‚Úý©ÃsÂDîp?컢ªÛÐ:$|ÍÖÑ_𤠒rÛ¸ cõÖ)Oï%M©Ï\²=¼äà `™>C¤sì¾Ö»¿Šou{ê/!Áy 3¢>üi©ŽÍÀªÎå°ªÛ_ÆAU\²Uõ’Uš¶@=ߊæPE.â¹$œ¥×tŸh†&a±m5lítRk¥—±t’¡GŽt[—]]ÔÏõKÝt!·Jç÷ž YŽ}ÀbÎå°¦ÛZš€œ¸dëé%û ™Jµwê€VõNn‹Óþåø\±{3M2’É÷ýà¦ãEÂ9å Ü¢…ŒApÈä ÎOà$×°9W­ n<^,Ü\ù-<‡K¶p^r'¸†• ¸çúÂ%4“bmc q2µ9µqÊÁ©Í¢ÃàÔ<±zÁkΈP¡ê©k_wÝk[Ç>”¤\~ XÈp8v,¡­†f€¸ÔÉo™ðeŒ°~YôcñË©üCYn^²ï“*EdBv]K¬S3ªN9¨ºè/‡8ÈäIÕOT¥")ÜÕ¹ºYó"Ït¼X¸¹†s[Hs—lá¼ä®ßåHÜÕ¹úû±lª¢lÞ´Ú㾩«âáí£Ý#§ÃÂúÌå°Û)°pÉÖÇK|2žÈÐç°ëꮟôG§”¦„¿»¥8k]ý hê Ò×)}ÍŽû"S{_?1î+’ ×÷Ü-Ólç×°}lIÆþ`•çrXÙm9͢ʸT£ì%Æ•sER÷ºÜ¼¾ènqxœ¶O±Û©"J¾Smˆk8P¬–­†±œÎ…ÓOc…Š4T˸¸T& ÏÝÆ ƒž5ßB§f`9çrØÓío¸&n@q©FÔKŒ“š•Ÿ)<"ººE< 3v k=—ÃÖnãk\ª±öãÖýw€rwqýX¶§ºeæ»}чtúwºîñ’î›b¶5—€‡ê­S^¾¤i^|¸„ e‘À¸/Ë£"ô¾µ©ß§ä×1^IÆa•çrXÙíy\Ê"qeý'ÍÊuÛb_Õä$ì꾪yáR>¶{)ŸËáK¹+~_Áœ¸Tsx‰ñ“ á„RwûØî›îÜSí*×o–~܇Úm·ÇCÇÎå0 ÛM` K5€^b0UŒ$¹»ÓÖå°yZ|+Ÿ_W 8:Ð)ÝŒÏZ‘©= ŸÔ££„€]ù<÷ůï¹/Ë3ö +>—Ãânûq\ª÷ãâz†¬òÔ>­×·5õ«<—ÃÊnËiôÿ ‚L5Ê^b\YÏšåQå¢{;®ùÂ<:p.‡ÝnÒ4 ˆK5€^bPO…eîêA0B¾ú óØ+¬ø\‹»í†‘©FÜKŒ‹'ýÝî;puEÛ@¸'fß3Ï<ù/ > stream xÚíZ[[·~ׯàcòB‘œ^ #@Ó`‹-ØÐv±‰#»A]c½†“ßoÈ‘tv%­³»ç¸háñP<ä|så )¥R]p©d£8a—˜\LCÍE Ž0œJq$xÖäX žìDžÑI­xf—9®ú…°¶Š+ï[p5a]K®%ÀÔæšà}cChè(njjdÀ…€¾QHà£ÖUjÊHbŒ`•Ôª‹ š°<“ ƒå¹DtðªØ SIçtruJ"6A'‚³(´¢H.¥œ1Âta¹é¸ÌQG€W’T9£ò -PRv;å>«^§ZVБrI`›µIˆ èG”‹„OSASsÁ7AÛœTPŠ‹0ü3CaD¤Š+-Îàš+Ä&è›[ÔåÅI ©N"ëœæ$eEN%†Á¸;"]>˜[ ߊ6íò1ü ë‰aÕPT‚âr„-‰«Ëªt⃫Ø\•èrÆR‚_ä¢êrŠ_¼*7E‡ZJ¨ÚÉ®¤ Ë &êrx']Þ\5`®dRŽp& SN®T52D*­Â€™] *N8ZÐUÙU5åâ*«ÿÂ@Uº¸®‚UØY¹ÈÍÕ¢˜pÕZáóTâAêÆ NEX=×rê1¢"vbh °,x Þªúo÷%|´ „ zº¢v7aõìÙjýò·w·þþÇ7›ÕúOW—7›Ë›÷=î‚{¾Z?ß¼¿úpýjó¾‡_úÛæç_~üöêWw0áÇ¥¥‹H\c-æ…1ï——W uÞã#îbõÍ7Èþ~µþöêúçÍõ .ñÕ;±z8PË>B)°‡Íàý;f½øðÓM§ò×_.ÿ ZîÙ3·~áÖ?<ÿËh¾ú×ÍÍ»?¬×¯ß¿öW×oÖ_;€þwî<õç¹[ÿýÿtp*8‚»üðöíÅçä|€ÜšwµvÏà{mÌ?ƒ9lé$ŒÙúp{/°½~©õ÷×W¯^l Øë»3·~¹ùõæ®Vï¶¾kH¸ÄC 9<ß«#‚>šïrÈ·<šïüÙønñïöX¾[ø||Ëß~ß­ðÍŸ‹o ‡úní‘|kÚÿl|è[ˇ‡ð=Ù`[}øKÁ7Ø)'l©½˜ˆ^3b¦þý![ìÇý›Ë}›}uõî··›×7w÷[-›ªÚ[›á£õÜõ\íõBL6zÒ-n7wdpËŒ.:Qz¬iAª¼h!4žlO±g¶g±gµçT ÑñŒöL÷8å-ç:壨ؽÖw9¯…o+> NE­í£`ÖÎ%ÿ|õòÊÁB_ÉÔíž³—Ôöˆ‰=·v2ÏÄ×~¬0ÈH¾p]RJ­®ZžHÈÇ–B¦'BÖâ+K¸zi{SŠd“ÄqHžIL*¾ñ^³Ââ[,G1g‚ÄQÈ'=ª$ãÉ5-)±xÂ)Tc„±Ÿ ÂN„{™¼œÔ襃ImžŽk3΄q罎Æä¹,â£[¸­ñî>ÃÅ»).ñ' Ÿœó© ¢GûíQAïOKŽå xÒãè#óG²|,å²|@–_Èò Y~!Ë/dù…,¿Ñ#£ÇF=6zlôØè±Ñ³B¯ ÆÓè‰Ñ£'FOŒž=1zbôÄè‰Ñ£—^6zÙèe£—^6zÙèe£—ëlù’q\®i¿±Kò"tÔ‹Û<{ßrPÀî 9ù Ç“t,3a"+· “º{’ߊÍ„‰´¬ŒûÊ BÎã•AŒ3a"/·0ÁŒÁËñ-0†™ò43| ÍT4ÆFK°A†WhŸKòÉÚ1R¤¿EMÇJ}Ç_øOÏ=V rÞV‚Õ¨©gè G±è®I°oEÿù·ëé–´«íópf‰ÆÄΘÔI5À1¸;z!¸©@ÜÙD¹Ï²~g|ˆ«kÆèT ’öTjÇsö³Ç î-u†©…ý¼¡Ž®¦Ñ·ùÊÅÿ·«tC½Úí- ‡pð©(åv– aëf}•~o!õ„`do¢´›bÆÚõ¦³¨V߬íä§ï& cíÔ'pq:~‚þyUy²èQ)r êÌ’zô°ÆŠèNÕ¹e"g†rÛˆ%Ùr>ÖuÚ»ºÑïQ ®´ƒ×q³ôno¢‚øéý9â†PP—mÜ ƒü®¸™˜ðK*øo¥‹þDÅ~Ã>Ô‘Õ„_Úÿ¥öbõ’FP” endstream endobj 387 0 obj << /Length1 1811 /Length2 11470 /Length3 0 /Length 12595 /Filter /FlateDecode >> stream xÚ¶P\˨»×0¸3Hpwww‡ÁàÜ î‚ \Bpw w—„Ç‘{rîýÿª÷jªöìoi¯îµº6 …ª‹˜Ä, qtcageãH(‰³³ØØ8YÙØ8Phh4mÜìÁ‹Qh´Á.®6GþH¸€ÍÜ^d’fn/vJG€¼»=€ÀÎÍÏÎÃÏÆà`cãû!Ä… iæacPbÈCÁ®(4'o+k·—4ÿyЃì||<̺ÄÀ.6 3G€’™›5Øá%#ÈÌ ـݼÿ+½ µ››?èééÉjæàÊ q±f`xÚ¸YÔÁ®`°à‚Êfà¿*cE¡hZÛ¸þ%×€Xºyš¹€/{ØÑõÅÃÝÑìxIÐS¨8ÿ2VüË€ð÷ÞØYÙÿ ÷·÷lÿt6 NfŽÞ6ŽVK{0@EZ‘ÕÍË`æhñ‡¡™½+äÅßÌÃÌÆÞÌüÅàÏ•›¤ÅÔf/þ]ž+ÈÅÆÉÍ•ÕÕÆþ„yÙe)G ˆƒØÑÍåõIÚ¸€A/Ûî üëdí!žŽ¾ƒ¥£…åEX¸;µmœÝÁr’›¼ˆP~ˬÀn.666nvØöYÿ¯éíþSù§ø¥_'ˆÀò¥°¿%øåÅ×ÕÌ psqûûþ[ñß„Âΰ°¹ÌÁV6Ž(¿£¿ˆÁ–ñËá»Øx Ø^zÀöÇïŸ7£—ö²€8Ú{ÿ6ÿó|в *LUüN\âðeáæ°pp±ØÙ^Òó¼¼øÿwU3›¿—ñ/_9GK€ï¯Õ¾lÓVìñwÐÿ= €ÿŽ¥ yéZ0€þw“²q±^ìÿÏ­þ§Ëÿ_‡ÿåÿÖäÿ» iw{û?Õôêÿ?j3{ï¿ ^šÖÝíe” /càø¿¦:࿆Vboñ¿:97³—1s´²ÿgm\¥m¼Àª6n ë¿zå/¹Ö3foãV…¸Úüq©XØÙØþG÷2X »—‹Ãõ¥!ÿT_ææ¿SJ9‚  7ÀÌÅÅÌååˆ_ˆ àËþ2‰`¯?[du„¸½¸^ŠóXB\Pþ8On.PìÑ_Ä Šÿ&Pâ7ñ€’¿‰”ú‡xØ@™ßÄÊþ&NPî7½dPüM/”~ÓKåßô’Aåâ}‰©þ›^bjü¦7 æoz©Hë7½DÑû‡ø^ò™ý¦èâzɂؿÄ$œÐâ_øR%ø_ø²«áK^›áK8ûáK.‡ßø2žÀ%b©Àå_øÊõ_ø²gnÿ—"Ü#ÇËÎøü‰ÿÕ w——›ñÏÁ}éšÿðŸ×0ì¡,ÎA@¡¶õ¡íwµb$ž,;cBÓ4;: ,¾‹. 5ÙÁë.7b©_{°V¾KÑ_‹.‘ÿô=lm@Œøœ¬Ööè÷d’¨>¹Ó†²0?0^|(ö©Ÿ ™”ESô‡ßOg?í ;ØVèNyš|gw^ ÕBœ;Ï>¯Oý–GÂçvÔ~Ôp+ >}˜b‰ÕŠ1 *›¡)0Ï™%¤Dpc!CbÄ>󜹾™ÆÎ&—OdBñ?Šå,ñÕßàˆ»ŸõYý¨ÉáÚEDM¤OH{=2Ië+¾—&O0ï[^³.4ŸË?´Ú—4« MDùV•Ð%´‚E(+P±‡º+Ï”åb¯ WÐÒ‘Bò £)—±L®¦úZn’Cjpÿ“ŠL#IÚ‚©£ûu×щV'ó^ZlBã­‰+uF_3°[²dE07×òa•ø‘÷ç"4ÀܤŽŠ¤­)ù@3ÒFEís«)ŸWéÌÝHÝSH¶¢ûÉ!ÖG¿ðl43è]ûÏâ­œtdp;°›a¦='ï ÖK^Ÿ½åœŸt oyÅw¿j\¡Ýr’ÆÎ­Y] ,±Ç~ÒßrÐЏþÒâA‚qe3^i׊7쥡.‚¼ž…åÂòí)(Fe¹tòmì¶»Äcõ¸ ü€ÞÆ›Q´âprÇ:7óÝA³ÜÐxþÊ/Û:’–$D²xQz #IT9õ°Âðž3ºiCÐ.½—Ò.Žõê„9ê wtÃb>èY/ÈŸ‚r³g­Ò“n YÁ “wêî=€ ®* ²æÖú*A|þ8,/U²£Ï\£«ª?÷)‰[öU[…ÊY:æ¸lŸ~|m‰tþl£œã¨0±Ì„NyçcïHð^£ë äÉUë /ý(ãí9ÚšH-74w¢ì¾~ܰÉRì ¼YÍóëîû¶þ££*ÝÏ'$âöQâùy*¥×Ëqy‡YˆIðW‡*­Í(W…EÈé§3XÚ<ŠwZ~müÖxYqáßS›òÂ{ç|bœ¡áÎãâÆn )’„ò%wLVåÖzµ?tfjådCóÄ8ÞFíÓªMÿ0ã…wa+o/GýGÉyj®AS;'þæ\µà¾!{èU´ý*’£š6Mß`и‹ý©äb·PDÎArÀ¹÷¡§ƒV¶ìREi€'€Éý„gBÌá îxŠ×z…|Å’{eßв¿­ƒ†‰(?´pÐhUÔ{ùç©+`1MžûÄ\“]zDçôcù¥¼a=Bn/cüûÂ’äv#·3X`zñÜ$éUÌ£juJá›_%œïû²Ýy±0]ÓTì¿bƒñÉèÞëm<âDFF~¶;‘ê(t)25¼]Pžôp%ß“9œÆÍ`ˆ™¦¶”*ع`¹MõÕþŒ÷®;™ý€:iÜ‘ˆ_ Bu÷07åAW9ýúF•,ÈwNž„QzÉŸ±?zl]†ÚªÏ=AåÀ¼6im’åwsIÎN‹ñ3†ø]·Ý•Žå'•ê)NódÀ÷Xú²›eÑœÿ0œ[ÞðÓÒhÿuÅÃ}›Çø0Åz§ýM°Á%†lúL¬)µún‰7[˜©Cù¾zu3í˜àŽoη@BÆSËú°`÷JG¿¹B…«§Î¸~=}T€ùÜ€Þ—¡1 Ò•Ä;rŠ1WÆwåïovhÀ àwвò˜€:7`ÛþPãÙHã°wtSøfü­'Qwº Úþ#•ƒpOƒjši âObuüp9KEÝØƒÏƒ]MhJëpé©m,Ñ£íçe¥’pªöÆÚ,Ü=m{-XÄH¡‰­Óž¸N?ÒJ³»t/Q¼¸€Ð°Æâ­×üµ™›Ï¢ß¯É× üóá,IÆ‚FœVµ ô x½½f±†æF\\ì2”Õ²¹~§^‡6Bèa|ÞGnØ…>²z±$q˜N6¥ÿJh¿Fô&¯&AÆ÷ñ¦ %¹èO<:ðh%þ¸›±ß,Y$Þk¿™ƒ’Äîâ”kg´˜_÷Œ4·¥Á™ctß0ÆIQw¸ˆ`jìÇôüV’TS«ý§QÔµvÁmÚêO+Iá ª9ƒ µ®¹™,?ý#N¿¨e X£nõØçƒC½jG³Q4©Å6ƒ.”—x»Ô-û­Ž®L|«\˜tûÝê£;±¬mn ÏU-ç!a3ùÊkɰùÑ_€®*©…vU \ßé'z½ùü¯ ë1ñZ×΀á´ %™ˆ,¹¡Æ*Î'^²©[{”÷VËqp§ø¢…ï;—TBÙxµÈùu|F»æªJÊY’Ÿt%¹´ð£ïù&>Nƒª†Y¾ Þ ³«G›sxõZGÅ.Áh)c¥ê­ŽIf…¼| q‚—‰/pù4Îqб°  ?Ô2ÏÒYû^§°xÊœ#nfW>c°KÇuQ0ízNpâ§Pæ›#ëײA]7w›d'«"’ ¹‹ ó­ör‰2¹Ë÷µDT¶t¥ÅZª½xÅ·ƒ^Æ·ìÖŽ¬T·ÜZžN‡R¦R¤&Þ_tÍÑ [Ûê²>9´’¯Þ€|R›/Éaó.‰’!S%PuÎ5Óœ“Ý = =HU¦˜1z&iUüL Ó5@'hiÞ 'r£UóÅhgª#žÜ¤m¶ýѬYG3 ‰ùÑ!7ãô^Ã"§öÙ7fÈþ¾Ö /p×(B ¯o¨,XpŸz·êü«SXéõ‰ÄnZ:ô‰‘° âuJRE…ô%ÔjÈýcqËè® v?!qUçBc*N*µšE†Êc/ŽÚR–ì™ãÞyÒ…èªiàζrg³aœxnr»±Ó0|‹£ .%듲ëçŒ"B[èf–Œ¯BôoÓåΪøZÎH­| ÂT6þA½¿Úyt™|JÄz«FÉ;Z5ç§<«¶uÇ¢£¶²­Šà’P'h"G^£$ßMâ Ø‹¾&ÿ¦¼ÞD¹ «–ª×ŒÕ%½œCÿ%Êð3>Ü•b1 ñL]8Ù53¨b—šm>,ÝšjŒ’E4N™e) s‘øõæ­š}ÉMeQ[–ý½"CˆXøA² o)ÊAöùí ÇõµYñ7ïa „œw±,Q©oØ?žE4ïzvzñ)|oʤ«£äÌ`¸Ô^Š?ÓQ„Bs®¦I¡..·ß‡~âX7m0.ðŸ-šh+xMìɳsëœË\£wÒâ’Ü6ÈŒºs]áw¿0FDà˳×C¥™—dg›žÕ9üN,yÅÐÛÛ}£j,½†èvŒ=ß™âîÀ[^H‚d¿KÞÁCPÊ—¯+ÒXÖ≒*ˆö ÷Sø4w÷ðæð¯“‘¤ÉfZ‚>+¹š°ížý>w÷ö~b³´ª¯† sveïE¶ £'Z;Ñžæ)Êa­ úVÙNðNÔ jd³ ŒîÙ \Ãy^©§ühŠ¢Ó@Aô™3½˜^IÛñ³²­×ßSšJÏç;–ŽCï(„›W†”m²ÃŽã Ÿ™]²a*hš@–R€íÒIƒXâ¬Ì‚ã©‘ÙôÎ4q32Ù½©†[Î¥3Në5œÈª'âHè)=É}ƒ½—ÖýL ]¥V©µ–Ô/Ñö3@¾E혱¼(/|\ §H]yÓHEöãôn„¢øýÛ8– ¶Êô9¡PJùë›v„ó5½H‰¯Ða¤Ö"‰'mÞ’;¹!Ꙉ(SJëé×'ï~Bá©ÙJ ÑÁp—ÖÿÀåw sÂ7ù®ÝKi’`$‘L¦}Ôלâ*ßd宓í°œv¯h˜•U·óõžƒ¶|ˆy÷ÇImj}éDÖ%÷cß'#78ØR4ö •Wµ3ûï¢SWîm}»üÈoÕ0J›‘ n°Go œ»·.ÀÐIÒ‹O£u?T&u«áEÉ¢ø}Êî0%ËdÔ=áM)’ÒŒ'¤Í¡3˜q÷ÄÞ•Þ=HÇÒz¢ÃË \f•–¦ÿn~RHœ­®Z•¡»Œ{NÑͧÄ{=IM€Kv [ìü%ˆÃf´^Xä]u0¸Œ wÏRxÒv»Í7=UêÁG¸燄1êGüãRý>±ÈÏcÉ⛢úBE{Ó<{mn]ÕðCVÒüÃÚ‚¨N¿8?Ř¢;)$,ä]¾ý…ˆ6¾•þ‘ø§p?Ï­6!0¾œi%Ë!(¾=Ù“Ž´ñꃱ@œI^½HóͬŽ(/&=ŒÃZ^ËÅJÄþ\Ï#ø{³Ôáq¢ÿˆá¼ïIisZF~a›ÈJa/oÝÌO™ZÈö; ¡oÕ¿vÝÊ@†ŸÍ¾±OÚž6ê„:·³¥ r÷D*ÄÎo3ùx•²Ñl.+Y)ëÄoŽ JykÜ›Ló–Ç¥ùĶAû¯7‡s–Ñ \ªÈß6Ç©z™ #|u$?µxO=…¡{µ7oâwãéÝÕ5Sš4¤n$ùНÑÛ–­ëñ˜[•VÑ ò„[íBgÔ*ÀAsTr{uQˆó1*Lwš‘jɬ±ÒŸp=a ú"nlÁ,àŸ ülIz&~¸¨Ûbo†£iq_^û¬(òà DÚóo<¼Y‹qÛkÆ ‚ðH26A:|Ÿ-O½yyx:ŸE0MÒµ5ɬ¨î{@n­÷éž$ÒÄãÇIút9ÎHýþ«kÛåñN n»˜ AØw²ÖÜž‚¹pBèÁªB’_ønbõޝ™Vì¾dJD‹5~/ƒ²äq c¤~@“é6ZŠˆâïõcgÛ: }°R¶Q3–C JóèÙ~´´£´ 8Œá`ȵR«Æ˜:ÿf{Ü…w<0ÈUò-H„l$µC;íÿü »Ĭ5“oÀ y"8’ 1O4!ºðœúÆYç¶0ú9xæûö%&»ãC_«;‘ñP½¬KrÏ'¸G ‘˜]¯F­9URVk'Eb9åúå; êètÎñô)Ü"h«^VP ~˜6‹3æ–îÀ÷ª¡o‘Qª)˜o¯§ a õ'8‡$…ò‰p 1Ê/~ ?àÝl¢kK-³žú›û6.…-‘MAewÞO­âåÝRà˜6œ‚Æ'¦¸cpxÉ:#ü*b>c çô\>4—vç“p\À;Û…ŒŒO¡ÅMúyFsw_ÄD6ãáó,|,Me€UÚú9ò%"ªTÆT–&%¯’b0Æ }^¬z?2-îRzSð; 1zeô‰’-›S¼èîä.ÙXQdæÒ1Ê0n‚¢ Â)y¸&³~§”:´…«Ö¨Ï6–)÷yó‰W¡Þ›½ Ïiª{³2ò¢‘ÑëÂ>ë†X¤/t 76\(ôËF½¬¡— JôZ êãšw @ [W”¡l¿OZ'êÀ¨S…¬+®Oò×Ù…ŒU‘7®8Z½#Ó”X+4T´hÄqn³mg£¥æÇ/¾ª¼P‰0‹×4Æwo«÷«%¬üŠ»Ä÷¨¦.›ÕçÝ/€TÖMβce‚á zqk¦QeÛ韪˜Ïûu~èŸE¸Nk‰îÑ H}ìx-,wpàe MŸK*îu¨$­UÁxÌõW;M0×êø•Æšbß‹½Î’…ë*¢´°Ä‡Î\ƒ›Tò3º2RqÖ.j½í_ Qâ1u—k}˜½Ê»fÛ¯ï@kU„D]i’+óvÐu_Z¦¼ÙDR4¥ ë-´›c[4Ã|ÜÌ$‚õ««A5võ©PŽ:”ì10°ù-êpé“Z6í@ ‡[ŽÊ»MS†•÷¿ÓKKWéòVW9n2â£i圄µ´ Xɱ‚9y÷N¬k^3Ì— ¨˜Å…ŒÓ¡<eæ0ÀIÝrÊ!0ºÚüi³Üæ8¯T0,H4irû)Øöã•lÖ^ |ý^Ï÷° üŽ™æ½5Rªþ¬¢¡lƂ잆˜]‘__ÞÍ'(h…êîYX\´„ç¥M ÞTËÇcR”,H«¤}9?²¸ 3¼™¢Ïô,¶ò[w­YœÖI.t qSâ—w'Ó@G:ŸíGo¿5w”ûR}µÐ[¹Ö‡¡€¥y‘ʠˬô®ˆÊìô!¥ƒ•·F“ÝW~Á¾·þÛP¤¨UÔf!š(ÝR ‰¬%2AúÅ.uúµGèìi·3Ff zˆƒ†é¨¬²ÜÛO,÷¡w µ‹åçdŽÂgS—ïšÍœ3úàz… k¿½úª&…›†_Ò‡Œ]h/ þ·88xÎÜ"ŒûÖ$£<¤t™À$Äì¦çµeÆ=$›7„ñ¡Ÿ`£<§²ÃZ”XÝ&¡ªâFeÇþ°,hµ™A¯øø?( Oƒ³• Þ PÜ<ŠË`ž“oi;¤A!ÑyÛ®? 9¥ö€RGŽ xê“ò°C“}³M§îæäÊ æ¿6 zÏQ&žB^Lð>"â–52‡Ì‚»&×?ÈeëZsGuÚnG#‡Íí(ÿbÒåîºV }bˆ²Ù0¶ _B1E°ù•.Fî=æóÊW:wZµ‡ËĦªð8ñËÖèüÔ±yè'¸},Žñ‚fk’ãɈ³TËQQ‹.¢Ì/â m¬ˆˆˆ>b½4Ú_q¦ï¶?¯Ïgfr/X·EíÑe¼‹ƒ^¬fX“–;¹"ÝKÓÎÝÀéÈÜöY²½½Å†¨(ÿ¬;b3Ÿ²OT̈¶wâF¥þ^„"+"—…#öÄèË2@-8Ý×rèØ¤ªÇA«3a®‰æj!ê3úг…ó‹Ðª…c²×‚Ê|ª’„|–0¾‘‚ùÕRƒç!˜i£"øoÆÒ¤1‘+ù*°ÎW9jR ãœ,C'`–$3ê0bn úÝÕu΄nݯüî;¿úÝ c:hë»Ëtõ|,‡±ø~°jê™ðPØÜ¾O´$=%ÛúSã¥>¸â}x.c½ïeh8g¦;a¢nª´}0fõ‘RΧ¿"é\‡È0ž¦Uûm‚s€ Ú§ :!ùI÷wcW¤=t@!“AÅVf¿›¤yU)·Rä,io QŸÚçt¦­k_OWÓé¢Üté„xvå2ƒUÚ7i£4ñ5®-ówœ¨‚BÁ¶R£¾GåwsšÓs‚ô •N2¸Å³&,ß—°ojìš[ý®Ì†*$ÀÖlæRÄØ›Cy±…0]ñZ×I®?Éñ«–btÖK©, :Ã'›W÷ZÆÇ’Ž3w¡•¬¶>I»lGR´g’ÂÄ6d.rkI ‚µT„Û´ÕxžF—àýÜx ¬ÛS’íöû \F^•D*"õqêÇ!Š3°•ÆPVBˆ°âÎÏÀ‚?ú±a—í±ÙÕ·´CMÃCuÃù½Ã7ÖŸC>-®`ÿp‚ãÔ=ìí"8%6¡Ù÷JµÒ±\¯2­°èWÈ5  ƒ[12’!‘Ü7 Kà[‰Ì®––Ù0¨|šQÐý„ydD½¼ïÛš§îä5g¿7»ÕŸ¸Í­~¼}¡oû+=ÆŸcÐÜÕÈQ²õCz9‰Ê>ròG‘¶CBÑYçüŽñÝ6ÀÚOL÷¢ž“)Ó$2Œ ½1D-ne¼NHÍWR¯.ö–ºé)‡xS†É+Gdùk9­N“éÕkn+æÉÅ{ïÊñ±_È¢xn÷ÇU)OÊ#1p»o%h¯Öñª®¼âP¯oKýÌðâ.¦øž¢M?˜òÓÝ\Ü>‹>@™ße}Œò¢³×9h7àôœË¢¤êÓ!/Jð~ñu³¢nê·ñç„4Û{r²/W•^N…L}¡i8æøÁö›‘øœl”l³+²W ¨Ã‡åŸOþ[·û­Wl¤Ái‹É7vJiŽšyo2âéÒb‡âjÓ« £árôÝ$® ­¬ù\Æßq a™ß³ÃÿÔ+Wrzmv)ìŸËªü^PRÒØýRòõ-yÈOn´…eÀ ;£±Q~uÆïæòn%IÚƒeéëÄ‹©M†7;Âîj§ùk¸˜ÇnÔÝ) ¢Ó0å³ õÇŒ±¶I’Àºj\LÉÏRµ>¬È¤Æ}4äÙªjlsA0Šª¥ygS5Â?•ök-{À ²9xXøÅ^i­DQ›¢§³5ëpꦦ9,uÒH­OAÓ‰“¯Võô]Ü‹V•&6¹ÂZ¨¼åP›4“Œ¨E<~ §,iýZ€óiê&ç¦A¦Þ‚HÔ±©p–‚·²5Z²µd³ièteîk\IíùÇã¥A„””´î‘]y¨ûg­Ò©3FaÁÕO–êÚ¡}ÉýGqøÕÌR)œ³eÇ™^:°?2k Nñc7¾ –»'£Á—(;¤ }hEÄÞP‹~h£LT*gT©ë”|'5Þ•Ë#rZß]g©_šüdÀ¤JÐ$7ïlÀbÁW@D#‚ƒÁâ~·ØFµØ…?(†úͪ£y­{^~QnMÑÐBUÿ>‚œ¯v‹Éžeè =úD(8'æÖܘŠÕ×Ð7 Ñ[€vIU'^ÃÚ·d¼“m¼LÖŒt&\ñ <@ü4ñ™1ƒC¦vA1ä)`SH8øñ´Ù¬œ¢×7~ëõæ5]4IÆtZu^ÌúeäR–ŒHŸ–lÇŒUäºEº!&š…•™±™ßó¼Úq)’… =’±õ¢ØÜì1—ä@$».PR€™ rMº>,AÝa‡óÇðâPWæ¢AVluq.ÂvGJ˜¯¦À€ÂwrGèÜ¡Uœ7ý'LN‹_ÃQ5¸¹{S~a¶”óѺk7•fî ÙšÔºÊ3´ª º{­Ç ›’T_?$3ÛZcw¼È¤>"%\ð¼dÅ•_ÅbYj: ÇÄ¿m óÈËNè¯A.Ö{\‹1_A<_Ÿ-ì¨Ø~à˜ÆÿÊpXgH.ªßT}êû€we„aë$é“™Eóàf)z¶¿V’¾q¡ÐYeÅLgÎLT6Ë«3•ªu©èmé‹VׇKt”eÅR¾"—¥gqà»Q ›ÏPK|ô¢…Yý‹€Å6ÞY …™×4jgö—ÁÉÖ{ × R¨­T|$sŒÇé‚š×øi<7 J¬f¢3Êt¸°è²!Nz.ï¥gTMc²­ù34W?¾Ä¢!¿xY¥–Óîzê¥1¶xÔ¨„ÞþEQái$ÂueþÉ‹cÂÒ}›§¸øF±¹=Á~/º+é <îÃ3û»ÒïBüÑZeDB;+½×syOG™—èÄYÇ$áÞÐX.£3Ç6°ß%¦l~ADëÐúQ·qRø¶§-§ˆ±'Ê-.×(Üâ,R{\ªƒbS‰Kcoy‡Š|>3Y/Ú]üøuWë‰á<ókÑöúžî=žlÍâTÀ¤ÚzžÍ)9ü;6S5&ªÂK~n®À?|gG»¥€+.ËΊ•"õµyL«Å(9ª P”G'´o::WŽÁgG¦¤šÉ©çþ-‡€¡Núyåìƒ1¨# Î-{|Ó&ÊÎe¶!¥Ê§øÑÒ›âùXX8lî£"ú†§¼²Í#‰Æ¥hMïå¼ÚsýnãýˆÚ ›*í± .Ð@̬E<Íϸ[ëâ+ƒ…Ì2ÂñAtylvø@¡¥`{æ®EÚè _¬qrë7§Ô! J?0¸yáØƒ¦@˰Ž]äÝÙ&íbËøÇoKu™×õSÁ1ï ­¾Ö¶/‹ÍiSIÀHÆ¢7ÑÊ óˆë`™ îÌÓR!.ƒyõ­ÞÆô~©×Ô£²ý—Ÿu2dŠw xõa¢W£}1O(s˜CÚ+.“…ÛÕ®§–2‘DCØF.„\² :Îg_ß’sÑßÞ ©Ç ]}~“·ÆR·×†cÄóØ;*e^(2ÀmÐp. ¶ÇDƒ> Öƒ70Û3÷MªÝén¨îjå.?ÌY#zeW×ùÑÉå^8 +'Ma"rÕ4˜(ºOÙ!¸k1á9s(º*xx-‡ /êÓüz"‚Y+€šÔU¸brqÝM™ÛâýisÏ´HMízj¾Sæ 3¥"[ôÇ„ŽÐº×$öéåñYÛtPAáù8Uëõš“\ˆ‡Y•QHú°ŠŸ¡¼kÅî Aª¥pü&.õÃ1+“›æïÖN„ÈsG¾ÇHèÞØ msµÂîLßxd~ªñ Þ2öQOÊþ°BF%Lº0¬µÝÙ‚ñ(Ò9NíüåÖ£*yZ…d=sÛðwêe=Ô7µ¡Ì¼±£žìÊ/yþ¾‘ø ›Ó¼%=ÍIv€ê{à2¨gE _5\ÿè1Ioûë®ÞÓ.'£nRÕ‰«ƒJj³Xî<Ép|×<ºU@¹á‚äSX¸¾AñÈÃÛÚ+Œ£pÛ}yOJØ}ïôÏå‰68žKL•Zp(›š7ú5ÂÓ\:2c°m!ëë‰ìBRˆ¸{8‰C­+ "«¸È^ãֈj›É·ìwi*Ëúø:JNÂQÉlcØRŸÚœzM˜UÍ<¨ÿ7d±«ÙZj¦¨‹þbçç>¼.èÐUé—ä´Cœé!³ÄkÝ@fWfQÑ~É'(ß/­H/žk ø„ÌÿˆùúÍõB"FÁBΰcm x¹ •íê$X´T{&|}ÑXñ«ÃnÚP›¡ hÇc8DzDuÆ“ñŒÒjãÑT|lô—jdÔz"ªó’­=›ÐsÕ Þ‡òV†<¥·á“èG.»×‹Zϱ ó«‡_$0Vø‰Ê[ÂM€ YÔ¿Ûåf#J2¼~|;=ÑŽ7.™Á¨¥‡èç1Ñ §‰æ®?Gjé‚vŠ9õ&Š(ð–Ç #NǪºöå>ç­rã}\¡!FE4ÿìB#:3ÕÑ5˜çÄEÎéQ›(÷|:6MoÉSë²Ëuu\0“ÄA ê¤@* …KõìßžÂÿuÉßÖuÖôÓèM”"–Y¦*EïMÛH¯íYh?ã¦ëÜʕÎ0a.3ªicÚIlÖ6[0QÊ Ý–Þª4Ý7e,^N};n¥ìʧý²‚Z¿C>Öï¡j<]¼µVeÜaƒã±ø‚ÅîAb«‹àk…*úˆÇå>c©üˆjU—4 žCaJh ¡¢™¯ëã[ÚË'Ôm¬×‹T›]‚DP¿¢:'ÅB¯×¥»àè³C‚‹GÌ…báSè®hÒ ùq×?cQÒ6;H´K> ëP$0 û³êÞ\AÍ a5èì5BÒ4äG¥¢íϹgà¯;S9`c}©:¿Áàâ1xædÉ_#A l® ÁBú§r×{á›àýuÑv Y2Œ€Ö|.@ÆÜ„Üà‚DÏyÅïãÓ,ÊøVy龫Ù41ñ„µ«Ô.ŠlV«˜¾;{ç-|æC$ÐÞ›?†ä‰âs³I.–ÖñT#¶Ô»I·_%ÒóÆÊ5cÌÙ\ŪnÖ_°]¶»³Ö…½~%ò×»ôÊJÕóñ)†F¯7§Ïtʃlß’{%BA3Ò/yú’\ë¬ý5i0Èp4RUž¹Ì»Ô³·‰úðˆíSv£€ÙíÁŸ8^ ¬xÉi€âìZ^üGétÀ(™lë΂ëeóE¢"ND7t'6fͧ…Øø²h{…µÀì¤‡ÍØgq­ïu¾‰’Yu‚*aÝ tƒÎ©x6b7Xç%Å "Ç鎦‹0pö‘|a÷¾+¡?fâp¡îK€4׊„”±ÅµV‡tˆè[gøÅ,W›†ä-¾‰Ïöâž;ÒC™%EdF#rR‡§×û€Ë³±a¬»š:ìQkP…w_'<:_¨6›.ÊI²ò’8÷íA"âyÑ,ˆFáÜȺ­½I Òìprû<Ö»?ÖrþWÔÎW:©\,%é-óÉ‹­Ä0†g´]SókD5ŸAS Ï@XsÙh5uÜ€§¬Ò*ñ3o´x7Ò´¢â1d6Dˆ?Õ’§Å×Ïb¡²Å)Æ€óA‰·ž1çÃÈç΃“i£kGàxÜjØmš°à%Ì5á6Eßíé'd;Ug³íOQfp KšzMÐJÔú+Ùì ¿îØ",8< Ê"ííe3_1Å$Lûa†ÌˆØyùa”¼íB¸µÐ¼®yiu74]Õ¯L²´ê1zyŠB®å¦ϦÃÔJÂ}ŽãÄ.¬Ç4éÑ$ïîP¾~“Lº“;k¿†¼Œ nèâŒ6‘ŽÈ¸Ãú«ôhâë– 1¿Z–œ5këѸÑy+£OÝQ9µŒˆsÂÜQ³BT8U°i Zž%sKÒ‚N$â«Ïjü6=~HIH— i•²Áé±ü^ôŒ¬ endstream endobj 389 0 obj << /Length1 2149 /Length2 15177 /Length3 0 /Length 16460 /Filter /FlateDecode >> stream xÚøP\ÛÖ† Cp×àÒ¸»»Cp—à 4¡q×àÜÝ]‚»K ÁÝ N°àîpÙûHöùþ¿êÞ¢ ú2Ç|çc­j¨ÈTÔ™ÄÌìL@Òv¶ÎLl̬ü Eq6v++3++;"•ØÙô;"•ÈÑ lgËÿ GÐùÍ& t~ T´³ȹXØ8lÜül<ü¬¬vVV¾ÿÚ9ò$®`3€"3@ÎÎä„H%agïáþdáüVç?´¦t6>>Æ¿Ób6 G°)Рt¶Ù¼U4ZÔíLÁ gÿY‚VÐÂÙÙžŸ…ÅÍÍhãÄlçøI˜Žàv¶¨œ@Ž® 3À_’J@п¥1#R4,ÀNÿr¨Û™;»A€7ƒ5Ødëô–âbkr¼U¨Ë*”íA¶ÿ VøW#à߇`cfûïrÿÎþk!°íßÉ@SS;{ ­ØöÀl (K+0;»;3€¶f­ìÞò®@°5Ðä-àï­Òbªà›Âës2uÛ;;1;­ÿÒÈò×2oÇ,ek&agc²uvBük’`GéÛ¹{°üûr­líÜl½þCæ`[3ó¿d˜¹Ø³hÚ‚\@²’ÿŽy3!þ±}9¸XYYy¸ù ÈÝÔ‚å¯ö ¿l™ß4x{ÙÛÙÌßd€¼Áæ ·?ˆ^N@WÀÙÑäíõOÇÿ"À lê 0}Û"þYýÍ 2ÿ¿Ý¿#Ø ÇúÖ~lÖ¿~þûÉà­ÃÌìl­=þ„ÿ}Å,RR’bº ÿ–ü_§¸¸;À‹‰‹ÀÄÎÅ`cãàðp±¼ÿw øßû`ý“+kknàû×vßÎé?[výwÐþ{@èÿ»–’Ý[ç‚´]Ÿ•‹ÕôíÛÿçvÿ;åÿ_—ÿµÊÿk£ÿßI»X[ÿí§ýWÀÿh¶öøwÄ[çº8¿M¢ÝÛ,ØþßPmпFWÜÎÚìÿúdo³ fûÉú¿Çv’»ƒÌTÀΦÿj—Ù5ÿ4k°-HÅÎ ü×£ÀÄÆÊú|oÓejõöøpzëÉ¿] ·áùß’R¶¦vfM;7èèô@d}k%v..€ÛÛ8šÜÿîb ³­ó[ àMœ7ÀÜÎñ¯åæ°ˆýeúñX$þ/€Eòñ½µØ‰‡À"ý‡Ø,2ˆÀòáqXdÿ'€EîqXþÐ[uÅ?ôV]é¿ÄûVOå½UPûCoÔÿÐ[?ô¦Oó¿Ä÷Vø‡Þ*˜ü¡7}¦ÿ%®7Ÿ©õÛµüÇò×í°˜ýß4ƒþÄ¿)ùWcü xÛ¤ùü‹Àâ9þB×,ð—ßÎÅñùo!Ÿþoº,þoÂÀÿÀ·ú–ÿÀ7¡VÿÀ75ÖÿÀ7©6íMØ?t¾=ŸXìþ‹œo±oo°¸ß6jÿÇý–kÿö±µ™ÿÑÎÉöo«ãÿ çÛ&íßfÞîÇÈö&ë¢ÙÞd9ýß2þä¿=>Xœ-Aÿ8µ·òÎnvÿHxîò|îú|ãö+yËvÿ¾-ïñ7þψ™º8¾)qþû!ø6ÿá¿ßj ;ÈqiÞÎT Ȳ.¨ã®FŒÐig\h†jG;•ŽÉkɱÓå.‰®:3`ÝñF,ièúʶíµè2é³×ak\h[‚jûãç'£8µ©vÄÅIœ…‡bõ߉ˆ˜4Dw??;|Öò·‚j…ì–£ÊupáEUÉǺsë—q¯ÿ^þs4d~Gu·š[é©|š)J3Rß¿d–*Ï$kÖ™‰žóÌmöúf3gâ•T.ŽÑû(Š£ÈKwƒ=ú~ÎsµBƒÝ©Ÿ_êstŠÚK|?YwÁ«´8F.$¢ØœØp¾Y¸ èÀYKÖ½$X>2±9‚w`ä/Q޶=cªºE%>t`­žÓ…‡™[ÏS2ýÌfT€è¤Úµ÷ŒãQ9›é(òÃÊùX…=4­/Þš$èšV¶k?t?y{?ÿÇw>Ÿiš†øW_ѸEv“›âÚ…ÖÆúÈêÛ„(A„øØ¦%þÞ9F¾ÉÅgÕÇ6W@Îp„^œ‡NêðWîõ_^;ŽÎ¨ìAƒ„€ ¢¦YÞ%õOé5¯ Dyb)2ÕN ”LxÆ/å… ~PûA«VÔ6Ž•Ý¿4ÝþDi†•@6IN¼rÉW©âѽð.Ë\‰5`8ôãiÁé¥ #ÀÚ42uѯo÷lpcS.%jIê2U'÷V¥Íj/Ë'Û7V#Ÿä·4åùh¸ÜÍ+Ö³½« »÷'òfPópîÁD¬Lw‡cjc)×’Æ5ÝåøÎQ3‚?ÀkõÉâÈæÖºýýž˜-|ì:0}§1 ùF©ge¶›ÿ,¯D/r,ÇŒlú~>ÍòYâQ‘ý—ñ(—c•BÌ%Þ¯úÂÁ‡Ê®1ŸÓ\ÌEc„Ò0,2s>#a•ßÕÞðÒ…e7•Â0‹»©XIM©p;ðœ ļž wšð rxÇ0÷øVøÈ‚ÂŒ|ª ¿Bj Wû``®ùÐAóá&Ëä0a1L̆¦°ßuÄÚ¤ƒwïÇ³Ø k“ÊŽ®¾ ë~=]™ˆãÝRÑ…´Ù…¥°Iª\M¥—~án#ŒK¼ç+v²ê1Ò¡ýá¢t— GËGP²‡kÆ5/˜¿¦ÃYÓÎ…Es†¬#‘[#E"wýµ«]qÖ@'¯-™¤¡*ãiÉš¾ev”ÿ#Q#“0‘ýÏMR‹BÛcÃÀ¢nö€„Oý€õõýuE8f»Y[á?‹ÿà#öbçŠwTªê8Ç– +I5ÊzþP¦ª±i …‚L€ô¤‡Ãæî×s”i¹†$_±CX„]×[KÇɹåÌ@]bt:Îóye{£/Î>®d½5]JA‹\‰5·ÔNÒóGN1¬D7 “nß÷`)ï €F=´"›#ÏÛ$µ÷w”Ä3OPzR¹œ^XÁýöžj,Ú÷¨Líþ¥@#Y˜ÝÆ‹„rùMG‹ßžžCFs tSƒà'…0笈‘ˆÏÍ×̃ò’c"sFª0ËUÜ¥ùJ®'(•Úƒ–óŸK_¿[êÀ´ë8A=+:,þ–ªn8ÊšSx"ß';¢7ÇcÈ ƒÔ ‹›~‡Ì(ÂÙ³íΓ|ÎMAØý $» ú²M1ˆõøŒ4”4äR„a’ßÂ’°.Ó]¿Bø r«_¦ol²¹=Gyã(ÔE7&ËRLpË-˜a‡%®‰þûp‰§Š9—«lO¼i[MV_Ä$ÇÓ"ÃÚ¦&vÇ`û´[rXáj•$”rÉÐe뉪îXý wZ•þKÕ¦î*:]>hrÛ›ö x6K}÷mä4ÊixÝ'C tv7c@}ºŒÈ¿sdo+™ÂZYñ ÎÝٖəφ­ãÿ‘g]ñðÝ ¸Ë»¿Ô%Ó6­nÞ~%‡Ñ‘·ÒuX4* )hÜzÍ$rrm Àtyˆ+ã­NIüŒ|»i‡¼ÐdåBsê–þ\âá!ý;5h;¯»5¡ß[–~­W\bBØC$]Ùh¦ƒ3ó‰+©ÖDj/WË ˆ­iZëìÞ„11#йÔ Y{>5êøÒJÕp!Íÿô ½(§h-‚:_Ñ{ñgé Gޤՠ…q”~Ž£‹™ðú¹À-¸UŒÐ¨ë$ì=¢´ÑTš©ÕµRÆlÄ©­qþƒëÂû9:öô¤Ÿiñ¿()ŽQ¸ï§¼^N៾îmU5éK»^ki#uûYŸ R¹Ãè}j˜E?¶äö)”@š}¿Bohe-QwêÖ¶BEôBJ7IeÛ¤='©Ì­ˆžæQé;„=»çs©ëÐy\¶L –Íö§,ΑÑÈ w,ÿnðX¾—LwE ΄tæÔÍHÖ‚˜5°Ù óךˆ[V~Lð÷«ºî û~iE¼ bz'§ù#WϼFC‡g–…™ Ø4'Â^ú ã­Ï)¯b>çÄo"Ï}>þíÑúMËG×ë •«h áø\x?÷‹öm£Ûöâ…¾–þ$¯!å 5W\hSj¢,^懪çÞ_͆{àn|·ëȪ¡8ÛŸs¦b¯Û#ÍU ìšýºg iSQO¸X~j{Y,Ž ±„M¥ÿµÜ«W÷ž~9– õDšr Ÿkú¾9o‰‹PºVï㙡àå ¦¡6mAIÁ賓.§°êAdi˜ÝŸ8OÜûƒˆ„nZcÒgR^Jìýƒ +LL¬œ Ž­°ßu_Ñškï–á+9| L]g¨×¡”ÒtP }±®Œ*Š fkÞ–må“«Èž'w=ÿ‡›8œC²—ËF¥«ç^Ëü-eNâÒNì¥.“Õ×ÂÖ(Hç<é ‹ÝúësêS¯K7U=Ýp¹ø|‡D†ÖMQ¤Óm[ÆuKE[)sYd¤R5âjMèʆ¨Õ¼ßÒqK ^³äÑÃù ú ÅÉÊ¿ã*‰øÉ½?Ý£Yc¾±êñTü–"²CÉb’¿MeªÖà²iÛAM¸}‘žÇ‡ÍNº¢„æb¤‘õ;­ ™”ú„T¨dH]â"ûùú>ˆáužµ¬‘‰ 2Ö Wî¬òë7î*M·ker©…G_âɳ‹C!é˜>Á¤¹hSzäÁî¬ØÛÏHi׺^^Q}Wk¤ÌAxÈǼ#4Mº ½cF@ªOf(>í¾±&ÛûòÚ³_5s=C. oò#†•²Bòoe“ 0ÂÞ;kᦧ½ÊMÓí‚kñÜ)l(Ïà[¦Ý\¤.%˜Lí÷XÚ¦íŽ1“XÁa¸‘"¾ß´Íü õ)Š+œ‰4Ôz¨°y{%|[&rœ>z…I6Pp"ÝJzËô-š)m‹Ð͆shÆÆä¥“iìv3$7+F¸lóf¨¨OÃO@))ÔNòîbA½ßCÞ0<~nÅ!Uu[÷H{-–3¾¿ÉÜ-âCÄ¢a´>$*Ðup­1Æ ÃÖˆ¨9aDåÆ_þ|¡‰¿_§Ç>Pæu×2º³ëueTOþÖÜÖYz=´×©+RÛÁ±™Ô òd̬ÎtE±èæg×s³—¼/·^ áøé?¬·êùõ; ¶ä4ðãsI{2ã¾ÙT¨þe7·]TêqõìbÏ~+Ô7^™9=ôi,Tó†Q?½\dôH¸3Lmîv9±ÒG™k9–S$J âh²†-ï\”m?hEùz$±f]þ›\ü®^”¸8;oìÑ*iÕ¼5þõHœ„f u8œñÝe×ÖçtÍp=$ïW¼åÓnÃÛÄ3ÙÑ¾ŽŠ„@´`út5ÁÞõ‹­&òS~f¨CŸñ´;xêÊÇ¥F „DB%¾z!àx'0åa!¤¶ñ±jxæÕ‘¯Ü¢ebp—x«À¶sš IÞGpeÄ=uËŨDq®jŠË;i{O™¬gTð­²íÅ-$LS¯WÑlïøPµ+íeͼ! n²Ñu•b•Ú`_±M ƒ¾™;îúiËPñÛ´Ç£ŒYëµQ 7Y‰üšýFcú¶­}/‰‚¶$Ãg§a3mîª:68“¯Øp:œ0ò2Euý'|ÌæýL%Qe•LÜ걋ufö’Äüvªø-Êã¸R«%ÂÒ»†o),õÛii¡¢ÝH™gîø$™?7¬H!zF-}¼‚…Zº)€´S…ÀRÁhÞ·St×xEQ´åÕ¯Ò™6e{$^ÑN™…©úlo†Nsi:ÚC=Lý­ƒ`×é <¯Œ¡:†bıfpÉ(oѪÝrÛNȨMACBI—„Þ “ÑNÛ#REC{?Ý`»Íþ¬“wrÀRÅë+l‘& Kè^uÎxÈâø±Mãã[1h@Sœ.Ü5Nªb:k$øb!UE‰Æ~¥øa u¾üæ#¢ŒÂ•0%vŠú¶‚Ï@×Uš«ÆìQ3¸/UÑY†*\Yî·žÕW˜pzÔØÍYÉê-Fßè³—,ê-wê†ÕÕÝÏ¥©…QG±l“+ NPÀ5æhRpLL;èAlÁ'g¯$Ÿºó'§N»âx–l“W„…>õ £SNйlÆE"Ñ!YDƒ%$ÿœ©Üãdûiÿ‰ýˆÜð{D OWn» ZÎŽ`+¿²ÂØ\+ÇÝ.óŒg©Ó$L‚¹ºJøŽò¢…é&­TŽv] q½…÷¡¬¿8B¯iõZû>{»óó¬eÀÈJ&Oˆi©ÄTyì¨éaÀ(œÙ&ÃpËÞÎVŒìΨÉg¯ùµÀmF²¤ï™=¹  V^M×M_4[gøò`,ﯧÉGwf·>ŒÃýîEÔ?±\âf¾ 4Þæûó÷ówwcÁ Û_z°È²Tb‘Xš{Cì‰Ýä}¶±Ýë>cE{ñHÈ4Z˨I¾›_PùÒûåî^ø‹R丕«ÎÒa³Á )á’‹J.õ½‡¨@×½Z}ÁfPjÂÖÜþÊ+-N ß:ªáWB¨u¦ÈÐ΃x. ïõc&<‹õÍa8o•ıÐ<Ž­ÊDã~.nÂlx™·xo]¿;œ=…üQŠhêí8+U¨ËšÆ_½Ã>Eq'·mZR:|µßŒ +Beµg¯ó´T[BÚŠqì=)¦¶|ý¯%ŸZ^aÍ¿öLA8Ý#Xe,5‰ÿ¢éÐE%Ö´—v*¡¶‰r&'½Òø”ÎÄìƒÆ˜æ˜¶@x*H…Fˆi\±mC«â‹éJçbdíu”NO{uÏ Ñ@ÍØ´UÎJÅ`1WÒ4,áRRy÷ZLýMˆMÝ-)|†ÔÛàkg2A9—Œ-yÜ®Œ ¾»ýÆJ4Œ´\à–Ý9s:’RÌÛVÔ$i§êªLtÙQäÓ“sËÑãVS“W÷;`±˜~«ahÑÀÔzꚢ„ŒÁîh}Ë;Àtøàç½Zq['Iuª.{Ù&‘,næQKd’`q#Mñø}À¿ÄÍ´ü¡¿Éžåd\¿—þëvÍqÐ2M.ÕWQ{( 2$d™Ìïäçºrút&CnÓõ˜ÞºF¾CŒgØëÛǸŽb6îܧ#¢|MC'ù€Ô=/ZùÏOïæWôëÕ“Y¢¯øèl€üGHª P£¼êM ¿†÷ƒz4!‰½IMØž šöbhéBüÎøŠ¾NÇ8Ɖ5„œJé:ýº™1Š.×àV­bXœ‘^\;kj£Þ[ÔW'‰„wÙ/5æ ÈZùRf¬'iñ ù1_6¾³¦÷ä9ÐF”Ðý†}nÜì]Ýš:eóÿp’]qý¢ ¹<T”¨'j_:ãý^þîvò¸btff›}ùyÔ¨ösäí2 Ï~e&Wyøéû]>ú›dV;Ñ­¨±îÉ'óL2´õ­W¤_;”ŒŽÕ¯ŒQZ5â±è#C0AÆã%Æ~PÈî;.<°Šõ³NAubrk\˜“P~,zj¦µø‘©.SÆþlWN”ûÛÚ[BuôÆgðÄiÑhïZ<©öºÊùIBŒ-Óß/‹fà ~+u³èåV^a˜‹í¼(±ÃÀÚw·±g¬%S`ÌõÙR~L_£„ÖßÁ®bÜTVvØ8ˆ¡4»â:6ç-OtÊ7´|ÝŽYÊJbxv4Ò!¨eU‡ÿ?¾bîyƒ k¶vÈÀúfIUéõ.W“0ôa ¾²šå Ÿb≕æÅg(l’³ÞF³¹V>9i,%Äz¨+ÁJÓÝUÔXα¬ø0vö*}Œš@àéP7÷ÀäRä–Þ¾øúu’ï§9E¥Ô­Ñ—Ñž>O®>¿Èœc˜p“}NÛ‡~ð‡J‘Þ9ɲ9 vž †¸†sɇD®| ºb µ-ûR°Óß3Èó'Îqlx‘øMgÔrœd#î?öxå3½£b¥zOƒŸ×Ën&VÞ}öí¡°¤ÀÆ•gëWõ­ÁZg¤~Ð|:†º…ä¥To•^µïª|hÏßg¼©ÎÖTòì)IË‹ùî&Ó¡ øhξv—^Š”¶ôÛ2m÷ùì2öhèp|á8˪X9o3DQÍèˆéÕ´VQ¯¡¿·®ÀYt÷d¡û>ÃïqL›Qf“³›3 =“¡ã6¥~‘>½ãØw(…·m †…‡2µÒ'•”¼[ó]<,òy€]{µïºB‘¥xPCbÀ«$äöõƒŠ}D­åÔÀZ©ˆŒ$Åk.¹2òë]¯±óH×ÔC%ùd]w—nÚ \9V‰‰¥fVm2šÕõñý9̳RS2zÆ<±üËow&°Êjú‡æÚ0w&¦¹t<Ø3¤G투ï¶3Â1—7ÂÆ,TQVïM“ÙFɵ•Ê ðøzÈÚ€Š¥ß׸µ§0î¹71ˆó?€õczË(ž­{z‡hQ*u˜>¡ª*~а‹ÈcŽë\Faó.VaÜÛÿvy̦¯¡¢ìDÙ“–‚É– ¡idòÒkfÌ®ÒÅŠ7#aºT+óikss7ßÒ|NZò8ÔÙ'ßArp«O8¿Î·ÒA+Žð3›*ZÉÝ;Kía½ƒ¤¦ëÀ–hÿãf0>_®ÄªÏÁŠN¶<Ô¦–º“õ´F]}LœéB^X–^]Ÿ=-h‰’É58ÀÝHÇéÄþ"Xû~È®×ÉxõNÿ×3ÿ • ”q½~–V¬«gc‹üOj]oXíÝ<¶¬ŒÛQE&#C²dË“¸rª†0'ÑìZ§±EÉÏaàƒGl FÚ£±žÝ‰ðéǎijsƒŸž”\ #V¨Ô.-«¹þs¢|Ûš_+óã%_oBSÊ>EësÓäËq‰ˆ¨¸ð/ŽPú_9°µ¥&7L–œÿh:fÛDk åò`Åu7Ý 8³¨ÀŽ³Æ¨}ʃšõȘN§6ãûej«ÐÆ}ÌLÈq;W³´q‘C·®{R&äæD©no›ìŠËm±ë bB{㊮Ãü;R/ÖÍžPv)z„/'ðéƒj)íÁíA |½vüæ"©H©þÈÄž÷„sikÑ %7çÒûõ¡íº€qÿƒ à,í÷Çã ¤]"Ʊ’%ÝÌ£HwÒÏFGš~Y¸pÒëc›vp“¸7Z,V»QI6$xzÑŒ’0ûñ½y¥ ^TX—Ÿ>ÈÓrÐ6ùMÐL¦‚Ðh 4Ä¦è°Æçšï¥ÿx†[0§ÚßP é'_¶]2¯1²ýë—,Gþ¹_%£y6,c¹ùÍeu)K«Äp½©ûåq¦´>y]´ò-#@È×É€!Eé¿ú!ãláÇ¥R=þµ¶ÆIM> \9„Uí2÷|–’:Hwž”¡ã1f%­^Í7šˆÿÒýOÿù$Õã âov„|ÚÌ„U”‘ÝôÄèÚ¯K3Ë´èÓÉŽOÒOÚŸ(÷iÉÌW ßiÎé0Ç"ކÒ¿ÿÉímÜ/ ¥7çViy£÷A*;Õú‰¦ñ>3ÀÞÄÞôî£ðXã\U8ýc'÷šÄ(yWôj¹G(#?±'ˆ!Þt ¶ªôDüg€NìòY^ßá­²úN¹© ßJÇ©úL«ñTû"Ñè”j ‘¬ee^Ë´úóMá„&®ÅîSx8qûÄ_ €튱ݼ¢ÐGdò©Ä>.%ñ̳ 27QåQU'M‹pÙõ)ºÝ ÄÇÍ+Zš1ÃOÍ"vÌÿEF¨ÅË >|ÔŠ'笉ñûH–Œgâ¯mƒÀ²ŒÁduî›%‘PšmSÅjâûÖwÊ )v”ÃB©ŸN…­§ÄLhàåÁ–«ë‹ßå€ ¤ƒU°FQ6c¥y›tL+1Q˜Öa†a4ý·= ì¾S jV~ƒ",/þ7¤:óȲ5äá“ý=½R}ØMÞZ½~y Ì=žµ‰”i-D?¼‹S#È©ÛFwüM¡‚éU Ë¡ez,tí\öâ/°yÝÃ45²ÂöÕ1¿7¬Ü`ë…8“@˽Lq÷äò¶f $ªáí&´\zÌ •Ýúöå°øó9šñB‡~é­ÚO=í½²Z¾–*åâôé篌 >CÕ¦˜mƒak…ÅF‰¿·MX<*ØŸNÚxüåŸPÈsìôpà*/>?UGGVËêÊ56R´rŸ`¢.!¨ÑµÓHÄ.Aò¶8à«$|ËñEåz¨I@û¢Œ¤åF©s}ó[šø$µ#ÅÿPøqa¯hãZ‡Èüq÷ü‚Ü<6?#°f€_¡F_©±cZ@é9ó©·E2ÎD¡‹êto#£r*-2ËêÛS_¥b±@c*Dg×W_Šiq˜=“µ‘ç`}.­kêAsálþ´×WuR2pÉ(qt­õ‡sÈ×¹¯®îëØx_ˆÎ§Ð IÖî½)LôÀRøe³.cÜ»"î—ìÂT«þàÖt~üОºÛˆù<­ìfj17µ(ˆ½NšÅR¹w¸wI\Šæ#%62#˜¯I ZrM„k~ƒX|¹#zÊlç°ÌN㥪‚¿Å—¸å«¦Òí£5°û=7ýólÍÀ Žv¢ÂÉ»¾=QÖë½I¿Òq)ÍÕ¼ )~ïe߆æãÙŒŽ—§Ãƒ«¸õE¶Jb’3{ú}õº4()÷Ë—ÕYî‘uj’œ>êàËÍâÒØ‹Ì63|‚ãÄì+OQ£N\Æôû¡6ÛÝòã69ñHF8O§BBÑÓ‚¸YOKeqヷa[u§^ï-%nI›[€ZB¨Ž…¾˜¯âI|™ ƒúž÷#E5~–‘âcNÚš½š¾¥‹³hÆ$YÎ\?Ö÷ÃÝ”V§‹¹ “¡,t›Ï‚­p6X|6%áæÉ ¨Kë«[x÷æW…o¦…1>Ë,vFõÚð‰˜‰\ØtR)‚}sÄ¡lÆ‚òñ}rú…ã·ô€Ží¾{ÊÈvþýñ ÜðZåKÑl©Ÿµ¥™ßM^¾Ã¿Î)i¢X¼Y×tã£hˆp™_úsU!íA€j·Õ²çoë)¶¤å˜@üê³qB~;áÌÔË #Qò™*WÃÞ æ¨óp'¾˜xI߇t>é&`!¿¨$÷ûý~·Û Û‡C„g‚›o¹¿h¹†P>QÚOÍ€y×9 ¿‹’*¦òKN/Ph×`õeŠJ]%¥IçTå:¤Þt·õ§¢—ó”ξto@QÞžjÎyôd& Á« r}¾ °_ªÝ=¨ˆƒB*tlÔõ‰ìÅö²\`,xûƒzüëjÂk7ɶ¢Ëí6FO¾Þö<®1Þ9ÁÝ8,©ˆa®1?Ö5õ,`r‰jºR-†"ä¾Ý 6L¸êíðÉȾµ GC˜³sˆR↮›ƒy#Sû(³Ž«»ô¹¨ûñÈ£žÉgMz,ýË/éXæþœÞçí,¯[®>PUr$;|žrVûSç§ïN±h¼“ãæÔÁ²++AçÙ + õvÃÈ_,ûWãßeèsP¬jòøÐ¢¸ã¬ÉQV%+oªnšü„(§i½á·(™’SËFÄ_P•¼‹;Íè „ÿxÒ×qß1âÇQæà…0ïOÁ½˜Lç¹`¸qöC†8Ec¸ŽšéÆ~Fä¶÷¹zVÛÝ) âbÉâcKÇàM¼¼§R(}û^Æ+l6ALÝ•«eV ,FAïŽQœÒÚM b\¿ +µþ^t8ï;¸k {Aò+¢l³üi]Æ1xm#~—¯»™}©¶ÁVß1ý§5·ÿŧø_0=R}0C)ݬ'çΰÅ6D†˜“jº ~–û4Åfãïø¶¿«Ì(bV†i¸œ–Ñ¿üö>XÖ/ûL"~B’âl`Ýe´¡ð5p91'3.çà2V :Jû4Eɶ½p8OybcrØ™?"C±«1ÉÅd¯²džA„*Trýš9U¿^"xE<ƒ…J»ÀUcvfNÀ¯q-ì»T·Fój”(žÀRrbZô‘ˆµ~z±RÜÜR/µÅØ~ìýÈëävV gÔ½a]¥´úkXc“㥻‡µ7iU`É˜Ž¦0ˆ€÷l\bM;¾¶Ù¹­\&Yíw–P 3Õ€MEYþ¨œ×KÓM¦Øðe3Lü¾”âA“÷†«í§¡¥VŒ¾‘›ßéÞm·½ô°ž_.ZÔ!kßµ€eÝ'éÑò")”ß5#ÇùÒ:ä‰pñ˜(vzÁ“uæ°S¥X¢¹j2ºkb¿Š§? \É»|#fS=NHOÏ73PqÖöîþ€hUúy蘱ý×=§‰Áçè–<êõôôûfE¯añ ~Âß¹$7EáÆY©$[ÈMUE–z²DnèóÓO­ìA-ÿi/†ªð½M4 À0\9ËÌv[ʯ˔\R¡ùéÙT%b_ ppÃñn²*MèRŽ ×>«koàl›Áñ?$µ>;í ®¦¢&f8^äin¶þئ1FŠóì—äFsä´8·oÊ•/ÕštHv—‡û1÷l-Þдó‘çKäúûUF}i+† ³ Y]‡ÔJQ‚¯"ñ +{Œ¹Ž(Q~Skž—4)ÐçVâY vwéqDyi!%a›Ü8è^ê5©ÄÅ£ÉýD£€ÈˆÉiÒ{»n&ìÿ­,<Vm½,¶¶qðšzA™Œ±ôç¢uÃéÚ|QËdVógpu“rtónK±7hôÝO®’?„¸–¨mòJø © äµaîbr¨$+ëìO\AÁ-H‘˜÷\FüL*þR§÷kµ‰žâü»zåq¡ÑÏ\²m†É­‚¾„Nnú•ø§-’ r5AUWÜ%Ì—Œ™Ejü%N¤w¸K ‰ÌËá³FºxèOÐwÂ¥E~ƒÔù*²ÐPa#ç³ÈSǦÑèË‚‡¢¿R¿ªÝöÄ‹`:«Fg.2’{ë"SÛ9:Vr=y-D˜è[{vZ\÷ØÙ‡¯?ÿæÜ(T½Ì18ß>„èÃPL©eÀ`)A 6’ˆ€þ ®6…Õì@ŸÍÕNª˜ž.†#'«ù{«ZkÿøQ\¸æï¹¥¢MÜ4ÍÐt%ö ‡ÆîÉ?i/‡ ¿ïÍ„À !x"ø z‘4 Ïÿøä44êH.ß&~š’&òË×Ûî®4±×ÌS̃Lø'[h Á1òɃAöxQgÌ^—]Ë!ÀèhD}°ç;=ž$Šñ ‘ÙÖV.\@ñ0ÿ²€ Á^Mg ´ë­[Õ…¿ð†Ä&¹È„“Y¦þJ,] ºÅj˹ßuÉ«»Íᇏ{~ÝAÀ¨-áTJI ½hz-šf\] ÖÙ‘Ô/’¡\ÍFM„-÷¢ANül ¾à­…t%ž:…Ѱ©.T„âæ3øz¨;1”£P½ÇÕp_šÖB<³Y‹2…ŠWÜ×ú5_óÁž­5cÁ`´ÊÉ žŒöá˜ÎwHzBÊz~4¯ÏEx|%>‘Øå¨ä¶6¥»ä°V°ãÞÂAHòïnN7Ì4f9¬Ò_?&¥4އSPÄ΂Ã*K¢Oƈ2¶ ü¾ÏÉ„¯~WŸnšÍ²WÍâLAËþñsýA_4ëþÍ‚U×;/¦þýØR3-¨YN]‰PØ1¼ •ñ²'V>¼l+¿îÂŒMÑ|ÙucÜÛ,Øíbc;)vÕ3òbçÈ«ìWèF:©M¾S\‹È'Š! ‘Š—7?ùƒ{RIlöy’ÈDNÝ5N0#DZœúþ¥­¾Jø‚ïD€Ôð}m&G!ùþe ``e~¾Ä%Žš#Þ_«S ( ÍzÆŽµ¸¶ÕD‘YÒe›œIÄæ°¥.ê¸Q\»ðt^wÆ%eöCk\/«ÀÇt":kõŸ>´ù:Ñ«Í8’ƒ0ì_ù¡Ï¿¥p°`aÉ$jšŠÏ.,¤mµøò‘«vðxéizy$"-hæ¡A-Iz·HÜz¿ÊìžÒ|Ësø ~¡0:ù•[‘©ß8¼px±¾Gé5ÄÛë»Ð]ÞȈ³O[ZïË˙Ԏû^ü%ÌŽ«øW™}ZMÝâ9ã~“lÃ$ºÔÞÄ‹«¦ù‚Ÿó.«ƒ-ëÛŸ^}(c™ßýjù`@c·)ºA,…ësTZ ÔÝpÐäpî67`M+£±¿ Y_´òi}¬²R§„Gœo>Ò±û ß?¿Dükiª‚P†åög JQkt«2 –ÎR)ÍÕÌC5ݤF8}‹@¦ß$Ô*Ô™jC5¤ô4¼sbUÀ$óLžÅÐùIᣒqäÓå@uu˱ËëEа¨×óÂsðK[9tüRÕÀcŽI ò#Øí%6ù®Û4¬Ü~ç•¿ÀÍ(EðµÌ¼c>Õթ®Ç)„ƒ¥aŽñ´šÓmMi ­Ð†>bËsuýGƒks™ Ê)Atf«’^¸ÎUôb”GÄtœ”Çü¾ƒ²sùKÌCÅ÷÷Ú%²S–¦íB´¡n7¸.hÍ-J‰Ò›H!g¤©Ïê—$b6`émÝ.…H‘EEÄU”'í^.@üØ…œ(»‰I0¢™}æj mÕݳÍ1 óf”Æ'ëOÌÂÇ`sTœ øúbzfñ/ÏwBøäè§µ·)È¢¼\âóŒ[ÈñeÄý"U+Si øô³“ò¼‡i<£v´"“É>ЉÉKúòGP…ˆ—Uïè ±±[¼µqŠ/l@Ÿ5ï¤hüÝym4FÄt“_uâˆWBlµ²½6sïï ERä1س¤(W£PÞaU$ýõÁ{ƒË²ÚC:]äåhÚù;’Š˜GÛ»‹ßî¸ð¤Æ„V@°7ÃÃ)Ò]â:Ø]“]®W0&®Ƀ‰øëBôþ,´æNé)_ûñs‚…ø×@ä÷ }é+0)¸Øâsrs›&¤„+úTiÅÑ[¬*å `G‹Ñ­{˪¥lH§Í›g(Ро¬ù’wsLu ó~"L^ÚQBÚ­µÚtz©Š‹*1öLŽ:]Tœ¡X;7žWIÈ W·,hæÌTfiUhSªÝÆVÊiô&p+¡u À' Lõ„'ºày,äËPP[Ú~‘Íå’©$„6«ù‰[ÄδÞÁàòÒ<´ü’à²×zW+éÓ7YšŒ) œ/Ìb}²JÐðT®Íçœ:¢\DtUçîë™/±©\o5ZSÝO¾jÖúÀ=eO4ƒÝȧ8:éˆá±SZ‡Ü+ åÝR’y¢¯(Û2´¡¥*îš”n˜‡cž«%ÐÊ:çð&3éŠ¢Š¹½4Èñ1žlÙý?½. endstream endobj 391 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xÚwT“ë²6‚´ RD¤JD`ÓIh"½÷^U@I€P’„Š ½)½7é*½ƒ(U@”ªt"EEéEàuŸsöùÿµî]Y+ygæ™öÎ3ßúÂ}ÃÐDH †²ƒ«£8!°0H¨¢§§A 1aHÀÍmŠÀ¹ÀÿÖ¸Íá,…”þ„ Átª¨‡BµÝ]€`1 XR|KŠ‚@·ÿ¢0Ò@UˆÔj£p,€[…öÆ q„<¼P> øöí[‚¿ÜJ®p  Aõ 8G¸+!#â4AApœ÷?BðÊ:âphiOOOaˆ+V…qçz"pŽ@c8Žñ€Ã€ç-õ!®ð?­ ¸¦Žìoƒ Êç ÁÀ…  Gb .îH$dšhé Ðpäo°îo€ ðÏåÁÂà…ûã}üå BQ®hÒtÚ#\à@u]aœNAÂÎ,Šàñ€ \ vÀ¯Ò!@u%# „ÐáŸþ°P à c.ç=Šœ‡!\³¦‚ru…#qXÀy}ª J¸wo‘?ÃuF¢<‘>Kö$Ìþ¼ ˜;ZÄ ‰ps‡k©þÁT€ëà8 Hê–˜”î„{AEΘz£á¿Œàs5¡?4 ´'´÷CØÃ ?,ÄÄaÜá~>ÿiø§ƒ0´ƒ; €G'¨áö¿eÂü1/ %ˆ@?0tþù×ÉšÀ0 éâýoø¯‹¨˜ikê« üiù_Fee”ÐGHL($*‚AâRÀ[„ƒß?ãBêø_-¤= xì¼^ÂEý]³ÇðþÙ>à?ƒé£Ô…yÿÍt+JøÿŸùþËåÿGóó(ÿ+Óÿ»"uw—_vÞ߀ÿÇqE¸xÿA¨ëŽ#¬а Èÿ†ZÀﮆpwýo«BX%¤ÒB`qaøo=«Žð‚à 8¨ãoÚüÖ›/œ  7Daç‚ô_6–A ,›¿M,aåp¿y.à KõÏ:ÔPì|ûD%$ â Ÿ I}À„5…Á½~±("ŒDá.@BÏ~@{p>h ) š0ì\øGl¨;CHþ‹„ÄË¿Ö÷‚Cã(¨L°SupËA¥«§Ðò ,éfêÁQ¡Á‚û¸.µa›…x“¬ÌIgê`õûNmúÊnÙ³¶}–j8j½Å÷„8ÔW8ìbÇÏö.Œ&øì³qŽÓ4=±HV¾.]Œé"2d¢m§T€9t™pÓøþUÝñ1Á“‡¡Dý–vH‹~k{eI¦.#Ûmó/ŸŒqMv½¦Ë;Lå|r}´m‘¢ŸÎ©#Ûzˆ÷¬ ïéë¦ëd¨íñpù;W(ŽNM¦—MUœ¼Â|:ïòÏœbtz;+а®çs|ÉÕú[ŽK[Ö7xÛo9Ú&ÚGƒ¿àÙéÐÓ Ê©˜Üü•HØTvIC|Â>Ö¼# ¡ùz¶ì»³vXˆŽ÷ähÇÐüOw-ËwÝÁ¼‚zñr§¥K_üê¸_Æx؇7ÿU™L·¤&À˜É·îg”×Íå’5½Ç2j!j)•êØb*_4};¸9à˜µ"µÜì²HÝçò»{>xñÓ¼íÖVežI·Š(d }4~¾fÚ7½àÉÑ&XäM-4­*Zï麰ç[áµ`­ÛãŠ*ô+÷¸J|ÿ@÷(% äÈ~ºÞÃ$ÜÁY6µØ¾{½”8FT¢Ÿûüh'ñm7ª…H àQ}´?Ù NêеxÒg†WėÛ${òº¨ˆå'Ï~È7§h‹»*NŒÅêÇ›øz}Zò›—èoÓ-„ Ü—ßé%.(Ò8ú ]™â}DýÁ¨7h-þqt‹ÒüNSNßHëè×K-%r·Ÿ~ÎÜØs`eÙΔ»ÌaÙjÃqfw†²¹ú]™Í¼`î¨ûa?yý–'ÇWfâ¥ú¬Œ×ó­5Ô=u¬A_pb÷&Lt«É3ZÿEÙˆ¦ü®ªßîwŠ©¬¸®»I—[¾ÖVî•9”\&kÛµ6ej?ƒøÚ¶:ÆÛ=à{åy7hjÉrJü^}‡è–÷àJª#³ICHé?zô©Ððºýø} äxÜÐÅê"Ž7_Û^EoÏ·±ÛÄÀ+jø‰ñ¾ÉqIá†Û|zÒ2”CMÍaÅÞ=~ìœ+x?Ú.>ý;¾¿‰BÕ"n£L¶¸~…”~ú¸{ð¼)04I7ræ‹E]µh•©zœù<‚¤ÕK¾ÏþƒfÍ‘%‡µ©ÚÞ+§tãÞHcª¥%Æu`z*팋ÔþÎt<ºz''#Kó†ùþt ¬þF}€ Lécgúr Åž,ôÓ×Ü2ŸÝá žðöv@߬ۋ}EóGûßêæä¯L.Õšæ~ìE}3öLY„]Ï€7mD¶(#šWÙÙ^11zm¼ìœ†[™¼“ÔÌy+`Ë 8ƒšk1W’HòÚ`ô8"p!°€€ ™gú¡¢ÖPdaO|ûLn“ý-&í…‡÷T…ã}þWš:U¾V;ïFx^©cÑÛÈä¯ëŒôð~Vx»èZe§$¤¥–î2üîZº_,‰äSQ? Ð7óJÆÁÑäS"Å’íþý -gåøðîS—oòžñ³wÖe?iÞ©ì¾èåAÿòŠ_À’ºWg†à Þ:¼³ª‘±N¦¦çòšSAcg–3Õ’>óžxÙ™øaÚÎ\Íô™“†­Ãp˜Ñ³ªjJÞ¢Ï2ý•FÔfÁ*h»Õ·Š2*D·ák<ê–¼Q€¼Ÿ!‡±‡E ƒL1¢È¯©-Í6;å!ätÃö³ï‰KrJÜA3ûq1Î"ñå<»—Þ —Ö}¤ ¬šÓ½k~ï™Ýñ;Ù– ÷'FyµQçê€êwºÚuc[ëžôÄ™¥Tîe,õÂ\ŽL5Ùz‘çÞp³îØ¥‹Ó™‘¨1ŽA_k`…uÚÒ +¾)pF¿œ'‰%QcÌ ¬X*,r›X¦gHëÂú;u|"WQk€ÙGb—ö’^nó¹ì”Þ€jO¿ª‡šš"5üÜGSvIÎ ?ïVy£¼Þ×;•Kñʯ6y™Jbå]LJ¼¦Ðœm¾úP»žùú!™G/«3$$×’?=`ŸZ@ŸòÁ^‹ÆÒžYŽXžQl„»åÇÓrÚ·gåõ¼¤mVB÷nD3_ÏÞÐîhò±aŒöbëØ$öò˜2Ùéú‰ÈJ8ÓaÚ—3òÌ38½Å(ñ3ü&«tÒÁ<3F]C…¸ºž¾kú*å+&z{cˆÍ1êIù¤ËtÝïö×/-ÿãÿàtÓ¢#Ku]j5ŠkkÄw+ûFƒzä\ß@dã)ËÚ¤n‚ŒÍÌ(Y[‹«¾9¹ãn/ïG&FWc·Õ+ûùÚ–Lñþöã´$·“ŸKÖ|ºf>Êñ÷R½ØxÊf"Hª~¬DAµ=®4Ú5çíÂûpQ÷BÓ;Ü‹\’M³Xúo_V)Û™Ÿ»*ó3Çš2ÜŽRk".´0pšLMS©¹†^aº Ñ$»ÎIa…/8yM+2Z¹@Á¨*•a+s^©­‡ÙmF ª”»mwð„žÜ¹²¡•ŸÑ=šzóÒjªþõÃ7gŸŽá([ø…f ìZáË»ÑòŠLû1•Á«dUOÇ›,H÷С£ÛÎdyAƒ½J¹´¼ÖzKÌèh(iö¦cï– $U¹Ì¼{ï-ǶSr/¡ÈŒç:}Øý: êw6‰D?~©ôرƒ¥ ynKªý6áÔ9ª¥i@CÍq”gUájP0ÿÊ|9«mRÖ¢âí¨©(+E݈iе1Žê ¾­â/þWûf2¡BjC,Ë! ¨¦vŸfÚ$–*Ú~¾Ml•þEÇËM¬£pþ ®˜½,c-ö½ïÅîpPþ€ÜŠZœbEs¢ð¦èýyLM¡t/»¦|)|uÒp`¦fT¦bÿcχ'Á~®™kB?êô”ñX[¬_lvôÄI¶Q‘Á&Û"Bœ’½¨ÞLc¯öúyŠË·¨YG+ [» {ëRé \¼³[½÷ÍÄ®T¸¥×Žîn.n«r>?óh‹jÜu:¥#ŠQHÍ9šîWbiX‘.ÁJ·Z÷°ÊhŠ–‡¼¬Vpi«­†2Ð/îïÜ€SäO­ áÀ>аˆôÄÙɆ&%LŸ8‹,ûÌ‘­ %¢2s¯?~ÛM²ø¥PJƒ›.=Øòf£»Aï‡ôHÒòä5Ô$`ƒUâÆ³øìfPRä§IÅÉõþKª”#7¥d.=x²U{¶½Èžs½RÎAå{^\màŒÂáêÆ<¹LŒuB ÆŸðO3¡"B÷“ªc{URåé- ‡GM©‡oX¥i•ånsí’ÿèÙ`âÊàoŒÛ=êuÄÐìޢ䀗ʬö_¶è.ùïkœ‚ÔR)‰ fÁKõ…1^ˆÊHógn—â+ž'–ÑŽ£?;è_ðô¶ž·ÊœÆŠº¹~;UÈþX¨S´'ã³»kÚ$þ6´=çõãbý¼ÍQÚy²VçùNؼ×+-G5¹ž âðBëxk Ð4¾Ýºù›ÖÃ㯢3Ìå7© Ã.¦®wYRV¦Æâ¡î'ÞMfÆÎó$±„7’º¾ÖçoÛBƒ}[îŽæš¿ìâ]ÃÏ­»úx¼|Ô¡ãÏø‘¥%RM«`‰§²‘Á9Î ed­‹³sדª—n¦1_:˜ùZÍrDÉ ‡·<ûÆ¾Š›wú=¨:¥É)ÊCš*„ޤÒÙô¯Œ°[Ü»!ç®¶m´–˜BÁ»¡*+SãTÙÙ×p47¡µ|(Še`Ï«Ÿ;VªuÕHx«oÒ íýÙüC/:³xkLåÑ}åÜ…¨ÕJ¹LìmòC¦‹[¯¨õL[š>œ5Kg5TÃþE¡x NÞÿAu?&uë2ÃU:[C“39™3µÃÖŒ žíˆ|Œ—(%—å‡h¯q´X+ÑÆ§»fOJÝ‚Hëø‰ms1À§ûJTe fRÝ=]¨X~4öÛ!µZáž‹s±"ÒH`{@Æ8.™!êý.´‚1x¢Þïú‹Uµ:æ¦A7ŸK±,Dg'¡Õ¤[=û²²‡Õ ôT 9¥rZ»kÅÚ=¶ßß$Þá3öÚœ_‹%éô¢”žt,¹IѬªÉ¼ž3ê%†Öù¿jbÔ.¼´Ú¸X(ív‘±»×Ñ[g¦öT]FöîYÎûŸþ¾[Ïæ(Gé®ì˜Š`ÚNŠ8*6•:íÖ[zòk—\J¹]ð; tˆ?ös‚ª¡Š¾¸ŽUýÌÖŠ‚ÚÍÆÈáý$Îõç›39;ñŠ&¹G¾ÚT|g;šVYÉü‡=ÌTeùú“7­ 2N ¾%½ø_úivMã}Ý«R¢†tS®U-½½ï(¢t)Fq=vßʆ¶›9r¶’,ݤĤq8ê+ƒRÎ}×y«d²v‡I™9M‹9Lá×eä¨3.jL=x€—¢½e‚Aó„VsE8ï.½U\¤¨+J‚è„¿N¾Æp³¯î{œºcWñézÕ%œn˜ÔP(¥/Ü÷ÝÈz«Áu¾9·÷Ë´êI8Êdƒâ|9¯êÂæ.Ò¨IêE6+]rg ´')÷—C•ü˜žXQ-xß§”ó²‰~õÜŒôÅãö¹'’aNÊ“‹R ! ÁŸ—UI_ÄűY>ÚñVMœh#wµ(²¹o9Köõä£Ó²§)ë@@ ¾nìK!aí,S4§X¯’"ÏŠ·â˯ŒŸFŠ‘…·'£Döã†X¨¼¨’¶wùoÕoj¾³90’Ýa{` š‚L/ÔL9I¤Àî`’5UÁœ-з–ݼ‡e{®/xQÉíez„_ü©ñŽÁ¯ònÓ7<4mt§â‚ø‡«ùøo©nzò¢…CÔÓ §˜A9‘*š6°º©Ÿšõ±'sÅ&ÜlxE•ê+T Õ¥½¼Skz‘.çÞ¿—ŽŽ8óŒU÷ˆ%ôÖha™†À½öþå誹ȶu¹F ~ž@Ó[Ï¥ü„ÅÞLžïnsIz-Åqµž£ºëe££öqCÑ«\¶<^§˜3»e~F9_\4« t8Dßriج¬}‹•5oö$*í'î?áàçx¬Î´•"TÒ1UsH÷’ê-œ~^+%¡U{pÜÇÓÁðð#YwqÁÁÝ&aPíŒÐØâ¤‰­Ê%¢‡·Üà¦éŒÅ²v…Th4®ºav¸gja`Ê6ü]\ØÀ‹Ë+Þë3ÝGw™sKû¤t4l¾jnŽ£vðEAßúÒ=d-[StjZÚ~Ž›^ôüüëfZÚêøP3¹¾¥›À#mq7²³%-¸èð¬ N&F¬CžA­x,6fõÍD_ZêI>ã_׊æ(Ìfù–Fí¸‡Ž'QÑ ©«ò‘’Ô‹=þ|©”ñ€çO{îxJ¼áì_ðuN+á…3s‰0Íj?oÕ jœO¸Þ³û*› ¤·‹ºéˆ2]ãîÜZ¾ dœË+_È?xD9\ò¥WT"ܱeu³ÙWKXÂý•­‘aþþøC>ÛOSŒŒzê×x’ï‹'H0%ÕÜ/š ~È 7W g§Ðà·Uxk¬®WB=ßp:6à°øhÝn?9GŒ$9%j•èÓÀJ šâ¾êtnÐ[ê¼Ý(k•Ûë¹:ÿbï“\»a±1Œ=R»Zß­Õ´)y x¬eúŠ+,ætÐ;c"ì[ÂÍd4¢iåÌê˜mÍäÂ35÷D½cFºé5­AÁ×ÍÞHŠªÒ%DQtD!Ü|Ää ¦Å =¯„“ÞNÝ”#¶×0zþ#é°qЦ¨õ-/Þ/ÍâhªrC©~6á‹ìÙØ~;ÙÝG5ÖºF¡ Mþƒz¯IåáÂB“¨g#WOU˜Ë™i.&?épé£Ýì²òg6¸ÊåÑJV-L›t£8õ<\Ï]…p„_ú¬ªÄ¬òoì•ãsË‚&,yŠºxÂÚÏVFº —Gõ°·Í¼/ »Ö9X¸Ñã’hî%¶kšõìÒ·®ž…ÌÎ?R+‹’Ž3y‰ô¾†ðô5Ö;ŽºªÂ)Ëày‹¨û0\æA®ïã³Á=)d½˜-”*ÓD/ŒRd›L×}T1è¯Î6‚þŠãSÊIÞ"w¯¯ËÉV$Aí²–v–¬3ô/äQQ‹…§¼‹âº |æ½ • §åšŸ\£û8ÒŠ¢AöÁ+}÷h³¤Å®ôPnÕ¹ç[²|2}u^c(hÅà>¡Hý\ÄI-u¯fïf[`¸9–Ç£x«úãUCαwÅ6z5tz0#KÞÅiÖ²¹–Ñ÷x̯õ0¸×H’“ä3·ú…æÑ8M¤xmL}³ù±Gv endstream endobj 393 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xÚuTÓýû6("LAB¥a”Ò0º¤$¤[’±ml£AºD@º;%¤„$DAB:Dº‘þ3žßó~ï{Îûž³}?÷}Ýõ¹¯ë;NV=C~E(Ú¦ŠFáøABÒÀûÚÚê a ˆ€0€“Ó‰³‡ýmp>„a°H4Jú!îc``Þ¦ ÆáÚhPÃÙ‚Ä¥AÒBB@a!!©¿hŒ4Pì‚„µ€h à¼vtÇ á¾Îß@.7$%%Á÷+¨èà !`PŒCÀð!`{ !‚„áÜÿ•‚KÃ9J ººº €°h \Ž›èŠÄ!€0, ノ Ô;ÀþŒ&à!ØßC´-ÎŒñ{$†ÂâCœQPˆ¯4T×ê:ÂP¿ÁZ¿|À?— €þ“îOôÏDHÔ¯`0‚vp£Ü‘(8Ðiêªj àÜp|@0 ú¶Ç¢ññ`0Òlƒüj TUÔ‚ñþ™ Á qX,Òþ猂?Óà¯Y½vp€¡pXÀÏþ”‘ïî‚–û…vEyþ}²E¢ ¶?Ç€:; £NÎ0uå?¼ ð ÃÅ„$%D$Å0' Ì ‚üYÀÈÝöË úiÆÏàíéˆvÚâÇ€y#maø€'ìâ0Î0oÏÿíø÷ ¡Hhƒ#Q€²ãÍ0Ûßgüþ1H7 ¹ž~  ÐÏÏž,ñ ƒ¢QöîÿÀ­XPMOQÇÈ”÷ÏÈÿq*)¡Ý€žü" ¿°˜$$,”À?xÿ;ù§¡bÕQ¶h|Äï~ñõwÏ.HÀõG!ÜÀ'ÓAã© rýÃt !1!þ ôÿÍ÷_!ÿ7šÿÌòÿdúw¤êloÿËÏõðøÁH{÷?í›x,"Ö ™˜ù™-þÌ*;­jàÛ\?Ò3Hs4~e¶gÁþZkÿ®4v/DiÑžÏÓІávI¯ fü&Y°êìwT<®¡kGõj DY·ŒŽ¼½¤æ icäàx¬ Gë_í + €Æ¦êmý1ð–Çg‹êjà 0•ý“®DÜxQÁé™t_‰Ä¬TÜÕ¸ø8š¹­(/A«ZùØ(iFÚ5’,]è÷¥µ= 'Åu%÷å/ Ë&5 ƒýd¶³ ·®UyôãŸ6÷·÷Fš¯O–l 2:T µ-_ò£®ÏÈë¤ë¡ÍÜ›Ô 7¿Ç"ªBªÕPpgítž<¼xGBüÖ¹½óše®RïI¦GЕn¾l“³x%lÎ_lò¨q© Õ‡_ëYoõ›Öz.±ZÁ½Ê\f@žþn"1”åïb+;²4I—jæ!#Ó] .¥te& Ú<°Ž°…€Ù2š?Ä‹B¬\éI¤Tj°À#•Æëý$ã>å—š 7 4U[¿Ü\ݦRO”iƒÍŒ%ÈæZžz‰¿ZT9uŽçª+è^®Br«4)ŠO†=•_ôñ?Ÿ¤•LfÔ¢æ›]ôªc¿#U˜F ˜ÝÙfˆ™è}ž‹d€ó?ãì÷–ôñfµ|ª/s/Žs¬ÕU{@RØcsË+aÆU:¹•hû;®’¼®‰\•,iX ŒÐRìR’l%ªux1dûä"í%q‘Mê’†ý|á“KYfØfÊ$£eí“7ºQÉk.a+;zËÊ ñêTLù‰ý;„ÆÓã’ß®Q±ðV·z<ŽàìDô,2¶NÙ|¸ÉNóÕèŠs=¼:l4ö`Pxo-W™©übÂ.—;œhøæi÷+»>ú ?ɅŶÕÎSp.—‚wn•CÒe`aßP³èÀJÉ^!M$´ŽS£Í|{º¿Ø1‡§K‘ ‡‘šügã ÝÇwY2³\ Ð=ù¦ïÌ€|…Ç0³Be›¬éý˜µ©€= £~BFǤY œ0GF·¤¾BÌÑŸÇÞÖÅ–LUTÁ}N^4š\aAT|ÕÈìå~ÌüÊ“4¥0í¨l©3ôЗñN©eì‘ Íníï¦]/a& ,Åå^/+“z`[,ï;©®ˆ–Þ_`Dyé²…]søôp¥'µJùú„⻌“žUf²ÝÜÃÔ‚)©Æ±¿‰ü'»oíP•ñ^&!®–Ã`#ÞqÙNOMUyI‘+PNqÅÉúÇa­hNî23µAšÔÙg÷cß­Û]ë£'õ>)ÁÒ§:¬MúñžsÍ£c`ØD%³LuŒˆ%KàÚ:ƒZŽ$nþ‰þDð ‰N³Ø=ó¡^Ç$céUßEƒ× ^q›ºí6ÆŽŠ]ŸÞ÷½æ¥üï9k-ï!ú ›>i²V´@‹ÂÛ’ ¿˜ôUŸ9](Wõ‰„ÄRÓ(o’|@"Δ¿‘ïèùíŠ9KË̼kî7×¾ìLƒË8Õ>×ða<“Pb9^{ÞÔT³s®çé^Å  VWs[í1ÍM£‹MöÝÜØ½|‡¨:ìšÇä`Î @n]êz”(¤Î8¯"u¡ÝɃî:˜L7HkÛÐ1WÎ^V¡¥÷™aó’X ¼BÖ¼eÙØ3ňè¿Ð’Sº(âT:U‡§O™>y“²ŠÈçi0Bê†Ú OEg½K×ÉTÍSÑ$ù<î« .Žá~‘ºuséè©%UcíñƒœÀÝ…1UѵÎú½âï_ˆ® tâ JŽ,j‹ Û]Íðä⃒µ·ópÿ»ƒ7–j]¨@ªöb©pTÖEÍFN_çtà$ß`Ð øÞgëa‚•ýI¹´òÖ ÷ã7r×0—oˆÜ¸eÁaÑA›5ÒÓYyP£±Aä}) ~ÃiîªÂÃw6ésÏÔÑÜ|_+Ôç3„<’||/Zý.Ïô ‰!3ÆÉÁºt‡d#Ìd=Î?ÜpKTXXã-¿¶ìG5ªLº7vÊp©*rPéÙ©™˜èNž«¶Yñ² ┪ůªjvONF)ž÷Ò_çpù!*&|UÓûÍïa\à¢[QV oÏ„âEú\ñØÁxAœ‘ÎGrUvƒöúšB=t+bÅ­ƒ…·ÁHÜv¢ÄDýfýhc_,!B©ï¢«ÍÿÕíß=»eê>Ðd«j?ó…ñ¹žnW˜É»\¢–ZéýñKk¨’"žˆ¬°gÊ%±w õf[0Ûõ^ň®|µSu_? (Â51ÿzkEƒÏôW×÷ùêa|f ´m-‹8Rè JÚ´¥„ÍÆR3áüÃàìDØö€òÉøb¥[.êÓØÊ–£E?h‹ŠkoA€Xc\²òfVÅò¢Ë^ð,ÆæîZtm^q¥MY´‘{¬ç±¨|#—òÜÞ $ëÇø ƒâ*ˆœß­½SR3èa¹Ý20šOûšÆh£ã{n7°}ØñéѨç†ÙD$ÁŠq$‹ŸôÝ)âÔ‚£²ñ;G/òï9 ŒÆìRÚ»^Êóèì ½ÿ*öá„}<¿9Þë[f¿sL«Â^`-iw§mf—Ù,'<@ÞàÑ{ŠÔ ñô+ì‘»ßVùvåòÔFÉ,(Å*Cd¬gÝ),¨¥V¤cŠWÛö¶ 8>öòSö) ïGÆp`V¶O*ç>&%Oímotí g_ra:#¶2µÏ"Æ—òê 9æžß7øòc¼¸K‚µT¿“Ü£Á»qaé÷ ^à<­kè%ˆu“mߤ5ÃzëŒCvè ÕMNŸ êa€úèá¿À ny@‘ŠçÂêØ ±í>—=³{¸ð†râžÃ›Á ¡­ i¸P·½èJ«6F[ëüÂZöºÕ«b&ÛWU=ÑÔ“§BÍ}k--_»=ä .úHÖF´ÉüŒ,`ZzWM<€Y¿wöܵuØDxè†Ù=@5Ì3’6S”Sèqvd S“K…°¾éOèÅ3#|íè’VH^ñ–«.­kk]PêwG“ÁÌ@ëjêàˆ@I Ùï«Öü:Åörg½áù /®,ßOx˜ˆÖÊ×éÓM«ìøx™ó1A@лó8Õœ§3GvcÑ‹V;:4{‹ÀfÛ×yÄHœpúQ=ÈVÅ©ºÛ\ñmÄY„ peMÑÐ2Ø48#ò¸¢d6­°c-6RÌõ˜*þ¾Çû‘RŸ%i§sÕ‰G«<,ÏLÁ/ìjƒòQšê ñ–&Õ°.šÃÌB?vFÖ5‰¼l± ¾ö>‰WKÁä'ÛbV[¬ù„Ó÷ëIK_ic‹aÃ9 ºÚ,Jh¥~±û$Æã×ëÚ3^Õë¡ÈÜßhÖ§’}ÐáÖ¦¿»À¬¼·R§Y(ª÷3qüâ]LaÕ¢Ø0:äw²“‘R]@g —Dº‰Å­37AZ‡hx*ëlÝ?¿TÊÏ ì"Q\]”|!¢hΖ·‹kAøÒÃßM$æÍ÷ºå€C$Qä>”ùÓAâ%ö~¯bv®sñ#¿>¦„bR_ººçùÅ7TÌ¿xùEǾ§6 tk@Ôˆ½1:cèm$i¤9M”ýªU}íÖ-„ëù@Ù3·§ò?ØôÔnꦨx¹{¼ÐìWÊ8M ÒßäHŒ4›õ,ØØë ¾CY<V('®^—uÄ}±ªgw2™±¾Ml¦TÏí¯Ä>Æ8Ñÿ–=zÏêǦô]0ˆlûFÚ’ZR)…þÝ-òég”ÈB(V½6‰nóŠþe›-ã1¥ÜNþ›¸LØ{c#‚°lcþñ^®Ëö ŸoÓg„e¼Õ®~ÄЙ;Ødº<Ü©þfép/#°œy=Î܇Krþɤe¾#âc¤MZ€_Ò)Gb‰NrZâxÅYÒr@zNMÆ_“„LØõ€Ò*»o\¾/i‘Pa T+L,¯ióªN—Uuz6‘~ ‚ì,×›X_·*ÛYU÷-\&,ÚøX9u{Ջ䘌½YtÍað)¶­L|“‰@!ÚÖv3Ã~¿4¦Y];Ó-²=×TLÖÚ¿ È­~)×&{%Äm}Ü„4d³¢Tsµ Œ®¼„´ð*ò®Ë¶‘A·’§ç[‚B=ǯ$£Ú AOÚÉNŒ›wew\r¾m_v?ÙÂ=ÌØðyyUà?3oÒ$çÏjâHî¬ÍIö 6°#Úd°4d–]+Ö$˜„Ù?R}O°¼óе`;åÍë  ñÔ“NïÐp)},ƒì¸…šÊÁóÓUãŽG—ö߃N£i£¤ßN3õêT–—­WŒ$è]5˜Yjçc¥¶ÃiójØ|ahZ—蟅«Â9 l핯ô¿ÞH&n&Hó }ó âMx“ÀõHzÿòRk•Ú^i>çp?³Œ¨þšqÿu ÒÆy*~=‹£ó/íýUØåÑ»ÃÊ2_‡öRÁ•ÎÅ˘a‚üGì쬶MûijßF‹6/OnKÌ?}" Q ô·§|NÇeiG4í”OÙ¾AòS¡UxtI^¶5fhÙ"ªs7ž’à‚“—*=«|öfJ AȸJ(ì/BOrg h ³©5ñžàÊ5ÉŒ®jÞ„áá‰ÙÂÚîµI>Óí…ëeõÍ,¾ôåÞ<¼60å)_¡¯aUì›.ŸK/èÅv=ßPÉŒ›Xõ1,4§Â¸2zß3>o«…¥Š©$@‡*~°ÖKù7}2¡SxœPé8êý‘´Ä5÷”Émh1Œ>mÇ«ÛÜ–›_ÌgòºyÁ$îŠYÄ_ªóo(öhJ/ÂÚöȼÀ=«Ê¢€ð S ^¥»Y(×N6oY~ßqZ¤ßZñâ+"·à׊ ;"]PnÅ)µÜÖlÈÆP“÷Ö’I‹6ÿd‹ÆjŠg¹¥âǼ`×ÌœYß’Ä9ÈeÊñг!¥å­1‘˜«‹¥7  ªÙ “xóõA?öPÅüU¥+øÙ‰§ùD˜vì/Gù¬¼ˆ?ß°?ƒ_¤jƒ_šìœ¨µ×u++<§3¹ Ï•-'æ›2ᡟE/µÊŒªTDõ‰‘3mc* Ÿ&|T²-Hyt(uý³1½‘ ”6ö×븽Ñ~L©nY!Oí$ÁqÄ×¹ÁZñÉöû}nãôgyá˜dùÕôjÓÍDLK~â«dâKô$ߘ¬œÝÝ™P×Ì +˜sX¾ÌIÓ·LÉæ®|þØöó9¯û*Óëº_øµ‘¡t’¸tV5æ<êIç™l vÚ­‹ç „^3Ç}<5ï˲ïÂ¦Ï  m! +*Ú|i#y4Ì´Ü~›RP×y'щË$ðìÙ1 ƒ€”-O÷À„‹·Ô.:5ßÛº%lMá’'Ä¥ŽÇ9E' —ÏúBJW%ej¾ä;™Í C/‚(__‚‘xÕìîŸÈtEÐo­¦«i´õm’j¿z(ЉÊR·½°r‰}2×ò“éêùÀ&md›‚Eè/½dÃÿÃQ <Öê/=ä&|ˆÂ¾kï xpímTëýX²ORcÑòÕ"Ô|°è$“øÜ§kåÚë{‹´/¹:âÍuÖÖŠ›»n]^{¦›Â ¥=ÃTd~@Ý $1Ë™jRÅ)\u›.·8¶Qëk —kÉóÆÎÜË'¥*ESÛÝ#È\®W› Á”Ï{îôb™ê¸ ‡‡.Ž4+ &±›ï6wójóë> stream xÚtT”ïö.‚€ C "0”„twHˆ„0  13C HKJ*¢€t§t#©tç )¥Òñãœóÿ{׺wÍZß|{ïgïwïw?ÏÇÁ¢«Ï+g ·‚(Ãa(^> @AKKM ñ‚$P”#䯛„Â@Bá0‰ÿP@@@(ŒO„Âà´à0€º«#@@ ðPB@TâÿÂEÔ ÅP‡Ã H¸³'jk‡Âó¯W˜ ..úàw:@Î ‚€‚A0€eqœ9ôá`(åù\’v(”³?¿»»;È ÉGØJs?¸CQv€Ç$á±ü  r‚ü™Œ„``EþñëÃmPî €q8BÁ“á ³† ˜ÃújšgìXóààïÝøþ]îoö¯BPØïd wrÁ<¡0[€ ÔÐQÖäCy @0ë_@#ŽÉ¹ Ž + àwç €²œ„ðïxH0êŒBò!¡Ž¿FäÿUsËJ0k¸“†B’üêOŠ€€1×îÉÿg³0¸;Ìë¯a…YÛüÂÚÕ™ßuq…¨)þ…`\$ÿñÙBP ˜¨˜0â€x€íø•7ðt†ü ürc&ðñr†;l0C@| 6̉䠮¯ÿø§E" °†‚Q+ˆ-FòŸê7ÄæY>ê0b¸'þúýûÍC/k8ÌÑó?ðßûå×ÕSÓ4Påù3ñ¿còòp€¯ 8€WPŠŠD1/>ÿ,£ ‚þmøŸ\5˜ “ñ§]Ì=ý«e·¿ àú«nÀ?‹iÃ1´…¸þÃr3 ŒyüsýwÊÿ⿪ü¿Xþß )»::þsýŽÿaÔÑó/ÃZWFZpŒ`ÿ }ù£Z-ˆ5ÔÕé¿£j(F r0[ ›y„ù€ÂüP¤2Ôb­ Eíþpæßð—Ö¡0ˆ. ýõqÁdÿà ì€ù€ 1Äü!1jCý^ã/‚ÑÓ?ûP‚áÖ¿„'(òB @ž$˜Õc,€—F¡ÖßÔðóÁà(L 3³ÀŽ ùµf1¿3f7pë_~’Ô»"˜ÃSsð¿ìß ‡@< `’é 8øQ}EPãI™ƒ;ïÚ$þ^Ò‰± ïPö3"T—ÒˆÅrœ~zÚŒFòt§€ò3ûmy—“Œ…Éï^èJæ*Oá#^få [f«˜‰ë#ì±x¯cFÖ Š:¬¬' òL]Xºw#n¶ËXÛvésPx߫蘊wç¤ÎSUnÔnn-ËKÓ¤e7ÚYyŒª·ê5XùAw/sÅ):p5Ò,,Q;…UC²ù”$νôæRO_ïeçݶu·€µ}ö—(J¥G½ŒŠÂ„¥FsïÈ/2?¸m§PyY©Ü’ݶî*\äN8©Ð>´Cn›³Üwę́¥ë$ÚÉÑT‰{‘’Õ';[ö=Öl¢(¶@í!0Ô"ãåçQJ?`uú2§/X^HC  ÝÕ¢…#fý"½ú¿.oþ ÆywU\ •–Ô@¼¼4äeÚŸvAµSe|µ[)\ç°ý™„ÛÀäÈÊ'F3wbžqd¤N¨F}õÖ ‰5,ð‹(É#¥N­Ul¤û`vk,mÂÑŒúH¶0Z¼€Ý»Š_0+>«Ê¬üNŠ÷Ñù–@P¯ÖÙ'ooü­RWHÒͲhŠ˜EÈ'B³ yߘÐkÈÈ’œë¶²jçéýºr±©’§¯Ðñ‘ÆÕ³žù¡¥8Láo–äŠ6e7:ö¨Š=)îÖh“ÉÈrh™Ô§'§Ó0, ˜ó7’Í”øaõqúªÝ¶Q.å:¦›2*ÎíH°—º®%³Aï yÚoïEþVd+xÜÇEåG Ѝ¸žØI£veÞ ò„ŽlyEªšØiû±s蒥Ƴ¹8D'änLv>ø9¨»«QPFF}îåB×òÚIÐ =­ó°®`‡ÞbÑ[‚ÇÏ×UÔ|“ˆÔ(?LJ”²P=T¾êÆÜtM À)õÓ0£y ‘y7{­°Küjéën¶¾¢ÀyzC•‰På™ÃfEÓg NC ·)úøÖvFÏ•‡Q‹Í¾Ý…ï±[¥¹å è¨=M°—¦Ýë Ô›N­ýè9ÚvyÖ®"ÞV´Î`Ì–ý#Ä,Z&¹§¤8E‹±èà…á}Ó冷QOž› -çóV¢E\ۊǯê½È®X÷’{®•¾8ͪû7›ÞMƒ©¥S·gíõžtÍÇ¡d ›ä(å±5†Ôðûë&twmáxÍ ²°ÎXß'+ðJÉ£C ëdîÔßÜYç;±Æ¹m@Fò¸Í!7 w÷ÊyõÄ)Fy~£‰‚½ ïd!ø½$gdÜ–NZäÁXPéWÜØžB•ªºLÆ·œSãy»:¹ŽDvjøü‚ûq†Õcœ/I/}”D›÷`wÖ±c±ç’™$ôà;=¬X7ãŒâ·Ï\]›8“È%A±t|ã á—>;Ñ5m Qûçéã??-z’Òã+}äRê*¼^pzmxÖ̳œÓÒÆ!âìxEÄVÝmÊ2ÓŠR§ÒÖ5hÜòãZªØÏ`Éæ—]Óêï0×îæåC8àBïXK“¿œw§­„äSP=ÑÍ£’6ÊBÍR–çOƒLV’Y°EnkD ê¨ØëízÀù>ºã¹rLIsðT–KXêë±ù i|O¾XI•z€&lC¸òÚ·¡gêXìœOÊ‚ìÌgÆ'[CíêC¦s& w›Š?a¯µI“ܧ üÖï WßEMå:û§þ&‹›ð4½‘ª9R#;Æ~ÃWºI8aFéæï öüJ×*Öíסsån§–cijË?UKûC¾Jn®ë¸;Ç.§½âÊÑ­û ×Þñwã‰ga·Ë•Yº„w.¬$¨†{enj‰û+„–É£gnMÈ– ·7Æ6\*=*¸A˜Íkç•yâ_×cƒKÓŸG|öÂú#pú*GpiKÚ/pûIB6˾&õž‡±…­gÆ7q1Ÿœ ¾•‘Ì—Ç~¸z\Á”| ;âœ$.™Äµ2TÄÓX›¶él¦+Tkû6K ʉËÀظI…#üPŠ7m\âÛô<«x.|~I "Šyèù` Ûϼ8…ã éè¶+G9Þ,KN)ç1’‚…&DŒf }þÂ~p1†ýî.Ń缒1ˆöñÅBíÎ =e¾lÛ÷lm±»–oÏŽ®^N¼xnõÝž <:.‘àëˆz”/¡– ô§ÛòV Rž±âµôö)îŒY0•çüøåÓýº„Z‘*•»Ë¯”íªy%ý̈»ëÀÂïMüšý3ƒ§lW+*)F Þë…c=†V™f=¨[0ö¨µuo)c|qe,X5.¸ÏÏžL+ÏKAú˜WÏ–öxw¶Ãm—8 Ä5ôÁþ s7.Ñq,àZûÕ¸È 4¬@OUl»úã„!c²©ô'aIð±ìÇÛ‚â8POe’D*3%­A;Á¶Öù·g¾œiMÞºGI5''xÒŒxô#Ïý£àÄŽÈ}Ç-ó^ç?dQ#ëâ%x,x:îÄdJ,{¡4¤ ®ÆV#Jˆû9-uÍg$h7·ËÛ,l°Y«÷—±ˆ’<Ún$gñ@óøWd|¢æå–ùW-\³P–:; b:8Wú­~ñœycOßLÞm›‘­šAúƒ™Éߢ­=>*“Ë'![0@OSº@yê¢ñêŒL¿g“J^u˜B¿tŽç|P_=BõM6Æ¡è:FO{%sýQ†…1Ôäýé±Ý‹1ÙU‰3׃¯ÔC]†¢%øñyTãR~SàµË©‹|¸Ø¨jÒÓEwßœxÐAú"©™ÝFå¡ÁN˜ÖXÜJUÂÈ,)1•s¦9 ÷ñâö¬K( c™dBí‘ʺMo[»U÷ &6,?ÛPqákhpÙnãuÆWo¦6ø®’ï2¯m0‹z°‹¸0ˆE’t—(8ÚM‰fîÃK7ì¦5ós­ˆY㨠|{Ãᵑ¬„P+®ÃÚÚ´ýÃÆ‚N¥uø š&Õ—·vÑ U²¶ííi–2ãÓÇ7¯×ßqd{sˆ/¤^å”W—ã ä¾²OÜ,jgaLX~)œ2e$`yLì‹;oÅX/*ŦnZñT,°òöŠ£¡_˜"F[íªŽ|8W&4D¤IòžÕaê3€SÚz¯±¡.4Ínr2Çc‚x'òÌoÙ¿Ür<ô:qµÉë+ã.h$»à8*†ÄT7©Øœ|+ÑR<_ ²00¸o±Ä®Ï?*-ÎzÄvSmҽȃ¥1^àtS²tw"ßV?ôHíõÎÍ_Ï”à˜s _ &?£YðÒS¨µL¯ô Öë9Ú‡Í;µR™P)39Ÿ JH&Ž¥íÕùãÄl7_y_Ó=tµÈK -RÌ‘,•u~k¼ìp‹S×ó¡hÿêƒRWk5ÃáÉÜçê!)÷F»¬ÂmìÐç_p—Ê©ä†m’‰TýµHãX]˜—¼o¢Q(`áÅíl?éèIì~“ H/°ÇL©Y°Ôñ— á0ö¼Í“OÌöC«<ÃÕv•ªÐëx”R©ïðä"AF´RSÉé#Š€Zâò`íªýœ8ÔH”¹HíŸíÀ=~¡tQûÕï§bãëš!9““üÜBëå]­çþâÖäí ï EÌ5É'm`õêd|Ã[&Gè”×﬽òôn4lãÅÊ|¤Þ ¸ ¡DGŠšÒ•ï ”æS}¥å}öÎ kI¢Æ­W ß­ê¦ì~$È"!õðòNWÆ…1ë[5½¯Ûã Q^Sj¥›_kdóŸÑXò¯Ê¡5ÔÕ²_ôÊÀ}à¸dÉ Dý4ÚÉM/jÖ²vì”®”bÞìbl¿ðÇsy`/ËÁ©hWTüóà~W_~°0o"Ëè¥Kèã³®qxÀ‰ì3©C—h5¯_k_ÕðÓëü+¡îÉæÁèÅsjöWЂ×È|~^FkdÓžnBËÜx\Û|mö çä½gßoåWíLH®f(Qáô!XÛÞÝÍ2ørÖqjZØùAß§réŸMÕß~91"žžXZ)"»³'즶’(Ir.ò¡P9 òî „’©†.‰6M?%•àG"[!ÏVÉ•¡²Ò’“HNæow oR_@‘7|xÅj(AÙ”yZbEã ùÏ._:tϯc/œöëñr+/ªm÷òœä»í6’ﬕ)Ä[rSþhwXWKôÙr鞘Ù*’¡wÍrµa˜ÒÆ›ý(ÏÑ©„U‘S£YÊŸ‰Rág0«ƒÆPÁƒ¯e~ê¿€J¾GŸtb×7²êªóÄ ËžXÅž1áäy÷ô¦æ&pMOÔŒµ6¨txãÉ„×tô·Í¶\ýŽ¯È¥ý$’ÂóÚi48”N‰ ój»a7gUR‹§Õ‡Þ˜¢7ûqÇOÞÞïƒ<ËŽü×Ú,ÓíÄfÞÂ(Þ÷’rôc¸`ï”\£¡þ›6|iÂ8­6`šÛ>Õr%XœU0$r|ù º]JÕe¡Íq–;òMÉú6%ïŽëåÚ“ ¯äÊe¯´$ 5ïø'à“R~%ägùxiÇØÅTæ¨4ðbñÞ´?ÏaGùƒÓ\á‰Dâ€GÊpV’¸È‰@Ð÷ðݧ—ÖÞx°ÂÚÍ¥ç´ï^O"¨øH$—éžg@©K3²aO}DùãØLÆÄëï=„»|OAÌÇû/5ÑÃ*wv×?JT…o›Dç~2Y"¥–žòÕ N{Ps7˜ì>šÌ¹ÚÓñJPÖ·7Ó‰t-BÃ`3‡/NA­¥Èývâ§9Õ=Œ?{þùÀKPºe|sL…À¼3ÙÄrwz(Š”ú\ ïÀ>¿'äË–ïƒá®ü’O+JÜ Ò6 ÷„.û¥'vä°*ëԪ͓Koݸ=¢éürevy—ÛÕÒßðÉ>.$|N2ˆËr!"¾b×~J¶²ªG‚ŸÌñJútÈcD]0È@³zþ°´ <7¹+†SŸÿ¾OúXã¼-³Û´Ó©ùëÃbuzåé¡[ªŸM•å]ÆIá&$O.NÑGQem㸻b>ÍLé7JV¯%kò¯‹qÕÚËTÑ.¨p|óÈ×¹J4¹ótfIÖìý-‰i|®ùúЛô…Ì úJØ?Ó'ƒ€’`Uœì˜+Š5¸Ü¥2(ö¡ï#O’±q»e—Í¥¼9iê7ÑÈ‘äøœ…®&CÞNÓÀÃ}ŸQÈ;c•j.g"¶V»£Îjöô¼-eÿUN¹µoùk@ê] o<È›‘ÁæÀ¹Yã¼ì-x’ɾ‘zBh0[¤»¤XA€Ö7®ND_§½©£üBv5> ý|¹“‚{1ËH÷Ö$Ý)¦³”·QþøKœ– ßÍkõZ2Øâuõõëí6ƒ0ÜŠÒ½§¨#Â?SÌÆh-ëÎÂ`±KŸY¼‚öÂÖÑTQòæ@…݃–zþŒ>/·šÁTÉe¬´ù J6JùÇæu¹U¥êëR_Ò])Ò®b;ùC×»µ[ÜGšb†²Ëã…ÜŠ”Ó«3ý]nGo9 T<«xrzç.Ø=o0º?ŒëÖ‹ -q¦nߦ€.>Ÿ¤w4hÊUñ¢ÇAÅF¬ê¹ž;¹Ç†Ââòá KŸY§jòYóf5o¯±®"öAÈ÷ú¹™VΟ²%°–öÀ/FU%W$\7F¾s/W{œÝsܨ˜¿/ýi<¡BFk›øÝëú†ùÉÚ)q»bà£H¼øæº,Ÿt)ûGFÕc…P¢ûŽRˆË¨lN6J&ÐÓ¤;4@áë\ÈJìsŸ;ŽV¢(û&jµkIz“YÙÑ©*<\Qsx §ë«œ+¬þ$FãV~ ™²feDÜ=ì¸a½„ î§Œ<úÒ9ÍÅÐëÆŽÙDæÆÆV¶{«?îœѧ29ðuæñ÷¤ñµ€j©j½'̓]¹QuûéäjLõ(:=|îÍ(rjE£ øEéT){Qrøè~QTøCÝ·Vá ŠšÝ?î Ï91˜&Èîè¬ß9wŸ£v/Yliz¿WÄØ‡&‰«ªn½µÂCxå†î€º‰‰ˆz¥si5H´¸Â.ïè-|è£üü.&Z|ÀÌÌȺ?õ<µàêVõp>¯$p›ÌË–çÑ&N~ßøÐee«âð/»­Ö‡­5_Ϙ›(®Ñß6Št¼%Óœþôµï »WUzûÛM¿qê:w¬¥4q¾¯òFõfÝ_p"9—ƒÒ±ïRV‡h¿5–/霃–´žI¹‰9UMu1ë°}ÌêËJOTó^ˆ“#LO¹i KiPÓÐÜeÄÖxëñá‘ äÄŠ'ùÂ3:Óž§føõØj¡Ë­›^šL!Å'÷×kwˆØ½‚6ÛßdÞ-‘óe&ß­DjÛÁ´iäU¯³Ž¨Rù¼­ð$R}.®CÙÏâ¦*V™±&Î#»¾à´'á²Ï»<¹zÄÀðé4—-`­Q¯5™OÊ‘ú$ªm};“YíV„côöíCö©–*+rd]F%©5).Ü€jwØ{¡Ê3ÒÑ+ß´§ï°úPì®MëÒùdòÖÿ¬ììí4Ôq)xyóâÓ~o ïlÇûÏ}»{í‹)Ó”Û‘?-¦ñ>jîê?Nbû”õZ2 &(3Œ¬ç‚Ÿðz€+G²)Q•²Df󺈓Ù§PM?û=âépYñ£vËGW~ãÎòDblñoÉe«(QâgÐÁ"CVVÉ– ìK0]¤¬k+¶íMò”|*_i)Úf4þl¹á¢jP³F6ä–Zñ² Od9«bB]ŸÈb[õfxާü2ž3JëtI3&c†ükIq.‹é=Úo·ôÇÓÈÁ‘t3z\–7«~0ø‡-£¶s¬ü§Þ˜ŠiBí†üõÝfêñp.»¿ÉLM½À·Äaß+i}4<ô½HY¿u/LŽaŒùud`3U׎%ùpÿý!*Ÿ‚Ì­g5_ù[Œf»9äx„+rßÊ™®îp+èɦ*êN:Ý2…î÷OÝ¿014ÿ¹:Aì endstream endobj 397 0 obj << /Length1 2737 /Length2 23687 /Length3 0 /Length 25221 /Filter /FlateDecode >> stream xÚŒ¶P]Y´-Š'¸9¸»»» ® pp· !Hpww Npwww  Nx'Ý};éûÕ{Eì1m9ט{CIª¢Æ(jfg”²93²2±ðÄß²²XXØ™XXØ))Õ­œm€ÿ˜)5ŽNVv ¾?ÄÆÎ`›„±38NÑs±°²X¹øX¹ùXXl,,¼ÿhçÈ0vµ2(2äì@@'DJq;{G+ Kgð1ÿó 1¥°òòr3ü•µ:Z™ƒŠÆÎ–@[ð‰¦Æ65;S+ ³ÇJÐX:;Ûó13»¹¹1Û:1Ù9ZÑ2ܬœ-oN@GW àWÃ%c[àß1!RÔ-­œþ¶«Ù™;»;`ƒ•)äÎp™àÃj² e{ èï`…¿ÿÌÀÊÄúo¹²²ý•lljjgko ò°YÌ­l€e)&gwg€1ÈìW ±“8ßØÕØÊÆØðsc€”¨*ÀÜà?í9™:ZÙ;;19YÙüj‘ùWð”%Afâv¶¶@³â/~VŽ@SðØ=˜ÿ¾YkÈë`n23ÿÕ„™‹=³ÈÊÁ(+ñOØ„øÛftp²°°pó²€ »©%ó¯òêöÀ¿œ¬¿Ìà|¼ìíìæà&€>Væ@ðD/'cW ÀÙÑèãõ§ã¿‘•`feê 0ZXW›æcðå;Z¹tYÀÚc°üúù÷I,/3;Çïð¿î—Y]VN^M‚þïŽÿõ‰‰Ù¹¼9XŒlœ,Ö_"ã?øü·ŒŠ±Õ?4þÈ•™Ûxÿf Óÿ0výG4ÿ,-࿵”ìÀªh~‹\…“Åü‹õÿYê¥üÿ)üW•ÿ›Èÿ7!)›¿Ü4ùÿ?nc[+À¢uq/€¢x @ÿ;T ø÷Ò*ͬ\lÿ·WÖÙ¼¢ ›Çhå$eå4S±r6µü[-Û5~m™¨bçdõëµ`_ÍÿòWËÔüêpKò/¼9ÿ=RdjgökÅØ8¹ÆŽŽÆˆàK#N€+xÍ€î‰À̲s§ÀíùÌíÝ('€Yô—éoÄ`û¸Ìâ¿€Yâ7â0Kþ‹¸YÌR¿+€Yú7b0ËüFìfÙ߈À,÷¹ÈÿF`. ¿˜‹âoæ¢ô¹(ÿ‹xÀ\T~#0ÕßÌåíoæ¢ö¹¨ÿF`.¿˜‹æoæ¢õ¹¼ûÀ\´ÿE¼`.:¿8Ïø_ÄæbìVš•“õïp1“ßLÞÄÑØÔþ4™;ÿ¶³ÿkÿ{½þu€O7ýq‚‹™ÚÙ€¥õ,¶¶¿YüÒ³Ù¿ܨ™±ã`ÀßEÁÀÿÊÊ® ´53v²ü-_9.àuþ·2˜3X‡6ƶTÀü7ç˜ÿ9­~ŸËþ ºþ&ÂúËð»>ç¯p;—?yƒ,þ€`–¿ r€ï×ÒÃÞú#l³ú‚;}ÿßžõ<\›? xòt~3ÿ®Ì N×ù?¸W»ßdÀÉvÿqƒ›±ÿí³¥Aÿë?ÖÿJ€ÌÚ,*;³?Ê'áðûn~! Ó_/•ÃöËhç 43±ùÏ1ì¿ÿKl\ÿxþÏûõ¿Á¬¬à:\+xÖN¿NrÚZýW­œ¿b€®\'¸ˆø»øo³àÁ:Ùü)«à7úÿà¿þIݦˆKóv¦üAïk‚ZïªE߸1î ÎPîi%Ó2z-9¶¹< ¾J ­JØp¼Mê~½º#IóCd™äÙ븹îÕǯqª-ÞO†1o§öZ'qú'òEkûˆÕEö½Ÿ¼5ý­¡›!;ä(³\xPUr1ïÜz¥ÝkûJWFCæ÷T÷«¸ä‘žJ§#5"ôü‹f)sL2æðÈàœ‰àé0.ÜÑfÜÌ`dM¼ÈÅÐ#úœD²xél²}¾Ÿó\+WgsêħÀ×Á#‚þ1:Eå%v˜(‡»àU\°Ú¿èÞ,P@’…Â´Êøšé-­Êêm8¨±ç‹ëèR;ënv ˆúM?ænÜ—’F,CG2eìªÃpLç/ìÖ@¢Ãvs±µÖÍ.ó÷I„˼ӵ/€YmËãM]^ukCÃýŒ·!I_wº|´Š„û„ -ÜXé$-uÃVWøÒˆ’`KÇ :µ€²X¯–]xž`ƒ¼.ÅX·óYXtx`{ G Ï8³½/?ûTÔ_(µo΢/ظaè¾r)½˜t$]\äã[²K¥‡Ðä¤Iv}ÊY¢Vå¯ÖÏ–2_lVà0I”x(Äns.^PpÈJ÷ì-T…éx¼¿çÍc:Ó¬Ðh‰æÌS%Ý= g;¬÷ îå½1;ܾ)+3À>²Ó¼¿¨p ú¼¥Î”ó©ý퇬N'åiÑp¨ÂÛ¹òSu1WRÛÆ(4-uÁ‡±ÎÂ'7†RY Jê‚%Å>ù#ÞKú‹=øÕDp>ýhüÀVÓ¦|Gœþzí3eúþ 4¹aÛP£æåO±7jêw¹äž›= Óc;¤#S;^6zE½M~Έh›*Ò…©×‚4a?ÍÚÖ5ÜDë– ¿¤Íö7NGaÄÈ_µ±³` ŸÈòK¨Ó× è±^æã2ßo{fˆdy±ž´Qqô¾¾¾º:MxßHøš;ñÉp4V7¡ýšÇ]E€ƒuŽèZÐyâNb …Ÿ+¥¹ÉÇQÞ…õˆý1UCÖ*§Nƹ¢fjÆçÆxþ§¯)1¥Þ†Ãù½¯_÷9”9\IuÓ oe¿æVŸ×V=a÷°l•])ÊÝ+fi³”F¹zqmàÅÏëÝõ ³†RÉØño¡ã3Ô§µå™Våñ¾ Ñv1àJË{‡ŠëˆIg¶!y¬Ð †ÉS‡ô°)³Ìh&UrɪPPØ<=”71ÆánêvâÏdžÂïàñåG¨Ø(-âMªCιÿzÑù[ œ&œ‚¶©ÈèÒ6• ¦Ã6˜©îw0…x†ºãï4CÑq®¿«fW¡¨«¼üp ̾G3ÄÚÿ\&tô³Œ{hŠsÁ¹ŒŠ0¢·ñ"€¿ªÞÎGŠ˜ãr±Èl¨»NyâkŒaVgaõë”±Ó•îDbTE)Ò˜Øá÷Z+Eð¯PeÇ9ÔÔä_Ìi AEÁ¨TfRÎÜ´bhåá)›'<é ¶ÈÔÜ!“Ú|—ºSÏ1yLŽi×ôÿlCccQÙ•±l2]¹FÚtX:—87¢·õ|o̡ʊ[=ê (ãÝvÐ,h*-Ä:XŸæ:™}N¡zÆtÁ¿ªÈ;Èç›'TÈôÄ×ÿŒ~QêˆV[èª$Ñ®(ÍÍK!«`õ“*NtÑâÍȆËò£B””rý•€<ÂÞ±ÊX¾ògQQ¼a×8¿õi›\ªƒú;í½…:ê¥q­åɽ@ªÎ\yÀO|ìTf+«¥i“L‚nqDž^OQ™‚¹,vHD¦+Ýl÷æí5gVQ—ŠÒ d{Ñ &]Ž<µE6·xzS€sIþ™Ï’Pb´f ©,…”Øw·ŒŸžÛ^/ßÍC{[Ñ`S²rlõ0ƒ0Ëpµ9Qºþvëâè ±(²M#æÔ«Ñ* Óµ ýÙÎÙõÿƒŸçPÝ%¢]KÕF¶;ô K²Súü >†«”ûÄÙìaÒÀâ§mLd½»¦Çúeô© 2}rO_¼¤"{׫.” ¢˜”›Å¾b&G1ÞOØ &mñ qÖ‡^çR3òÛbˆIk¥³áòÕÙ3üyßfãlü¥hà#”®Ã !ù7· Ì~–w?žBÆV¼~Ú k è/ÌIØéà Â,…vê,䨗ŽB—4 Ö<ʵÜlê¥ÄV—*°SiëÝžBô£(n#›bgo½Uá]à=щtâýIm´SAŒr⸬uϧ_p2è4óc ¾‘DÎ<9Ý€Hk-˜ŠÃ £ÄÆiŸb–Më³Æm-¸ÿD™×ä%oL¹0 sxL«‡N C¹ÐÈ£4Bõ BèP¼žjB÷)ºÒU+uœËÈC%À™až¢Q`~ˆ¥z­ÒWyî¨*xú·)ó'ºŽiOƒÚ?ú0Oµ€>­_ ‘ Âoµ?ª<|G—‚ÔÌ=¹þq1#Ø9‡&A]S/©£*2Ž&»´éL™·û’˜Þ©[LËÝKÕþ”m9Ê@þ‚¤M=»bÜÝ ÞsIýÎÑov#…dJ€–SÈÁA‚§IA¬9È™LE¬¨W"ò’—ªßX¹0°N3Yï}óÅ95R¨ÊÓ‡_1Î×Èlîóz ÅpÝ>WØXýºŸË÷5™ÂÓÑVôåÌ)«»ÿú ¤³M—Ò"Xr;ìôãÂ. ËDÄ+Æc žT\œ$Ü ×žIËO§áäœxŸ„´iblᤒlFÁ8¥wS5>›F¥ `߃фfƒ‰ìÝì›VÇsøÀ4Ô›Ø@o>>àéQìH²eX#æY9ü1+ä;›°ël+<Ô·ëÖ {ÞAç‘òàÏåÛ"&®|ijp["}…ǽ'… -⡦ï{œ•Rqoc'6T‡@’˜áJÊrØ&€¼¶ñpV"¹a¬`~§âÎñA&8ÛûÛ+­§:þiây¬×Ú˜dìbß9—®Ÿöï¶dôÈfÊtáîXÇSNM9•îxKí…Ø¸åZÄž¯ë˜¡ÏÂ,h¾—¸c«2 : éVnóŒÅI;õ5ùó‘¼¥àÕç¢ }°õ¨¤µªÇs:zß}£U®ÐûV̀識±MDZ{­aö‚v_ §bQÌÆþÙ ÖyØ+ÌÏ-hõoüŠ™ßçoö-åú¬ÅŸKPi~,ÝW}×L'³Qt€6ê,›_ÑŠà78Ç´¤Mx)²Â.sL|møý´êß Ò®ü´ã,ª˨€J O†5\Ç10 ^±ÀŠ­÷ÍÄéâ4"®ž<-–û¸~ÁìmèZ%©ŠiBŠ?´éPµ !(Ëõ›¡í iȸ¯/¸bŽä¥†OlÐüƒo×FîË{‘oXîeµ’4,ÒÃüã_±WT >— Ä[«S7_d¾æÏˆvxZÜuñw¶Qg{× à#HBtˆYèu˜.ðÞ ŸôdW£ï$ÌSaíñ%A©±!±—É%*.%ØÐ\ÎÔSÀ©î1ÛÚ+qÊsCj=üi{V×Ãd+6ušgª8\"5|:úzz¾Ãai¦HGµN¾AÜ“ÎBÊÂÏjïÏdáËSšHV5?¦ Š-Êê¿ù Çz ¿žùŠn‰:ª«¢`YªÍ¸à«æøÓØ ¨¢-]27ÉOÌ I¨S2…« ,Âù!vmcІñ.=F)£'°qHBæýÇÜ×;NØŽØˆûLÝBË“óUU9ÖI•Ë6½üT‰UäË©ÕWÀhZó©])Ï4£ÆFáÜYS5ªDØÖØ3 +‚Ó?C*€PoGóK){ßµq…(©‡Gëßå =V¦)ižûlb€É„âÏùO[Ìæ>ì‰iÇ#…;dÒ%‰èÔæŠNS¯fIÞii<û<ÝÔ76i÷ÖG }˜] |?6@*Ó~®,ó?4ö™Äð¾!œÿðcÍø•_̶\“kj¿þ*9"ÅÒ«R´jqKaÎ 5¼g¢–Ó‘ê®K‘¸ ¼ „TãòºŒX)¢~¦a!G6vZuŠ4WQpŽEä+F “ m¯÷+FìÞ6P®D•F_©em²Ÿý6¿îÕ=åü˜Qé>ñŠÏ…“¬J>·7>4@ò_´yÌ ÛóéósGÛ?×j€}•²úèô9™D‡ê…Ze#¬Sâyž0Œ.ÔtÀsJbϨ0E5˜÷}.o$0ª+¦ì6JÌ=[ër*þê:ÒÒo ÷ô‰.{þYux«XÉÄ<˜~¥µ}=(ÓŽ !r©H¡ÕsêÚâ›Å˜ñîçh—:©ì©ÌwkM¥å“Pt­Pƒ7/ÂïØô»£9ŠeRÇrÓ®R º&€v5éɧ׾ȷ±±“ÜB'´ýù×)2 èL¨¯Å¢ÜdG^!o˜ÙœŸû¾ß;í~x´æ•}÷=Ö<¯$} zûeâù‘s©ðäIQâëA¦o[¤“=dtr+jܨËÚÄUð„‡°çïWPˆ¨¦—DåéËöC;š[à1–1$*åìQp¹Ö¨¨k£"_Á«THzá/:;Nƒ˜ ¾9¹í¹÷“Â5Ó”V˜g ?ÀqÂ.—þ™¿iÀÜTâP×3tiчV~¯C\î$Qâ,‚Ì~ ÄHMË:T\zO+ ei´«Ø*ô²;ôâ»Ü<Õ”›óNúúõšÏT‘¸cØ n¿ú èà!’9Þ3Tr^l¼Š?lÙL«üÍ ùxŒzv#ªÔíƒÞÁó­Ál44 B§÷·· ½Þ—Y®Õ¾çÉdê UöA~wò¦Ï$ì×$j£|¥ïMÐOW(›œåb^1 ç(¿œ¥9j®ûwã»ëW7õ ÑnŸguÕë°É¸‡æ´k­{3)ÅÿšA‰ª˜Óª$Lï‹’j—ì•ÌìØ÷I’Nau¾S‘E©sÜ¥¤WjïºÖX¾”Ó¶XnjÍÃù·q˜7KI4ZF­0-ÖªCѨÁN1ƒÜ|žBu”š$±'Å!¿WÝ"i#E¾…Ö{vÏÞ\°·Në!6,:Ÿþü©½Åi…+åk˜æÞ­‘éNý.¶~àc´šÆük.Y$=’” ƒÕ¡'¾!MÃG¨!¡¹B^:Yœ™z=2¯EløsveÏþË!—]©tsèÑ¥üà*Åô’Ñ¡mgQ`@è_²Q ¨6ïoûîC[lïžTûå /x™Ú»MAX=X}#±ƒçuŒÓðyŽøp©é_ ªîœâøªW´ªªÛ«(½Õ- »U¶ËÖRæ*e2ëߪ !=XH:5 ¨Ä=Gª\oä§t^na†ÝW£oÒêBÑmÂÌ #[ˈ‘›Ì° ’øJß#Iò.%LQJš–jÅîü¾kfwwoÙ'±è)Þ(î ÚÞCý°Ë0Šj©‹#N…‚ÐЗa•åýóç5ð¨Îy#ð9c8yeèqUèvé¼X¤áYº\Kœ¿ø!Qb¡ÌûóÜ‹³ú¹Ñ©´™å¸Ä7áê;"ï›òlT#Tx´:ˆàD\#“¡tê“ý‘¹¹ílKMP!ðvoährü«{èdz9®D¶È6ôÂwˆ= ^ˆ‡ÍÚ°ù†°T/ÉÚæ(F>s뜱ª& •´>úJ³leJõ þ¸™¯9Á½)0Ö>M®Sùz(Ú¸°­D÷€¢ãUÚÄÈ–44¾ ¸7§²6v†Dݱ²E§%a†ã̪Ù@\öe$±Iz{À úմɵ»ï°Gº…k‘8? «¯MŠ<ˆr/äåì5_€L+ÞÍek™jHïã§ä&ö,pÇjó–/C¸hÀ˜a¯¸²;)݆±™ÂS*ˆ‰MCGÐaë(±+P²Šü¸Ö¿¬Eç‰èö€Gб3Ç^ÆÕ®÷”5yA+å`¶º¿ñMÍy›©çÉÇêÚ%dÕ,Ë]ô]Oog)­, ªïIUòŠ„#‘b÷Óˆ”m|R'¦¬„ܵpŽ[#wãOÍcž‹Uoü - 'åi†ÚX†㸣~JÚûƒ£‚JÏêá÷·ÔüãP tˆìºÉÔq¢ÕÂDý—1ê)ì¨w?¿¡P÷œñèžò¨³pÃw”ó·ÎÝ«UgêÇ·”­ýÀ6jâ“@)Ì*§Â$ñ.&'ö< Qà„¡2:Ñ‚wÁ±5DŸ$²FTGwQÝ„Q1ðPkˆ™EVT ò+ÝoèVuB}mÉã Ÿ {²qP5[ÛŸdÅô±c´ó,#±DÀóÇ•N™¤Ç뜃e7m·… ”®Öû4öï)kóí~Zéùˆ¢¼tvf/vUÈLÖÃJì×&X¸Èë:œ™ŽQ$ì¾LþÒIÓß&¡c°Nò-ƒÌös a“i Œvª¢vÑG×o½’_`Ìðüó^õè-4®|—Øñÿ|åöà‚  M™Ô\•Sû¢ðóº3+‰V›Ä>²/ÜÌ[ûLgòZ_G“ó0F$ž‚“'lM~µhsIZS‚üò.¯L'–ó‡ÙúéB—øû‘~š›øòe¡NQD“f—\£³ÆºÒPÃŒ{gUȇŋޢûÓ²¹•!b©zî»2v]ÖRÓl¡’ØM]Àä.t'G§—±­*ãu¦Gš#q3fFr4rô«bPÜŠ»'ûа°t>‡9"M´ÑºTU¨¤ -¥Ö¦Xd³A âˆP²i­‚H¶¸F’s–xéËqV¢'<úቈË4KÀË­(HùÕhY¼ù"ÆÔàÐÒ&lž™ –ynŠfÛ ¨§†-A‰GnÙeˆ¦æ1×ñ×ÜvR[NŸ¹ð¬)íÝ \…ê‡áæî%J§&åæ^‰çáÄ„Úë° ¬­]"~á‚ $ÑQâ[Ê”„ù8&Ã,˜ í×Å´t,¸’Ps:ï„ûhKD:‚Ò¦;–­,¼Åíʶk$¹;ËëO,)ºÈ¹m(gð£Úre G%”¨^B,:üüRllº…ÙÒ÷ëÖp:HvVÚÔñ{¯q]/•h—ášÏÊ!Š„úyÄ¡|~Öê!Fxª†ûØÙ^¨–íÌôí¼Å¢µ`c • ½ÔÊJi«ÿ³ñ9'·/Õ€hD ÂúÊ©Šmå9Y…IÔ×S3K/Ý׫ü.¬Ùéô?­È©×VDý•{oÙ²‘j|r?'_êê3 — õÏycŸöW(Ûp\yO~¤S$ÅÊhÃ^Ôòž@9ìOú%î™E´¶Ã"cqP¯°·M¼ȶ䒛6Ó*Ü%~VÈ$¡ñI¿WOã×M}Fd| UqRWâçüŠúƒ˜h—í*þ×ÄÌoÎ{–S¹e—l IÐqÝÑ´ë¼×qeYR»œR§“[è¬Ú÷†” X•–‚$ÑTþðÍ“3Þ>þ†~¿Qþ:5„Å´bfêãd‰‡ödÃXÆïiM²~~[¡´þÇ‚7{3¥S¾9:riDÑÍÌÕv9MÛª˜Xj+’ ó¡lšp¯×°;ú¸ËÞQÖg{m/ÂcfŠéfBÊââÓ@}­a?Œ¿Í4³"eÙ¿wKøfÃaÿÊäáB¦æ'6# C»6âö çñ‡)n_ß¶XžŒ+X£k—T´Mª½l8é‡e4DUo[±vÔ¤¿:>2X}ñ,¨ ÐeJÍü`-½µÜ!váþÚV=O8Éß_~úê–gå;Údf\VGøÒP¿êEü»B–"ÍFë|ÅUu1lÑä^Êk$Æœ“ýDºµ¸îìIþ‘þJϺ׺p}Ý»Šô)LQC²¼™½ÒLÎÐa¯aÄ÷j—µÕXÝáaær¨x30ôÞƒÛ”.ÆöÅjA²‹ân§«<­«íWw.ðC‚âõ²™ãU‘XÎ_3´Ã²Ÿ¹qóÖpú¸¥ FÄ)i=Ç›1Czš Õ|ˆØÝw^¥¾¡@zÑ6 8䈫ÅlâáV|C¿³Xä?QŠ`;i\šâÔKd^GŠSl}g]íXH•å²h›åMœl“‡4Išê¢S¨\c¶›FÈîþfA${Ð6HWòr»EíDd‚”c$Ãc¤ÜF4lxÌ‘63,àkýèÕà< EÕÙ¿¬_j s8x¡ž¥*aJ¦Ã[ô¬1Ë$ìG¼›Ñe³B&"Á º<äF#—âí%´‘4×H$f”(m³¿þq¾ì--y¥[¥R42½¨àŸcžOŸ £Ð³Ïè£Ó]Š”#_Ý·sõ´¨I7ª©KU©rgæm‰·³ÁÆÖe¦ý­Ù LÁ<çjCÿ=–ØqK%Ò{ãî)WÀ tSÑ"©ö7ç+n°v›Sâ&Šooš R}ÇH=I¬¿ÕCÓ éðfÚ¥|€²ò"ýTôñŽ1|]".–}2oý+J¼"ÝÍÇKž‚¡«òÊSµôcÃh* /~Éþ‡©ÎPÎ’„Ø&œª˜ƒö·IŒ)m{ò½¸½M†Óš ìØDÂËH ëˆ/¹%pÅ1x®±YñæKÏÁMzÝ„HÈ0˜ÌÃܦ÷é´ÉóéFQ‰íE?eн Õü#Wn‹¿6´†jkv ÛÁ4æ4î¸ A¼ÿî|+¬Bí¨!cð¶Û_%zxd =}¯ýºO0ÛÍEZD/óäÜ—E¬èÛü;Þgêo·™¨öäFRòuWÌ_Šu©DÊf(-k’íw  Æ«±”™  £Wüúsµ]OŽ¢°‡ƒË‰‘^µ·R~œ‘xs8ƒ¯èX”¦Ž‹á×úé™ÒöÎt¾ÿ³9‹æžâZ¦AÎŒ§€ÓâãÒ™£û¶8«²Z”µ¡¥Í²«ÓƘ¶±œÎá2±)M}ˆöñ…V!ÑmYmšÓl`»ç©/î— ¶¾¾Üw·k23³Îj”./Â¥ ñï47l¾Û1¯X3¨¿SolÜ!{£¯ñ–o|‰¨áo\¢Ÿ<µ}Êh¼-=±êÔoá²R鬜1ɪÖ2ßNIÀ2Ž.*&qÀc&Bu®ÑV¤¤}Jõ ×Ô£½NÆX{‰€¾_T~¤aE¿Ÿ¿z , 0%I²Ÿ§í¡f*GPdø—jWÉ—J‰ˆÝù\ÉŠ¸‘²Áä u6còbÕ^ îÑ”©·‹û‡aÓL¶>+Ien:³XØ:sÞœ~>J¬f|+¤uFýá/©OáÞ+§]ý'-öè w.:Ž^Ý¹ŽºÞÜ«öºntßaJ¾h¢nÔóZdô ëÐ!j¬½C°(9˜¨XoÀ»" †9/û{ô3¦q.¥Xªá›£vš³ÆÄ,~1Ë´éBÍ]‘¡O‡ÃÅ! j›kÇ1ßgCdž,Xâ*§:¥ÈÓã÷3aHG8fMê´ùN¯ðSMºµ’ÿ%—4vR7‹²©6þæ¿ÑrŠÁ§À„À,‰’'£’ŽŠ;ÏÏëjȲÿ¢ÁèuÑÒ²,þ¾¶}®c*Jàµø™Ò©Kö‚èNÐ×07Rߺ"êW͹ZõèJIH x=œé”Jc­xÝ™ˆèñÚ‡á>¶€9ÿ£ë›È~?a ûϪ’N,NœïôO‡`©­½ÓöêÚéØ9¸Ó8Ü–g)S€±Ð ç»§¸4mü«åÛs;½ä@;h ZŽ3ª‘åûWÞfª4šW>±)3’è Ѱ½FÑ%Ѿ1ùOÍ­Ób  îäòƒ»ü‘t8XWƒÊïÄâÊ”¼ùJWK(¯ƒšÐõsÞ‚>¬²¢²Òí(DŽî¦¨Ñ)¿SrO$auÍrbM—fÙëæU—ûÆæYÁø( „–&Øó2uÛ Î¨ŸÍ{7Lôy€_MîŸ\cç"þ†&N—Ük{\y:6õ¢W_œ£šéY¦ô!Ì ¹t!Sx…稇'ΉpHˆ®a_zïºõõ%è˜èŽGÍ^}3¨[óÑPpÆ#ÆJH1Cj¨Ê#õ.:oÉï™°¸pi®nÆG6ªà{ó1 FF8:½ÑÁlLý!%¶iåu$oM'Z­rÎo*ŠŽÓWÇ•ž'¦þdju‰AN]P-jSh¬é==¨jø!¶m »„0uö‰‡•íÞ’H_ñw$›÷7¸˜ô‰âãͳƒ¿[Ä«ð ‘ÀÀ/ѯ(Ý1LÏöPsÔ†6.äö /zŠmL¡&XÎø|.þ*°zŸ7j5`E #Oˆº‚›w¤*)k‘%å2sfEóqû&c­ùƒÔEÕ9;%‡Àð°w® *ÅkÿûÜ”5&úýn ¬uËIÊ ÎOÆ/”Di‚nµÙÆd^±¶÷o»Œà©¯7<±†Ñèfåä-¿¾+Ï`gjwF¹âÏzlV'ö•9=jÛÑÄ£’3 M‰¥;n[å6ÁPÃÊŽŸò¥Â}÷pžz$±a‘'új½WA!¼ì6*H¾\BSÏÃ/­òÔ•ào¾šéw%CDt—ÃøÞ·¨ÐÜgû?ÆXjø^a=ŽwÇ®nr©^ÕÍzCU˜0 IØÏF ï×§s óé¶Ep´cÝbêÓ¦L npÄŸiŸðÅVt ¹¾£ô2ÍG/ëWL÷@mšh§±ìâ•ՂО÷·9‘á%˜°ŒUá¬üé¤Rk!psKÓ'† %oè6­ ­-Yd1#fy@e&ð–,õèû™Ì”Ûîl±¨в–™Lºy,P4xÄâ~»ÃOâËògÂlÓƒ8P Ø„œh{x? ða“ýÇ`³ÉË¿X|)ˆ •]•àˆÅ_ˆZÑÚý¼#xbÿÝ9%÷\%³fV¦ènf£-â1’ð r’¼DöþãˆÙÜÍý^ˆYW¬ê*3Œ¦Ö4çêŽ'ä•À¥§©>=ÄØÛÄÜùV’ŽžÜrÍeu5®wú-¬À#¥E¿îm[‘ünlÆÖv¢R0áãi›‘\Â~^a&Ùî…yº]Í¤âŒæ¦¿œ³‹ÿð3àdõžDHHK"‹à~œš*™¬´»»fíѯÛÄ$ ¶Ô=·{9¡A«ØJ`‹ôåA+YÜVµ«OTL÷ׯ4ä,<“Fí7 ´ÙhÊ'­çˆ·ra9 ¦jªùi0ÁAGñ• ½øç7ÝžMÐ5 guh¹h“$Õb4®²ŒOò›×¹‚¯­ì¸*ÚŠãüKH’ÕÑ\K#<‰›æõ]ç~*1;ðÑäðâú–aλÿ~¹3«@8’ë½rKfýYû±g&©hl¸‹ðFÒqfŒßUê„%Óé)¿¿Ÿøí+#–ûŠ“Ùéôã+*–ËÏ˵uÌi*ª —kKóôÍÕ²PéAš¥ªJxSd¾±RG&å¬õQe’Ɔ4©ÜΪ©ðˆAýKïòaƒÎ6–q†£aø½ˆ6Ì;²”©®¶ êK^ûòÞª›èMåì¡åT®%ùeu°‡CÝÎç|odf‡b’Wƒši‡QW&¾brŠ1-oà¯I«hà™©|{¶8`Ikػݞí+‚tòM^®;PµÔU/ö¹íOƒÅD×¶YörFloÚ Ád×ÿ@?*8IǾ³.^ò%›ý q¤D±®‰âÑÛqÆWÍ" 8¿ŠÌÌ~0usC‰÷å„—F§ÀP»FëJÃ1°Lj¼³°l—‡íg[¿|­áð«/‘ŒŒ®uÎ…ÉSã“++·f·³¿KDý.Zý¤G8‡QL¸»kL¢-ºOfTÖÈ.ÒG‚¤s÷àÅ‘L„#ÌB{cZ\=Ç8—Éüpœ>ÒOž¤>QN£I¹ž¼awñ;VŠÚ2‡yãÎÜ´ûh—åPaÐW€Ÿ Óz/ªù=mÒ€.ÈDú"¶üqX‚ÊæIÜê3Û&1ŠïŽõ_1h[Ë º>1ï:ß–h°h6!#̯A_n“_øxVSèXL®ðÞ1lVHå6µñßSºëì7ìô2¢Û_«ö(¼¤m*Z&BD=×¢lý€ºWfüj>Øên°gYy³ÏÜ“‘òª95„>Ïñ¤CÓE-´(ÇÒ30CBË·‡G\ºxÚBÝ»ºk)‚X[‚d¸œõ±`UI’ð—NІ¶”Gåçc‰«Òù5“))€h5›ýCç£éö<ù,¨ òîL¡zßêÄ’)6bœ™ …š»t qÁ%!ÖŠ<õhÎ[Xöá9q÷îòŒ ¯û“lTÑ.á¸ûí×Y¤%ÛÒ½í22Jë}´µvÝÆêO޽œƒT9y¢?‹×­8Žö?d½Å“Ók»ÇÓ§Ùxá"x¹«|×"UV¨Æ[µIV8É_’üTVÒ Ï“ü´„4«0ÍŠ#œBrû‘ØtìOÎ ý:n®½S¼Ù¸/pu;ª¬N›Ë ($~"ÇíœÓ@7z;\{|Ï£²œ5¶Ü-ÍP€ÀZ£!‹BÏ%^o–ÝS56(^ùy; {HZñ&÷-¥GíSS´×ýl–²óìé'GKâÖåU 緩χ~õÇ}ÎY×¥Q38¸LѼoØ„àLpp%ðnN+é°Ÿ³ˆÍKÙñLÒîÓC¢óy¾†…Wf¡~tv‚ü¼â¾×çnˆò+™ }Ë=RϧX9áûy@‘ºÉT?­0$—¿‚I£/Ù0“¤®ôá`?QWöÆ„ºÞ·Båº «õèŠóA^†ˆE¸–ÂÈõw¸ÓÚÝç «Õ€»Ó¢²(%¨æòë&ýti‘…Žˆ¸ôª‹@ú¶+?lQÂû"QÜöäújÄûϸ0¼QÄl•ݬ9¯Z![èñfF?sh€’¤¡ÂðU¢ç^3­ëòòÑ’mM=l ]É~æžôÍšÛ EO`²´XH¯» ¼9?ÈX=V~_ö&!ZÏõ°šci‰¡EÌ'eq†¿_pu¸óÊwÄÐ㔓ãÎõƒè… V=ÝáéM• „‰ü2Ýe»3EÜóÅ|$:Ç—òuŸ¼fQÞ#OàûŽ 4Ãä(ãÀ…–ƒ²î|½Ê5ÄJ·<5÷Ó¦öö™¼%!ÙÃWÌhúÞã¶­V”ÿ‰4‚äy"3Á%é2+ç9æü-\¥Á•;ÑF¼%b>L³”f\èP ¹ùTA^¾$®x¨‰½q07[.¢óÑþob™ Ýù‚-ž­ºOp‘Ÿ0Ö ¯ƒËÓ S щßpU©s1UÖòw­´¼gàîû)¢¬¨®Þ`Y‹ªi­!Ýð„ëðVO¾NòçÏâ#${¾Eª|ùAþk`@qF‚Êéxñ™LÒÞ²ÔWq5È]Á»ZµÑúžt$Ö¼+óx ,øÄ"úÜüŒxdã7;Ï瘧2¡R×c×/X1|¯Õ†&>>pàùë‡81fµþD)ûÉä39SuÐõ™ …®™þ[bÃS‡)OÕ,Ù;e?Áöl©”¹7˜ßQ„#3÷ú£]-<›}wú5ááÆQ“[‡7`?ÖÜ%—Ãx!ç»…³+7ðŠÄÏ‘çwm°ÄÇ&E*NšŒµ²‹„Ífó…–ߺ…´Š²Í©¾RP­=b[áÞÚ$ Ü~«¯ÐÛ\ÆJ05ï·¢¾ vñ{½¦ùÑf‰?+€_ sÿ‡ÉYµ™1Çg ±,™ .JQjJ >/•ÇŠÁuÿ§A~?yF66+18*¤Äì\$÷ùf4·ï·*|¬7²´É¨qkþÞÈ(M¶ûþ°3b„SÇ㯡 ŸÝ/ô[ÜN8šÃ§¼­­_{ø±«ÉgñÜï½ê­1ß¼´À)v¯‹’ eyE?‡ëÛß%ÔŠw4Œª׌G”3k=o÷ù ;ß¼líå@ú&^ô^ĺÓß–ìAgq“?Ðø)¢aB×H¸ßÃ#Ë0ïcDS'¯ÛfxNüÊußè¡[,W ›3½Ïåäm½ÊÒ§ ‹öí"*¿:f OÏq”ÀN’V°rs;aú2ØÚÄÊDN5ؾÓB¦å¬–£ Þê0lO¤y—¥wB“v¯>0šxv¨§Î*‰öR}Ô5ʸû™0öÀF:÷s –ô “Ï;6)\»™º4Yí„r?Z£¢tÍ”e·½µF¤[Á²Ò¶D9¶VòG éñŽÉµ-8Lvt‹?Š·Æ*Ê|/mOh¹v¹®Õž+&9€,ƒ{¢£‚JáõSpó¥ãA±¸´ ‚îÜ+ýËeº¹Ô)…‡ÚЧêáõ$QÄz<ï6ŸFüýŒQ³–ãmS£ƒï®Æ Æ/޼uðáoŠÑÂ#æV±Î™]ð :¿zDÜKÆ•û.U¤ªÉP»˜¥(Î –c±)ÚÑuœ礠aârÙä2 õ\T1N@]K–U`Å"º2.{VÆuîSÔ›yôž¨pÌŠÖŠÇËfïXã2Xx‰úyõü™),2àm®‘¥ 0à}î{ˆÆ…˜‡aVì~*æË>OÈóJw‘ûä%í®sÈ•<Ò›ñDÕþ;`fžk‡ÔB°CP†0 òufª ’œ¼ªá½žË³¸d—±tËŸO\Úå°"*n†×=3|Ö ±!ëÇ·<~n©o¦= %Ù’ømµB})™"òM9ZŠ-üuÖ^Ú~ˆw+ÇÕ5ÌwC ý:ö助¢ý03îÔQÛ»Aþα­Ç.z¸7x©‡>GyÐc?o~qO~e-›4âê»LÕä¹gë¦g¼0ˆvr-ä„óaìšRl6výuÊê᫵]…Jˆ&zÇ5É[r:&B§£eª”gŠÀÎB4©ZrÈ—bßѹÙ6à™8ZŸùû” ‚·üÚõø¸/¡&ÜŸä?ñ}ç•þ\x§ý¥M;ct­>ƒÁ.ȰÓzé Ÿ &µ±üsçi‚¿ªlïF°¬æ3W‘ýµ‰8âæÿ « TߨH¡îÀBµyä•e~Çqò¸íj_•PÝÌë0&½G@ÒD]b'÷]º(W«$­$l64³ýœ¤… ¸.ÄÍ”PÞÒæ’<¶R3 yéº?Sâžê·ž›]ö¿ùÆ’ºwÇœA{¤Hž\#Çx‚gó“‰Ý} `=mlÃÿ˜f‘ö*'ÑPL¦™çÛ"&F#L®£ó6ë Ÿ:k Ÿî¯%x-'i»0Mì%¸€ ÞŸ´øÃFW›yá#…Æ>ä›°C¢¬€È6o2Ôo͉‰×UXyáWpù2Ê|ÛjÅçÇåzV^ÍÁÇ÷üyMgp•ôÎüNîÿ†Ó[«º¶Ë¢$íeê7ñ2þy\/Q¯;ddÀsÈ4ƒ’¯—šýæ´xÒÆž.'}É«¿þEƒ³ñ°·Oß@È WplœÄÞ3ÿ–?c÷™áYë I‚+ŠKôÖE¡ßsáñ9Ó…ÄM$È|KtéZñnZ‘šJ+R TF¶Ǫ™™kÓâƒ|¡óóT¸.e£}~žjQqð³íü“¨>“íEµÍL˯Kдwß2qý¢óÏ ¨¶¥<(,ðhÖ5*£DžÙ`óL±ñs»2ße{lú,QõK¿ŽøÏôйötïÄ¢´[†åõ–þ¾ŽT¬r¬Ë–3m‰ûï1õÜNü¦›07LºÁt¼L˜0eÒKh^¢ÁOKÎŨ q·)߀Õ05ÀJBS˜G›ËcáÔ¯ÁpD]Hy{:ãecúÞåéîŸàAuÜœá!¤#ÎZ„͇jxå©Ý¾­BÀyÁîØäL{*ÚP¦ú„!%‘âŽó _$ÌôÀ+ C69ýÆf©gÃQ6›#_Íu¦H±¬!`R·Mìœë˜ë™coÍp~ô‡˜AÝau[O¥.lãb˜Áw‚sÜøáX(1Ÿ†‘3Üe©L µÆŸò,½•þ·™"2!bBüGø|‹¦v¿!^[Áp[9WrTié_Ç¿ïcÏO»Ý¼þˆÇùïs0˜Ì;ÖS;"¶•HuY˜tlw»î /Ƕûd¡Ö‘¨ß½ EtqÕ/Bç`ßôÍ=2ÝA‰ûs{ V=ÅÔ«v§ƒü“+i:Ô˜‘Ü~Æ~ºâÑv¾[=vQ }þÍø…úi0mŸ…1!i£ÍÓ˜¦h?[9.µ½ÝEYõóŒ—×ãï»ò;÷n½-ºœ™ˆð5—%ýIÄ£!©¿ãØYWØ_š·¾øl¿k^Ð… £O>Ù±àù޳1ä‘ Q^ŸOMZgg\êGµþ <úVª¢ W3!Uÿî(s¿¦W€V²"¯ÉE›æÀÖRfùÉøÆ4²•~Ûi¹õÚÉ+”+5íȦëXæ49̵ÊÓÀ·È·–š†™r"ƒDäU•m»:þ®wϲ  ¨ÉRÚLN<ï0¨BœÌöTbí¨Œ¬+>¤Ð,å›rStJRõŸšuÍ’[1×´)Ž3oá΄6<¡-ÎkŸsÛ¶õÄã¤gbïÚ]ÙmPÜof;/ YºÓA1"ûeÿ'º¤²î¸p‘ë4ÖÝ F›Vø÷ÐCÃP†ÖeúØ~^ãä…Dc 6Ý$bN–M ö×¶RayÏ<äwOfßw9_æ»ÈÃ)kÜn$öV+îäíAda‘øLU–MÐoõ~ç¬twú8yÅNþŽÔWÇ‘ýD}x«óy5ær5s RÝ'‰ß̉Ú)–/îD«ßõÐ/bÐ_MèÜ2:„6PnFÜ„¯) ¤óµ\+):ãT…Å5Ú/4I{žé¸t/µÂ…á(d˜5ÃG¡#A°I‡è„ò|/¿]3M]‹r‹8Uºì4s3%šb%|Êt¾\ùH*$Cí±•G»¸;ڦÿÜèNtå —kht ƒ¼ÏV-TÉFðp0ª§°¢Î¸²“Bì3²ŠUÇ4}ýHàF^ÉßynNU±Sä5ݦëè04,p#t®ÝAàDÓM)§y¿ñ‘„Kõ¦H1ËëE.S¦ËŒ»¨ó¥€’ð,нª/H*ƒ8BšK¼QX)89j*´%Ž?¬}× óÓ ø+Ÿ•,O~HJ‹}ž=Oõc]_å˳ü\–=?Ì?kj|'xÔoi)È)Pÿ.éGBþ”w–bÄ9Ÿs.ü¤’=yŸ·…¡pIèîzTQÀ%˜Å1~EéJšÎzFÁ&Á"Ð6u}Ü#Bª›xqÎèãv=B¸2,h’´ ÜÁࡘ¢¡nÀÆm Ì‹õÎNAÛ:½¯´"~Õ¥Õø{ø¥Æi©ãÒÁs°ƒb‰A0n{L±;ßJâT!-n`%F æn¾Yq~i8[eß äV¨¿8´k¡FvW4|dÃÏìZÝjµÐÿÙE¦·fVûÛɘª} ¥kµÕÔ45Æ›«h‹²XÏFwZ﻾·„q#¡d…Σ†>^s6TLmNÓ S!w±:€ÚÅÙ™)·Df6eßá%Zíœ"VŽ¿Û¦˜$ÁTÇtñ™¾ÔPËf‹“@*©ºOLÂ6T2ç° Nß³Ú:|¤ß\ê–=8pmp”ˆ ¿*;SµÊ¹äŽ)»zØFžŒ–ƒih«!WÛìu]º¶Ìgàc¶‰nÏ¢~Œü‹ANšsÇ¥Š{lÞ߯˜5f©9;ßôc $¯)tý¶Þ`ËáT/s’¡’óƒ=Àa`é¹x.zl³Ôø¿µ`ÈÛülVü㸭MÒ6òI:\ÒeÄvÿ•ýšÖϧíÒ[ü¿…˜„ÛT)œ\É5R”¯&zóëïÐ]c)V¨§¥„L†2"Ç8Ÿ8­=,*Ø8óÒÒNcûÿiËÚ}…UÌ•âWµÜ ¡™s…N;ƒ ržH€ÉáHœ‡¢o…Up¬§µb²’òÌÍM¤hI5ñXó“¨ú³“åPP-`PUÜù?A”WòÐb%ÒSåH¼Ã›À¬íúl?« -és;¤»qßbã3È66uR&Ýžçba¢9PVÈàõáx-Zî·TEZC Ç•ZÍê´i2}H€4Ù¿tÎW»f<ï=êáŸAÛ©˜JEb˜âm‡Ña'zï—»uÆä I<Åe<Ð|T1ÜŽàÈÜ éÛ{1·2ÒzG¦ƒÍì/§Îy@“ÕäÌ]í’iÚ¤–Ì*(êm1ï)›Á¨ö^*óL½Ø-'h‡sÒÑpu\PäXÚå¶ÙΙ‹=Z*¨0¼kû‰izÕ.rk­€| Ò’r¯Ñýæó‡Ïv£7Òµ]È&µFT¦¾hßͶ`+ZáR¶ Èû øŽ.Œ‘îï%:šZ20¹S¾6+Þßñ®e:¿lÝ ¿¼ùÖI–«rA±`X¬\ÒgÑ™3ú#lF“P“¦®:Èß’;šù3…FÈÚk#µãIùëk;+ÎF#*Íb†ñhÇ)Ø’0ÆÆù}¬¡ÿ7Óf^8¬W-,³¾)FS“ÌN•“ûXäFÛ6}ö -¢‡W]€c!a`ÿºÀi«ÂŸsͲ#Ítgò"§Æ²\kØ:ù ×´Š!X „+1íåÑ}-ˆƒÁA VÐug†±êŸN$P{”I5~“)2¨ã‰¨AW~µÍ6ycÕ´HËkœ0\hâF]£öô<5]<²@ÍYa7”v©¸‡©ƒ®ÞÌ룹5Þ‡nð—$몜]@¹NSºwדFBå—žš¨á>ûö¸µ- ®õÚnè8ÁkÆuˆ–ÆÑ÷u\ص¿dÿ<]ùÄ*ü~æ àŒé6¹Fƒ-Ç bÍh#³éHy{•ä[Ìÿçtœ} !>ÞD#•§Š%õu6-©ƒ¡Ð4 Üd¡˜1O·zUó†ÿè å«×ˆŠj¶‚ÿþ|rÿòòoúóèµmfÍø©&z‹™",$bWuá•Ç.œœq ù‚Ìú¹‰¨Õ7þ{™xtQ¾7¶ž„îzxnØ¿¸x¬UIâøÔ4vfåÂ@÷ÆÙâ3žˆÉÎìÂ/;D .®WV.½ÙðÁI–^†#Þ«Ñj$-Ú,'ê“c÷YÁ« ‰5N óì–Ý5%;yäwƒ ËÅæ>¡„Êž¸²Í =”×ZãÀWœegð0¥f$XA]‹lBe*sBÔ‹qÉ0,X 6DYÙ°e¨ à©Öa²¤±Ý7ƒ°ÃîŸX&qZNGc‚Px/~ƒÿGŸe=Ö±K¤y´¢I²òRK¿"³å8,&Rœl6Ù;@󖺨<úÔÙî:¹ Í !W‰ÐhjsSQ."f¦2¤s˜ç³s,úÙ©šS~O«À‘N<êÖB2ׯ7ÈJÝ‹¶M_™i±s´„\°õ=3( ÇAVó³£àn@‡Ú¨]àž_þÑï'É"­ŒxU‘i|G£8.¥mŽúø"ý«¯‰Æ+0ÈSùS1ö°V¾íTA‚;ª6œÌ’Ö²ªêzÆ@±…äR®3%,xõèv`ÂULJ© ä§¸¨SYµöÏhüeEf¸à”U3[ò»è”<¼¨½²õ‹90A˜ßÈxð™¡5× ŸÞ>R]ݳ¼‘C…}½iºP´YM‡ñ^ &¬—éMÞ¬L€-Íæµ.‚Ôÿ¼ŸæÂo¹ü…¬{¾ƒô.¥ñ4Íp ‹Ø9èžróŽ aeàÔsϹ_^J ¶NEÈFÝûÖºOø©[ˆ?ÞÓY´ðpÂe]iûr¼™ÛZž—L5€˜y¿‰;š¾õòã_R?ú‰™®sk°.Ý°Þ +ZSe’"yñ_¬bŸîró¯$¶JK³a¹À?Ví õ€Jó¡–½5§ÐT†•H4ÓîPzNeûë^f(tœ¿DWŒ%’µüR ­ë¥U¥åbc«“™ájƒ-~¨²L?±ÅÃu×(9ØÚÒ] …XuM‹¥>®3ÊdDyò¼Y¬|1eèQÒ~1EÓÑ]õn*¦á¿Ö‚5VÏ1d®˜; ÎÅÈhc!>¨ÖRŠœ÷Æ^Ì¥nC‹Ñ!/±ªDÇ«Ž!]<ÆÐµŽ¢Î3iRãXÝà·Ñ¦§ž7Ðß ¾MWy"^l"‘¥5Ú5XlŠç3ؼçÿ‰³ïPžðE“w’¯s{Ýç²èAnÅ êÝÉZŸee/‘ÃùCM*°_«ªÍ#.²ÀÌÀ^}W™S\²íè…4ýav»mΜæ¬î 4{°ó` 4µdÍ¿7ÔGóÁÓC ÃëŽÞðÑ›Gëÿx̪y°ÙÑ—›‰V‘ò¯òÉ1§V¸Zà¡NúY„ q§;b´XnCˆV¡óƒ=p+ñuß즢ˆJ}œ>ç°P¸ô\¾8žˆmµíÕ O²Ä6Øb":‚5ý{ñZlþDzX”n‘8¸w7ÚúFƒ¬‰ ^t=0°Üô“¾8ÝêòXîàþe⻽ R•~¸ §'}˜QÈof70u@K¹ûqSÛx¹^z‚Áò|Àagyõïÿ3ÿ€X;ºD>P](1ÐŽåÒ”¾ Å Ü·Z¨ÚÐ#«iwBhö`sx 9ˆL†%Ë †ú%. À°–D}š"¿³Æ¸8ò6âŒr†=ÃkB¤5¡²‡»¾Ž\ÇðK_\V4"‚ãÏ7¨÷Ú‚×PWéóÏxÉøbèŽãÄ7>h¥ŸYý˜ÂõBSõÇMAYC2~«Ð°B„ޏÂ7<~IÅæÿiÞ¨‚4ØD¹{2Ö•†³Ö‰Ì¿ÆÀˆD› ™}?eÃÂÍCÞ=^P^Ið°ê~v=qL¨AÉ’ÂL´"T…yô9´fê1X:è¸BÍ Ú'Û}ÝZ ’ÓBñMÉS-Àûщ0d|ñ¨GÏáË-®þsü°PÑã—‘óÏç¶X3ÇÂfW nûU(ʆLæJ—<:X˜Ëv~EŒÇÔ|+IÈì šZ¡ƒ×LH Ö¯Í{ñjÛQÇtÊZ 0 ƒÊâºP&çÙ¹¿¢ÏìX­q¨è#4†»{X S¨ÿ.Ï~qš„™ÚOxèaõÕ½ü„"nGê¸?wG~´!&kaÝWÝó rNÀœòÏÞãnf’VX ª›oü.»²0ÌN¡§¶‹1žK—Á/©Ÿä\ÐÒæo, ÑcMLÇyÎ!gzãHZ»`:]ó§ ·Š‹+qÙêä>e9Ä`q`̃IØ«’e;¸¹ÿÂ[Ӛþyœðo³çWüq'÷¶(ÿ/Ūªlàx8·3äÚãû:Ùæú´ÈtCJ±É˜ªS¢ó‡™jÜ6¹·Î,iOÍ/í•üKöoÒМDkË·¹ü&õxrŸA„˜ngþ6-!ᕪí€]x™y¨*HP°Õ< ëO§În&›NzM‘—=“¨÷:½¤°„êPD51ãsy«@ê8p–ÔÇKïî!PÄ~Äd¶‹Ô˜ÞêIŸ@ìCgÏE jB9öÖèY(Ç^¤ @×$êög8³å™¢Œ\ï4ÀØG)‰¹'cEiàK¾Z,–„‘s d ò½µØ¦7]áÄ^.ÿÎ}ÔªÐÆ@Š¡A„ÐMO?v ;µcã;@‡ö”R´aéÆKÓIÖ”9®}yµÂO8E äÍ5Ì]ðr Š5Ń`J«_öTu{ÒÝ ÆP²…ª…\K1ºÖ°AqÌ&K(ªsÜÙÆÕIßUÇÏ?$òõ zÃFS}ÆìÊç³(éeä‹V²­aà—Zɨìþ-(„á&Pg¥oF¹‘kAê¿Ó½[ƒ•§khÿO è²¬òŽ03áu…å&`7½móîDZgÌF³”a\‡×ik¦MÞåËú†8[ñ4PÎß„ôNt"ä–ô"e?€Nl*ÏÂüQeQ™3èç8=|Ø1$FŠFÄlº7Ã6#<®rå]û½ðž¯´Ÿ‘)ªJ¬(Ú»4ZLoIýC€âk3úÝ 4ýEYΜ –‰J¤+¨¿Jà\Ç ù‡£Ï‡µ®P)&!žƒGõ}瀿ª¸à6š–ÂRæl·¯ ë/Û¼âŒeÓÄy*é’ÏÙòù³ôze‘Oš­ª^¾—òk Xµ6`ŸŒ`ÓpëO<ûöXÛäL]H©`> …^p»÷ kŽ?©Ó|±›gŒž'鵟e-‰À'²×¾ƒ)|¼D·! ,¿Ê‚BI§»Ix$¼ ë>‹d¦æ¦ýJ?üñâ;«ó"AªÔ‡ Ò!,¯Œ+’ /`ÚŠŽVz=ßÊ´7-dÞonêS誖L-³ ç‘çôø˜whøZ+!^"µ‹´zµ/Û¥ÎCú¬…n¹^“ðHN® !gQß«úGZp×XV+Q¢ªm¬÷(u¡Þ¼Ê‚0>Žcr“<į¢bd’GÇr"![LÅEã«f‚8âHÍQ»¾“'¾Î;(ªtc÷J"ôk·Ë;ÓàŸ­Z;‘ߊÝÿÖqó¬­LZ¹x.dùN 4áCÃ¥ÔgŠHj·?lFŒÇª«G}û€µG¿…@ q³XNGc)K»z°©ˆ¸^qu³ä¢rÔ$N€dfJìkì5—ß`Rïd5¼Sú §}¼ŠÅêcyÊÝ:ÿ°¬=ÀÛ5vèˆÝ›÷ê^tñ"Š,\ý4UtÇDª¢ƒ*J¾ªI,Ö;1ù»Ô=ýŠdÓW@írM€RYðÞ¬R@ÎmiÝMšó ªñÿ *aÎha>}ÿ ãÛ-]ŸüIß3Ñ®´AKÙ®æúÌqÛXOÖx«K “…mAPÓ?–fÕóx}Ìò 8`25­LQÜqµãBĶ6~a€x‹e5.©{¨ïû VJ€§„ow<÷ejÍoZ*%Y.ÅdÕÑh§Ù/ ú™‡,êœzhžù(GïšE/œ’ì'Oc#jS'9®1]ê·øÎÝüÛod=”“?ðþGJWbã8¹‹]­ù¯û»³èûº’¶òSŒ‘>uì%¨=&2¡W&-“¡¤–iLUT‚se’¥ð§¢bb°…$ÔÉŒ¹ˆÍ®H¡ô‹a{1ÿî2ö9Çžýû¯#§NI/Š}—6駤mC-û]"‚¹xi}Šj~ó¯èüvHÿó´öò¤‹¨¬züÇ*{%¹i훿³¾ú˜}²M1LÖ¯Ô·­´Åt6î=àfÄ R‹éF‹À Ôù‹iœxSšWt?3¯ki µ6ÓRÿ8=øþ˘ð%]O È·Ã#M#Là–„öŸE ±ñ•ÌrÆ&`˜Žë3¡Þ@çôP›$‚«‡:.Z´´uþœýkÛÎ|K5ñ©ÚØ›mw²†…˜ñ•´Ê‹?Êã A2¦j½ÖÛ¹5bü¼rQ?UÞÕhÓ:b<ø¿‘±$@Øg;ø\ü|°hJã–@Š$OΆiµwvâÜÌ> mÃ׎¬œ4u**KœKGGpܦËbdaU5{"Hw ?h"T'A¶õ¨Ó ÜïˆðnÁû}KììËY½‰-$x-<ë}¨ˆdÙ‘e«:~€Ýž^]2X¢ñûa¥iõºs? g•w,Yaosü¡ÊºRnæß±ûk'XF9í¹ÛÏòãòß[é3ÁœËÈe÷Ú)¼¨ùlóÕCÐyøeì<>ôáoâZY¦»’›rp…uA°2dËû˜´î8m%—ñ|øMŒ+ì2FQZ¢ &ººrñD¢ ž5„8(kèÉ}wàˆ\É&}Oºÿbg’ endstream endobj 399 0 obj << /Length1 2028 /Length2 15138 /Length3 0 /Length 16374 /Filter /FlateDecode >> stream xÚõPžÙ¶ŠânàöÁÝÝÝÝ]~ÜÝ îî\‚C‚ww îî®—îÞg§Ïy¯êÞ¢ ¾1m1ל R"eZA;# ˜­3-#@XV‰ÀÀÀLÇÀÀGJªbál üÇ Gªtt²°³åú—_Øhèüa1tþ“µ³H¹X™Œl\Œì\ &Îÿ ´s䈺Z˜déRv¶@'8Ra;{G 3sçSþç@aL `ääd§ù; ht´06´È:›m>N46´(Û[=þW sgg{.zz777:C':;G3>J€›…³9@ èttšþ’ 3´þ-ŒŽ bnáôYÙÎÔÙÍÐø0X[m>\lM€Ž€³Ê’2y{ í?Á2ÿÐþÓ#ãËý'û¯B¶'ÛÙØÚzXØšL-¬y1:gwg€¡­É_†ÖNvù†®†Ö†F7ˆ * ?ôýG“±£…½³“…õ_ éÿ*óÑdQ[a; ­³Ü_üD,Æ]÷ ÿûZ­líÜl½þù6µ°51ýK‚‰‹=½ª­…ƒ PRä?&¸?63 3€•“ tÝÍéÿ*®âaüÛÉø—ùƒ¿—½=ÀôCÐÇÂøñÎËÉÐpvtúxýÛñ¿##ÀÄÂØ`4³°…ûSýà 4ýܼ£…;@›ácð ýü÷K÷c¶Lìl­=þ„ÿ}¹ô‚šrRÔ þ¯KHÈÎàEËÌ  ebe020³Ø?>|þwC‹ÿ°`ø“+ikjàü‡ìG—þ‡°ënŸâ?‹A øßµäì>& ø3à: ¬ Æ¿ÿ?ùß)ÿÿ¦û¯*ÿ/þùˆ¹X[ÿí¥øËýÿã5´±°öøÿc^]œ?f_Öîclÿo¨:ðŸu•šX¸Øü_¯¤³áÇÚšYÿ·‰Nbî@ gcóFå»ê_ fma T°s²øëAÐ220üßÇV[}<Nóø· ø±4ÿûHQ[c;“¿¶‹‰• `èèhè÷qňàÅø±†&@÷¿'@Ogkçü‘øç0µs„ûë>ÙXô‚™þAìzá?ˆ@/ò_ÄΠûƒôâÓÇèýAlz™?裦ìôQS㣦ÂÄ  Wþƒ>˜©þq~T1üƒ>ªýAœzãÿ"–ôñ&ü‰þ«¯ô&ÿ‚Üÿ…m£ÿçRÿ|È1ýÿBâ™ÿ‚®ÿ*ð—ßÎÅñ_ù!fÿ‚ŒÌÿ?„Yü ~h±þücó2~P·ýsÔGl?æâ_þ-v´$Ûý/÷7û?î©ög÷¯f0~ûuÆrNÎû ]ÿbðîôñ,ýIø¨ù§uëMïlîüWw>8»Ùý+áCƒË¿à‡|×õú£€ÇÂNO ã?Ùÿkî]?^ý¿ß¥¥øü÷¿ Ðh ·4ogÌdYÔöP#ˆëF»;Î;Cº«žFIëµäØîò„LY°îx'˜<Ô²²-Jq+°LøêuÜÜÚ’¨Øúìý¢¯4µÛ ·8‰Ñ?Qx,X߇‹G«"°çýêà­æoÞ Ú!EúÍÁ…I!íÁ­Wܽ¾¯ü÷hÈü®â^5›4üKù4m´j”ŽÉ,ižQö1”3-> ê…;òìíÝ jîÄ;¡T<5œÏI4s‘—ÖSÌãœçj… “S'öl-,|ð[ÔÑ)2/¡ƒ)̯Ң•þE÷fž"Â\DšÔZº¦Ìj ¥HÛÆžZ×Ñ¥_Œ;ß’Aä¸ýh;‰µeŸõ‰åÑ«[õ#Ñœk™­€ø¿L…VÛîÔºL-Sñ–9§ëßsìD‰µˆ9ánc«\Ìy¹…Rnçc…§ñi’Ò–›Ï¦Øê/˜¯’8'tV®Â#£êú«¬µÑ%f¿ÕµnSÕïä_|Wt‰¤‰Ý{ç]N¤f‹¢øÅÆ–ÙŽ¥²1ÂAøÀ /…ô ¦L‘Èy˜~ÅÅï$à)WBybdCðÑ7[­ï¶o ýR¨$¶¼ìöOXÁrÞðÑF]&AOÕ¶ß‹ßÕGÖ‡‡>½ÌG8Ô„>]ú|G4Ôüì4ùiœÐÅwe‚>ŒCH(ÌDí?ü…ªáÄ»èy%ÄŠ2»±Fäéd`Yx:")B5¥ JÄmäñâ0‘>®'y*"¡¢€Ü%I™éýƵuuÜÿÁ7lÏÃùnDÚ„xx×”H+{"˜ŸîèçÀ@ÑÙè­ŠÍ|¡Wë=‰›¬o#¢ªÚAZbueŠ7”kS˜+f&@l1ÉÔ"GUÚ~)ßwÜH÷[³S–i³JÄX¯®%¿ŠúûÄŒdÄ =öÃ/o »—iò²Ïåü:™#P¸2ŸÃ!¶Êb2`Ó¸¢²˜é¥ys—üE%OOœÒ ßçÌÈýÅ:`pô±“7ÿlO’'Dï³°üµõù¼¿¶®XIYï[ÆŒÂÈtÃP±ÛÃhŠ_¾ÙuX wH$HÍeAA«Ÿ+~w•/ QLIâ‘A tÊÝÛÛ!ô §ÝLãòÚõùÒdÃõN>ìS+öÁ†wê±á7‹ Mü¤Æ2Íê·ï4kâ,8‰z­ïõ«(j°'Aý|ó³%6ÅŽÔÂâ-¹]…¦Û•†”Ì‹m‘X’XÁ…OÕaºØ6Óç<ç0wk`»¼àzÁåæÀ2oÅ#YBO/ '3Žÿ+q4‡`mOhLÔ¯5é7Tsý†õÙ‡½±î õ²#‹ Ð&–\H§Xýµ_Ù߉+膌h¶§V0Ê¡¶<3rŽw÷~©t›XÿxÀþÍ¡ß )^ji9á.,¦RÑ[ NÜÆèŠ—M–š¨†)à#Ä‘¤^R’ß2äü ’ÓÆÌìê~mÚivUß?ÞÇ]ûv€ˆNKØlU0÷ñwáè-ø §ëÅ”‰9ç A¤ôËäWþ  ÞçY¿X ‚^ÑóN¾ð¤ŸP6Š3X#|92ï¥Y™/§páC×¥Þ‡à©L|¸DTÑþþ¸ä8¤yrþ˜Hóìx`³ùö|Ÿ¯ÔÑ:¡Û‡@àå¼d–¸¨køz^‹®©Á{ÆRRn›¸TcFî )ͯFxJV—}ÁŠ,sªh™}Ò“ WTà>+»ÐêbAP] xÑüð£Pû9Ùºÿp½˜fÙµ¡£'ˆˆzv^K·ø†â”XÃ6Ô¢›´:0©DsàZŽWÄ£™Ù@Ó*‚g¡yäe¹õ6b¿Úx‘‹5`Hà¿5wFFÑ ?J¡IGy«Õ¡æIÍ.8àÃRýó+Üóúa3ÂFG[3ÚïiæG2ÊÅmÖEbyUû ï!›ú<©ºúÇÆŠI¿Mx8õ&`u ¿®ÄA¯a®qÌùLŸ½C|¿/lw(lrQŒÈŽZr¤·”™¸l‹¢¬Y«äÏp¿­yPkï£84¼!ùÎᱡ†ÃÃ"A©Šß#ù”ÀñÓªa$¶wLéùÖ›ûfÜŠZ"sÔ¯HW;@dqÏ$4Êîý\?= 7·Î?áqŠ–N6ÊvÉ5^†&užd0ebTYÖÇèóýF±Ü£lùį́aEûó‚ôþ2˜ÿ#Äzñµ¢À&øÏwþGTW ÿµ6[ ß¼3†Û\ß:ò½éÕNñ¦NS8",–W ÎïævßÛ3p&Xfê•¿*?+_QˆÎIùNŠø!)»ÃÙúý º«I®‡mÿtŒŸj'DY—û9 ‰(A9ðh¶xümÝÀšó±*¼ÄÜk_,ÚŠSèœ cÕýq¥‡…"–xü†ô…]æJ’#0y©boßÍ3â¨ó‰³æ¹ù:;3ŠÞV÷ƒ-áu³Ó¤V( <2™uCÂð=y'b#©Ÿ&ßÓ¸Z«œÝ‰ÿÀbdÐuÿ*Œe/·ûyÔ[oåMæp73ò.%Ô‘øµs]뢩”.v0Ìí0“× ¥…#c4}ŠI–fß &£ êãBÒ¨ù¡ê›ÏͶcÓOp=ZY+êˆñU£íz{_ëßñn¬tHµœ†(*í0±ó”…ß{P¿ýBÑ7!ç„«cÇ2DÔñc'áå ?ç%ª¬}çph–tqªZð#gæî8‹OÉQÚ“s¦°ãƒC&.GB†Ã‘G~o1@L´ûän4t.Šx3‘)O!³ÚtSç<-ž4`nhlDkq} êÖ Ì9ñS7ƒ‚Ÿ¤±ò˜d¬ââ„}ìwšÈœ9 IhJÓfÅЉïï+,(ãÄ(ªàqøD~¾H¢“]öLra¥ „:®{ŠkGqµZIˆáæÌc%ÕÈŒÉúKXyp¡s3A7ƒŠáNF®­pθaS=m½_ø<Îxi·¼÷#*D:W$„¾¿µŒ4ŽÐÓwï¬î@šMÙÌ?Bð+÷bŠ=Ê㢈vÙ²Ïô­¨®ÇD¨&™.­æ/´‰"!Oº¿VÚµöü YžÕO,)T2<Æ[xX·Åî§šã}Ûªv]O^gzM88ظ-^p>ÂÛBïE´­kxǺXúÇXÇÓ¨½S/Ý‘Ð绦­ÁÉÔæ‹D}ŠÅ‡Q—žu×|D”éîÚYk«¬dÛoø:$H†%fqà/_PYÇ¿˜CNpÏÚ|Uu/£ôNïÛU*¶7…¥ÒI–@CëtB¡ „#¤ ØÿÕÇK“ô…ÒóxÉ*ÈÈêÏ•?LJEÔ“a]CßL™xMeµCô×lâ˜é*ÁKCšf*<ž2Æ™gJêr}¡t$¢ýûƒ1Oßpé"¿È”ÿìnõã]Æ.ìnFƻЀ8?Fq±_©ó4§èƒ2å êtŸÐŽ;—áæQ°éLu¤Yª>.Ï"ûí{¦\Š y éŒ>ãs‡ øf'¸‡½XDÓU/ßÊ…Î:¹°;¸¯Œ\+åtß¹ÚdìZÒmý9<Ã*ñsM^ÆMø ¶ @'¹¯ìÙo°×-ãmìÐãÖSŽ˜910>ÚPó\’˜V;¼Lõ—‹x÷Bh ÅøæfNýb5Ö- ˜ z;„Eƒ½dë ÐÜáÉ“¶Ù ¡b´zÅðæâ†Êq9ä­|¹”Ð0óŠ* é³Ògj“ƒN·äo[j%6ßb}Û®§Þf)O¼%w<²Šü3p0áòãÞI£3l-0¡?yb˜Epu‘Ë‘p#yñ¥/f˵|(…,vI<î!¤ÈŽ­6]æœüÞÌÕ!WqDµ •ð1ÝÀQ¹g) 1ŸTÄ4×ýÇ»\hà1e UR×FbNbîñ{ˆ¬ÙìÁ'(┤ÈX§KvÇC=E(î9€ê·q‡É¢Mò€¨Óf # 9ÎÓ£BTIñ›h&‡!ÙØâ0) û{ÜõzÔ6‹ÑØn™wÎcF xË /w=˜Û…óÙiU3e*¼S ”{£n YDÙ'ˆ¢ks-}ùÒÝB5E’œ#)îÞ ìò!Pf¶Ei EÓ²áQØ—Y”RžÚ§´—Cd…&“É^ó=©¼ö€X€Å.2¦Ôಀ¦nh)<{w *wÊ´g9PÐcÂEÍ‚dâúã…¬Z„«ÑDž ´SŒG‘Qß>Ôª¯¾ŸG(´ŸlCx9^Öíí;m Ãînu,¶·ÁC´Íxàhœ÷6Ÿ5C¬,^Ä¥Nt$«‘ˆµöšzJk–å!ŸÔ®Ë%E¬ÒJéÆdj_hìóYw ªXÍäéú²ÅV6cç^Šë΂Îz(E›CJsØV´†C´–v‹ŸŒŽ« ¶ `„”YŠ9ç~áŸ::ëÇ»Ñ'yµ^Æ¿lÔ¢‡I2sO°Ä˜mÞ8ÑÔNîí†cew¥wý>5QtBØk³ Ã? ÖW¦ôˆM¨)¾äóZĽ )ú,Í ÞG‹ç‰F.wFoD„W†$aª)#8åûê¸?Épú›Î4#†ÉöÖØŽ&²Êl•µÚqˆ$¤éÎû0Ȧšu zdwÚNêÆ¾W"êR¸¡ÑÎÅ þµðMÑcÖ‹LѪ+ŸèÂJ Ø6:lkÁðøõš#ØÐÆÁiÑ:£™(™i£áâ-¯¯D35- Õ Ú'µF4CF¤Z|B™ŠR@Ž#œ•R¸ÿ7M&–ÛíÃé ÞöY6bYOç˜Ýß‚R”º2‰YPŽ~QT’¶)Õ¹ÂzûŠD’í¨%˜Šj Y5é»QZu/¨ÆLËsqª(!…sÜã0BQ©HbF—bsÕÉñ7~˜¶¹?R%ñ ezQ·ñTÝ™Avt‡):OÊg›w8»K±š’.'XN•ühð£Œ9øד±\…âU&Õû ¥7r_¤ÌÊ!Ÿleœv¼„4‡u-±“˜¾i -;ÇDœÝ^Yü¹f­³WŽ‚úÞ%\_÷Í .œ“Óh ¥«4ãå)\ ÚÂï!ߢˊI0“o— /P¯nõ[ÉsŠ×ôSøa 僙¥àj"¹{¨‘‚ Oõv‘Þt Í rOžëÜ®Í"¼Q|-OU-½rØ`7¯ì(§¾öo%æÍ'A&j¹@“câ-W16XÑÛís:ä¼ñ-9¹\üíî}Bs,ô¨oBÔ é}>ÖéH:V éÍ'ô>jè@j–V9Rô5Èì˜I¡¹3mM¦¶¤[Ø |Zƒ—OQÉáIñ—cñDE%´Þe·Jj²Žl°&_>YFßw«âä¶TFŸRÒÐÝ]!:w&Â`]ú…åÜ5ÄÚ2îšm=§~•²7¾’Ø>Úì|^“¯{[ Árëv“w¡’x@²q7ŽÈNW+˜íâ¬èvà¨a*œøÄ|™?~uµà7—y“H篜E=ˆ)@†Ü¯Ó;¥Û™m¤¾žG”/·Vd¿„nØsÆ`Ûf»jÛ:'*Ð`} ìÈuYsÿiwöD‚·`$þàóÖh¶ú\p /‚xaÕÅFîFEç7Üílíª­õrÔO–ý ÞšàŠ,„ƒ{Â<èZÀ‰Å3L»Ý'¾è“¨k5ˆ2ô.$%¶ÐûâK‹¨"ÙöÏ[ Ñt1Ü>˜ëJ óþÙ ÏDÇÌÔB ,òOë…uÇŸEvíwž¬À‘|Õ ¢U瑬»¯Äâßx'z6¿ùJ>£Y‰…Ÿ ®s<¸E–3»:¼M'&¼yãúY×`t2 -°ß[ï‚çÓ’HÊMѰÞUÉŒZÉŠPpŽ›)•‹_Ë’«ßÂ^ÕºfÛº:$²c)µß±w¡œ”ÚÚØk D×&:?•´„sL“•Xâ箚vË(KHULhXtÙ¹ ‹ß%í¾Tú¼)]ÿP#w¥•éXº*Õ€Mt´ ¯ªPõ°~¿Õ…É’ÍR4Ïx]Bˆ:7 °èfI+¥Y:µÇ'ÓùÉísÛ…éÚ‹ñ‰–¼ÿ0áq°9¹}'‡²!±Ô)?˜KÌõqLÿ“aù¼‹Lµˆì[fûrSÝ#þ×½{¯Ä2R°Žo(öŸxõökuIJ³ÎO•0Hg÷ÒhY2;˜}Ð~åH„`¿ØÙ@²»âM%ÒO«Ked¡Æn3UMãI²^´óu 8:,ö®‡›Ç]Ö¸ú¡CŸeA%™üŸ‰¸¿íŠZª§‰¬@jººf‡7 ½¤ŽŠž-ýVptë;]šzDFù.Û«LÛ¶öc#É÷Ì Dó,w{eÏîàyÐGE5ŸQNp"9 XJ±^T÷}À"»Phõiÿ;{94MJæsS¯'¬£·x…šIÛ ã¦éûÝ^_:‚jár`ç ¶ â衾VÀªkG,VŠA¯½GSßùT(ã*“Z³V%êã“Cn“œ6$ûe2ì”nÝ ¦#¶)#fXgŸÍ)©x sÉÕ`èŸtr(î>£Cc¥)ŠhÚð“™é5gøm"¯ä-í¼R\Üqþôq¨î”€ç08ïô|óéùê?ÉY5^Á¯«žc E>´º;÷ž® T¥‹oîdÛ5²!ÐJDøžH7š Ù±˜vžårZ crT}›º$Ê™gÌÔÀšú%]¼îùtÉl#É_!1Ï÷„‰ô–ƒZ“IÁEÖå0|Aà#i‹k= )¹÷òæƒluý^"àݸˆ²òš¡¦õˆÛ5öø …¡L’.("¯<£7Có;9¬~ 1ù,ÚtØX –{—a¿_Á¹,7R-¸Ö9kQÓX «ˆ<yB¹Tû$É[á{ò«©¶&êÎ’•Ïdÿâ™ñ½ß=" õÃ{OCÛc%¶´l™ƒÒj:Ä,q®‡¯/KXì”–J*Ã7MWÊÙƒê~p„ÜÇôL ›6š¬ô_° ­S25J]¶Ùt¦¢$ Æ“?÷ãMÑD‹-J-˜j´Øjdx\¼ <_Ú5ît§Ikî7v_YO9¾B˜.ÊÄkÙ™nÛPîœ^SÞS¶³¡ùÊ:ÿFÏ=^HÜ íhÓã_Û:½-‡¾É>Q`,šýDȇ+™l¼a]¨úÖLÃ9t:ïãªBzJÛ+~)'¬±1ÔéSÊÎézê9Ç©;¦NXiü ME²š.ø‰¦t¶«™µ åËÇ ãð¾3»ìä­Âþ Úp˜ÔŽ˜!E•îØ‘ïn)¯zyhŒšP=W?7Qd‹ðm-GÉ"¼CË{Õá 4}Ð7Köb fHQ,0k §¼©ûº™‰èx¯—³ÆC ,J¥Ë`mbåSö!&¼"ÒÜàÊÜe­«Ã%ûûðÌ'ÛX,IÔóÎM¸±| Ó¥ˆ$#À8.Ý>Ía–-0‚4¼JöZ´Åð]çºì¿½jÍG#¯ÕJÅÁ³·‰jߎ|–IÞC3PÔXecFØü—¡:ȧw¢oUê·H ÏerG[:³[ŸºÌ´D@)qá…λ ,]bØ.ãË~ßúNNEÎÑí®m”KIîDF<<±)eÒÁ›*¤Úû«MEpòi¨ ¯r›N^ÜT8{Oâª%4fdð¬\ÊxF1oº®ç·Õ%DÆuÇ+«¡ “: ~æˆØ×:߃ c¦bE#$Š;H‚ÍË’)bµ´sœcº ðjÃ3,öwØ ÚàèÌëÅ«xoܺö]1q¬D<ý2™í³Eù KUïRÛQ)0ÿÙ$1BVV ßU¢±sÑiÒíî§ÙEêFè8s?'9PÅíkb-‘+¬ HwÄõ0ç o…aî«‰Š¶:éîlÆÀ«ÜªOÀØR‹Á‰Úy!&Bº§k8À÷je#þ÷ÙõXq/9£G0†·¸¹Wc/¯doÕTzJõê·õyn*BKåE Ô•qÛ3ïÏ–:?T:›eùuµv ~Йa¹Ï$—Ýv§aØÜöRëm~Vœ(göˆÛÐe2Sz˜&" *G£1šZ[üÊ;Ä%B^j2Mè´Si_dDý]xœðg\MbWH ϳ6¬ë&³¶QrÙ§JÙ¢  O‚j¦Åòã`ÑmØ“ „À*. ïg¡Ón%ú$P 3>¤¼ŠjP7f÷AþÆÙi‰þáS^<¯¦k?¬‹ –%HåC’ê±eÃcì÷ §Gydn­/¾¦[}A7Ôá‚M ò‚}OØ×ˆRÁiš&W2;‰,l€äâ :äaÆNÕÀÕÖs:JÜúF=wÑKñ~…‹‹bð’Ÿ—žÜÊf1Iîø”ï»:ù¹§lœ'"~ñÉ2âÇFS§QIŽÿ[]J,×m€EïV;wfâ{(ïg*È%ªœ:×$cÀ«Uͦ;ÁŠû!ÿR]ÖEv°Ãô£ºä¡ý7Êù²D2îÉâ•ß µjºÃ[G—¯a¿ ÍÍžS+§îû—Ìß…tOïN¢ÔUƒi´j9"¨Z6øÔŠÆúo³{Ø>Tä­Pžßò±>éˆr8tS'Œ}¯h¿Õ:ªC­³RÍ^’…öÙßÔ? c• d/\X^cØ…4èºû_)­‡‚l%D{ŸWÖFì¶ßà \ë"°Ù'ø‹ÆnUAbšáù“‚»…²Å[åBy Ù‰õ@‡}/ çchb­Y0ñq¹Ÿ>³Ûy{ VÇtÆ4ÑÊhn9oÃŽßÅVþqsÁ-Y‰œº! ÚF…/E©½òûµÄ‰êÅñ÷K¦·(ûÈ%£®Xº¡?üÁpCÂãÆËJGÜøÖÏ4õñ /ë<¤¯šÞ‹µ]-˜<Û¦"Ÿ_XÅÓÐR÷bZ‡‡©@sø|ÌŸ_ „Ï[϶®RÌ‘¢¨ù\°Â¯Öb .~9’Ožw•ÏúÇ#‡ýdŸòîõ&?8µPy÷ÀÙ¼ê\‡ÌËYWK«<”oÚ æ2³C—FPØ ,¶ê¨(S§§”&¡ÂÕHW)g E«z™`A/‡9}/8âÊp?£W°'xB[Jó ½œCÅ@+N±\[%úfM¢}QC¶¨ª:y(Xû‚ k¼6DŠ`ÀÂùÔ>äÁ3Ùú5g‘ûºòìä·½‡»I¬÷-«!Hˆ¸ëå*õ·0I)^ƒR÷_{õâq¿T«Ñ¡ú#0rh}.ý½$F±Èô„R=gò+‡ç­°_Aê¡S”h\;r™MAc†&£9¤ÔßÓŽ•êúQ½,O¸]ÜF-(ø¯¾È`TaØõ³1¢qßÑáJzÓùŠ©¯'Ÿ›’—yÎ÷L~>a×ÔÄ©V)®öT°\C9ÙÅI m›ºN«'‚„\$›à—ÿ\˜L¢1¥¯­,Uñ‰|k9ÖÍ@Š®“Óo?ˆ8dÝ®ÞmBp™ëwÐ|½³É ‡g/ö&¬Ón@}:mÿêî)ÔÄÿÅÆU+1Ÿ¡EMü½~B3ÝŸ"–LîЮ’ëÂ:~w~¿sjƒ›±Ó¾üÓæ¸B½2VO±¶Pü“šmˆÅò$&Òìú×JjD9‚H÷/ÆF™i² ¯«ü«»†ûíƒÖÃO[dWx¤ô3êüÖ‚žš‚^’¬ok³±,š!‡Új3ÇÛÅ=}¼ *c[h&Pß‹n¯¶vˆ(°‰I¬T}Äæhce_åÇÊqk¨Ré~PÏÙ ¯>)ëæ»Ú§c܉ ­ß…:òÑ?ƒí)ƒ3nœoèt`D@¯çPDpì®ëúê7–a‹Ë9}Ug,ÅéÛjL31Ãß³2v–MÃcA‡ƒûN°#8¯ëÆ- ¶¯)e\+!m1NûÉÔXß:~°pÊòÜü.±›N N°Ù:ózèzF·GvJf"÷ó‚àé1É%­/Ê›Á~9’«ñ²‘ÁÓ}øõlœW¥#tF·0/—¢’³%Çd;SG› l{¬êÆ šø¶‘~œµâÆ=¶›Í*ú2LepÿñÒ«êìÂ8"ãNió>G{îõ/¥ƒÌ9}Ò´0³¦6 wºÿ¶uŽ›†ö`%¶J_žö—WåOž6ŽPú¤;rC†DÜQ²Mžª¤³uõ; D ª 2Ô_Ñ0?‡øsçt–Á&çâD ÃF¢YÂ>¢‘€BnÆ»½šÂ]¨ÚyïZŒŠü0š,5æò”{@P—À(ÐÇî‡ìÔ÷˜ëGuf^¯pж1rmWº”´X9Â/íOCŸ@%‡\ñHîˆN@  °„m›>œäu]ø`ÀnBïyi–òaOrîì©!ƒª ìnk‚"¨’‚½†‘»ƒÆ›*<†Æ"°ôÍkiK% Ø[uO0p…&!Ýšæœý s:}Õ‹~…¿ YA0oâã̼VcPåØœ†BÎ#.³_€ºùÒõÃ-ØÓâHL Ü·?˜vó%þB˵e%Áh?./çÎ\võSIKÛÿ¢øfÒUŠÒaw,ü™™L ërb×õ±WÑ’pÝJ+$Œ›ø÷ÀF€´æ½â(z—‘Ô5…WWݼÃÉzÍxÙ"Ï7¸ê{ùŒS® Í­È(Ãizßù¾U½ ÉÌÿ‚ø‘Ö9Wœr…þ5ߑ׿aBJe3>ìÍ;»ºÆ2„žëÆÆ‘µ–WøÍ"?ˆc40¬ÅiðànàîÇ?¤áî‡^™Ò›eW;g…]¢}£EçsÒµüT»˜yöp& VëÙ£‰Ý>•÷2=õ~EÞ™h2[sÄÈ[ 3öîJº¹ºÈy0³À$Ç÷¹º1 ‡Õ—Vø|B?'TªÙóÜ¿“DØX£h6Ÿµ n’Zñ\éÊÃõzÙ0KÞ6%d·Î—ù¤K'Þõ°@#é¦泦]Ÿ®òL„ëå&­žÿ‰ižà€–}óVl×Ò7À²GâWï׳_ž`–d?¯èñsxÄ•¸BÏ–qtŽ“‰Db›W†Ž½2BMò{)ñg3ëxÚ„àJw :Üí ¢‡èΤĉԑ†Cµ¨ÕÝ7¥ï«ªÅO5£‚`wžBñæÙê9tÃU}yÈ©$Å!ÊcõR3?Ã*;>›/ø:½ˆq,×WsßgI} (äè=ÕÁ²Ü¥ïÕÏ¡€5yÕîlè¡:A°±×TèBÆ¿l>é+ØâÔa¯¯§Z½½vª;å6ÑF‚–§âµª°b÷§­Gqvã„1äÉÛLFfJçk‘æ¦j ™Ì$÷“éÉK…<‡3‰0§o8FÎᥢ¿ãªóö‹%ÒÙ8vÒb ýÎ?Ù«·åCè$ÏØ¥XÓÕüÔ eå”é}ætÊ_6›µ=ŒZ¢ü,'ÅD/%©]çóÄz¿ /ÔªÞÌœêUçaÞT…;¼f0Œ±åL/íYÃûî”kl)ÏêÙ $F¯ÄI{·‘Œ±Óz‰YiV© +wÇ ¨|2JžgM ˆ§ðöúJ ô,ãYÕ{Ü\ìoV·‹IY¸#´ÖÅy;W²ÕÓå±×1=®ÀüeÙ¨cÐí™ÍôPCšÝ0’Äœ%yYÝüÐÌî¾¥y’ÓHklˆÚ[)ÝŽÞM¦w WÚ±’ïÉ!'ÏÍü&8,2rN™„4:X×÷=²‰"i;#R\IÍ1èª-ðµ äçkwÕÀä––ÌÁ:°8‹]BÑB}éì!-ÓŸ~U¤7hǬR?Ù ®'Ì—¸FÏp¬¼ÐÍñŠ‹`‚‰[³e÷. ‰òÚo\9¢Y³ôâ*Íd Äñ»×@ú;y²jE¨iÇ|ìÌ™þ¤XÏ "K„ÿŽ/HìäS÷㾊®µôÉõÊ…;"î­k…׌ …ø´¡/Ô­£½~rZµF·µ]þÑ~éÀÀ¥ ».³qýi“@ë¯lz7/;K;’•f^v-vËsüu'¥4 ´ÁòåQzϵœ÷U8¾|ЦÔÊY9%E'B/&º]¶z>§«§0çü{y|APàXbBަÅ[‚ªV¿Cf •ÂôwÔ¼ÓÛÉv‡«[­oáY0Ñ˵4ÒT6QSÞ³°¹§ÄÃ1áRO¾sÊVæºèX8™d«SóqŠ(ÙÿA ž?LŒ]í§mîÌ m5²5½Ã×óÝ µpÍ.|fþv*ú§óî!båõ0¢µØ§.íΜû0¦†¼äzz‰"šÞ¾]~z—¬¯i‰3\ú‹ü ©Yö·M_m‹ãgãNú³9ë C—‡§e¨Öà._²¾ \èŒ-¶t? ­9-f‘;0Ì`Ô;âÀ+S©N¸6Ò.éqì¸TjŸ‹5ÖwYÏæjGÍÀ¬È -Q©Ì!뤖[I܈C…Û‰½HýBr:OzÞÕLmVC—(ÖY¼Â¥ç„B•¾>=ú©½Ømµ” ԬĶ ñžÖ„i=å$¡SÛPæéÔ¼‰ÂˆÆI·ãs^± ÐgMŸ·‘ãùkÙ:mc­K$uƒFRF<,ˆ"„6Tc¬UxhK^ËÅYkæ–èý„l?ûÒU(, fý³iæŸ+¨Òl!Iï;Ë%M¿G*ÈeAb WŒ˜`›˜3#¢GEðÜÝ „G[G|?Qüm2©þ2JOF„µ+úÚ90QÆ:HK§ªX* ܘϔö˜oéBþÙÿ<öEßD.i<Ás§8´sì4ÓÞ4Ü>[a•ö“缎¤þµjù6(ŸµÏ’ÒVSžPÌ1࢑K†”¾¯Yˆ½l"Ó\6mæwì•5¸:2Nè)ßGü9s®>« ÎÌ«8Í"ÒܢT|ú¤ÿý £*” ‡*ä–¦yY¡…ë“{ÊÃïx7Àc³.èG:߃û ˆ] g5ÛêWêâïÂt¤¹§?¹ró§)1/ ~…µÕ D7vyn„jD&D0ï¯ÄÓÕ·ÃÅ. /1˜+Sͬäò’ cEWT’™gHëÇÓ3‡øÞny* ŸÖ ÓÞ¥ ™EY¸)n¶„=è—y?ǵákƒël:tˆcãXƒ°.mšòr½‰»Ì(ºTØ£Ò>‰ð-+cüxg+À·æ–¹2ܪKTC¯†šÍç÷פƒ•¤$!m¯Î.ÚÜÏvÂdåó²Qôh[9»2òªÌV {™.î/ýª­_¦¢]ú4NÆÜJHêñÕÜa¤1ØH(èPpx¡Á=ʃ­5)½{ÿ³@Ù»­©¨ˆ’ÿOü+tâíà çU‰¥;’uº.hÂ28ÇÞÍù0fk{'±¶¦ŸqÂ3÷ÙVpoI4US°cô}“!9«œ,=»é¿Ï6Ýleš“[&7Aæ )pLõh_¬,¥,H`"gr>¥1“;EÂJÃp¸W´1”ožå ò$1‰žtHĘRï"vÊ5:^³k-ÚYœf×È4H»N·kHEÖ¡ÏÆ¡RåŽP ßz€ë»†ÔÂDÇŸÏùö‹˜î "N‡¯ÿö]ô ¦Í.å'‹ï²h±]>ÆÔZ­DÂW1KðmòD,ýâ‡RÒ3¸£¿íŠ´™¬èÌGÆ„’Ó7™|Æ1Åø2†Õfî&Ò{¾™‹×ìbªèåPF¬^rç´4¶òÅïî”ñu}¥ÌÐ¥¢”@§j`‘fF²³ßÛþ%ÄÆ„éN>õ¬ñº}sæjQ~Å{°·œ1&eÅyDsËœo þ9Sù› ñcõn{Y¢¡© TÂlød§‚gˆö²‡Š¼}°ys—ÇÂPx÷hE% >¼©64›1ÿfÐÿwš«Ì²z36B?µæ­|[¡†+èuh´o†:üåu…ß5ðb:Z´ õDùˆõÚY®­ò?ñò4¶™~fÐ,¦¹¥®±9´ ¬EnžÑ"L‹„ÍsÎ’$¡u‚Ý-5—J§_³òÚÛˆò5õâ7…Ci«±¨á}J,¼UÈ¿0_øši­UQ¥îÈë8âTߪRªþ¦ÐîÈæ÷DÀ0²6úx­gã¥ÀcÆÜ“¬œ†›l0üµšQPo+­¬A3bBÞúNx÷èKn ÄØn_µb8ÄÏ'ó€ÆÐÖ£xN'{^¶·ãw@ˆ9_¤:å»”anRäf^cˆ¯íž¾ÍÙ(‘µÅÐZ^2&¾’^p’ƒÜÆKw_YýÜq’*‘^yVךýœØûoÚìxêéÝ3lm$fNÞ«s'Òq„ŽD˜Ž 4C“ 3\˜nåE‘F'JÍÖ¶×ãlY‘Õé…Ÿ§#%å·• àeí…Šaz ¶rÒ¾rK(ñœ»£`Z‰´¿¹¯? ÉæÊºWd 1tžû‚Œ—¼Û µT„K¤+T¡€]žÁ½peb¹¿©¬ˆf‚ÍZ-ì˜öS®R2¶ôíîñ32m!L*ž3ôqõ²U×G¬û~¡ÈK\iä%å˜k2æ4c¦‚Û Ú5#»¥?æoŒb½Cx±¼}n‘ íßQÀ•tŠSV3¹ãwAÁ޹)FD ¼2¾M¯æQHQ„b؃¸’Ñ’¹ýæ —pMšdPóý¤‘Àð`M ꄌΛ`ÂeòJ ÜW3çš$LI;l.î(¢JùY6§§W«sÇV(Æu¯Œ‹lÁß§Jv^ÀpÏXß\¡üª‘¹ÐûúëBBàÒÖщ|Ù¤zL¢µwF§U¡×ÌT®»s3^EB[‘[DP¦|ÊiÅ93ìûÅ%!ãàp ª`sØá(T§K›ýÀ„lƒó;ß×(0B-pÂÓ‡ÆîKUw<›v‡­ºm;£F*UÙàÞ– µCnÖÑùJ¬ÂÛ†\5}@ôŠb˜D½J*¨œ/ëV|9ôs&Ûrh¢ó4Ø>•9ª¬ñ¨âùqpà ²²À×—ØZ—%È pˆœé™ˆ_ëË-ÛîÍGo©¦¿»52Iø¡¥4k\m=Mº‘2˜%lknÅ¥ªŠ®~Ó¡øeV*Š{*0¤R@Î-lfPmW‘ùþæ0dÃFTD-ÉtJr™”1WG¦ì•PSoƒIq¾žÍ;Òó'ä>ÃË8  }Håz5|"ÂÇ—=Þ%÷«FŽ´ó¼î)N1ÌZò®'£·q — V‹q¨=[:±%¿t ävç|w‘±LÕíöfç¨ûìAÉÔ:rƒ wfz¸æáGóøú²ÄŠpEký¢n$ÓæËËÜ@§‘ÝÂe/ÈÅlkì­¿M^¿b…Ô BONk…©FFõ„ˆàÖ¼½™ZÍЬ¨Æô´Ú;h°˜¨p ÊGváèqä}¯J ?~ïWú•EŸå¶ˆeÑ¢”R»è¾Â“aïiˆÿ3€½fIé?@R3?aN´%JL¤šZ ë¢æöÙTK'e 2dƇ¡}{÷•CAZ+ÃŽp[5꾆Î6>Ô¹øQ¿8€|G@âN>u5Í»Î$I›¯¯Eøó—Þ 2%Åp3ïü„nô¨ÏóÓU(IR‚wT%Ga®ô—nk1˜„Ê÷‹ÄLpúm…i4º\×'ý>+A”|ו§þ&Í¢ÍFÈKˆ]ñ’Aòf5’ÙÐï#üô+NM‡°]ý87E_=ôdsZíËr[®1“À=°Òâä×dCq„ï"ž®[ä—àÌ íMÄ;+øÆbM.=v:\Ç8]m‰]²ÍW¿Óé­ËFî2ZRi›ñdÔTfúßP͘#eß›î³jŸe§»i‘AYŒ9c•ä‚//~Y õÛŠ03bJµßN0ß ÓDûºouÒ˜d 4Ǧ<|vŒ+“—˜ì?æ¤Ø2Ç”¯ ñÿöU|“ HÙѽp40EÝ\tü,QÚî?e„·µï½éïôœÝF0žä‚øvÁlsñËP×Új …ªÀÙNÍîÕ½ör¥˜÷w¯‹¦ãôvIáW¡‹±?>‰@ïQ¿;6ä‘&Ÿ‘z×mMè\‡Ú^Çå³  @ÁoÅv&ŠRÊ\+Dt>Æš:9_ô]ÒÕŽãví]_aÔG\p†—ð‘ðDF˜£Ì· îóâio^1šÝS¤ûY̸¡Ç<<[{9ªðÎmIGJèmG0r}þ Ž~í'^÷õDï©î°Ýy4¿¹£–ÄËœ T>V´#…`úDO¢Bé(°ÁqîåTK± 1÷cÔ\êÜ‘‘8¢YÈ¡ºòiEd,Ð Ðøš-¥?°«Ñ”Phø{´ˆ^!ƒ&@¬0™ü³Å¦¯]>æ,ùdúÎÔkÃQš&Áªê,ê“=‡bÒ˜“EéiÒ¼Ë%Òpà™oûæn·Sl)«%4\YA "­~¼¿5W¡,^ßoüÔ8–¢¼þ³l9Q´j_@B ß~EÔ`¢XÑmáézž8ZìZh ÙÏŽ¬°ÏoÞW¿¹ê³µ”œüV0±Žp•n6^Ç;Q§5?¿Ú÷€_=ý²l’ÓÌ<|ÖEÞOêþ‘ùösï,Gº®¥ñœ®g/åt÷ÉÆeœº0$™`bEBÚqx©âÝ$þ7õì endstream endobj 401 0 obj << /Length1 1901 /Length2 13249 /Length3 0 /Length 14420 /Filter /FlateDecode >> stream xÚöP\ÛÖ† ãNpÐ@pw'xpw·Æ¡q—ww îîîîî‚» .Ù{Ÿ³s¾ÿ¯º·ºŠ^Ï2ß1׳!'QP¦2ÅA¶NôÌ L<Yef&+ 9¹Š…“5ð?ëäj@G -Ï"@C§·5QC§7GY-@ÊÙÀÌ `æàaæäab°01qÿÇäÀ5t±0È2¤@¶@Gr»ƒ…™¹ÓÛ>ÿyPS˜¹¹9éþ Ù,Œ m²†Næ@›· ­Ê c  “ûÿ¤ â3wr²ãadtuue0´qd9˜ PÓ\-œÌJ@G ƒ Ðð»d€œ¡ ðŸÒÈ*掔A¦N®†@ÀÛ‚µ…1ÐÖñ-ÄÙÖèxÛ ,)·Úþí,ó·àŸÃ030ÿ7Ý?Ñ¿YØþlhl ²±3´u·°5˜ZXòâ2 NnNtC[“ߎ†ÖŽ ·xCC kC£7‡¿¤Ä…†oþSŸ£±ƒ…“#ƒ£…õï§y;f1[ ÐÖÉá·>Q  ñÛ¹»3þór­lA®¶žÿ!S [Óße˜8Û1ªÚZØ;%Eÿñy[BøwÍ è`gbbâäæí@7csÆß¨¸Ûÿ22ÿ^~«ÁÛÓd0}+èma |ûBðt4tœœÞžþ—˜™&ÆN# ™…-¿Ùß–¦óÛûw°ph3½µ3€é÷ç¿Oºof²µvÿ×ý¯WÌøIDFMLŒöŸ’ÿk¹<é9Xô,ìLffVçÛƒ÷ÿæQ0´øGDZ’¶¦ ÷ßrßÎé?’]þ骄ð¿¹ä@o PýÛè:LìLÆo˜ÿ?·û_!ÿÿºüw–ÿ×Fÿ¿ŠÄ­­ÿ²Sýíðÿc7´±°vÿÇã­sÞ¦@ô6 ¶ÿ×Uø÷èÊM,œmþ¯UÒÉðm„lÍÞ:šž›ãïe Gq 7 ‰‚…“±ùßMó÷ºêïq³¶°*€-~_0zf&¦ÿc{›1c«·KÄñ­3ÿ2ßFè·³5™üž5v€¡ƒƒ¡;ÂÛ«~#v€'óÛPšÝþêe#ƒ-Èé-ðV¢7Àä€ðû½rpE/ýMÜF±ÿ'€Qü_b0JþKF™é-‹Ü‰ëͦö_âæ0þ—ØXÞÈñíŒ-­þuy 7ú—ÞDÿÀöFoÿoŠßÇÄhò2àÛ¦ÿâo²øߊ0µþÃùÍþÀ·ÍÌÿ@vã±LouYþoªÿLõ&Ûæ_|DFÛ?ðM$èߢÞ|ß~þ0¿É´ûßdÙÿo²þÀ7YŽà›,§?ðí¼ÿÀ7•.Ç›,·?ðM–ûø&Ãã/üŸ&3vvpx»pÿº Þ:ð?ü×íºVAƼ–µíÕB®ô{“,lȃ×a·pê»bx.Š~"|7¬yáËBÝóûáÛè',ůMVØLVz[^©á<Ø+õíЦFß鼦Ñùž8Ê8³ìKwui°Úš˜a_4+ »Þ ÎQãÐÙ_í-d}â£h®¼¯0¿€¥l!rj‘\cb2+ÄãñÁ[Sj‰@’ž1màÂÒ{cnýÖW3TàŒNI}+1 iˆ2zÿ O›Ÿ~ÓŒÃb‚3ÈÞšqP¨ß¢Ö¨ºúx1RAšŠÖðqxC+uÁ‚6ÕaA%sÙd!q(U<ó\2ÿ$¤X|íܶ1 WW4n>²ÇPQâ¨}gi“ý•éqH*qoS×÷ùÿ¶àj@a°æ ¨G2ø<4m?1;¯‚¨KžíàãWÄMšÙ¥¾©mâϦ¼ <êÛ~Òé¿ê„S/ÒyKKg6®ðZ¢88vægw¼ÔçmVüO0¬ë½Q:v^"¬äT4ﱀ©ˆÏMO(û—¤,Ï`nò§”Ó KŽäá‡{TL#ˆÐK¾€ qE``1ª·Y’‰ƒpʳ Cnž&V¹;‚;NJf™É0`È›Pª²¥æíçîeŽ?™:vœÓÆžæµ½Ÿ«Ã¸2®Äèy.øsâSqøû)…ãbH× w7Д/}òµ¤ÂߟvjUñ’Ò­o¯SŸcGopçlÐúîV]ÈMÐBî­8€æÈ!íZ›üäh!Š÷ÿ„x)û)BÈ skÝš¢R·Øq¨TÑøCm™®_â5ž¯+ÊÑv9Mˈáêêņ9 J3Ê@‹ø†š»wÅVÿqvJ­ó…žrÆ·6Þƒ{ÚŠ-íiFçiU3÷¬ ‘dY ’_ýÝ‹“ãÞ/Ì}s&¦]ôÑGà²âRëlChÆ@i–'qïœÍu%Ãüª’Þ c‰~æÜCýL¿R[SÁjlš¨iïÒ§¢,’ذF$Ár² òK˜k9>©`+=è‚ùÝj¹Q ¥ñýcÂÒ¹«ˆ[ŒÆåÝÜÕ€'ÌRé̬)P”¸Ûî}F’˜_9mžR ZÙ‰d‚$Mœ†/¤f±ÐÁ·ˆðÙÏàzB4 BS>Ø¿Œ 2œÄ;:¾íŸ$Ë!ѯ“˜IG¢¶7—ó ó% Àþ$«”|ܤÁ³ç;æË9à®Rºþ À ó¤ŠúN„ÕŒjq uLŒ‰Ð‚b)¬…+­…ä¨5,ÝðÃÚþD 8&Á2_«|½ÝTŒj$òBZ¨Ñ÷¢Ç#Ç%ê_kéḬ¼^’—Ö*C ïDclzãá×u&<DËðth#CXí3ò/#Ò­áÚö†©£RÈ0C‹:¡¼z™ÜNˆ—ÇA•4-[Tx@ôˆ<é¯ ¼2µ\ÒsKÍ™{4µÃL ½ù+ …ß\p÷¯u‘ñÛUÞG¹A¡îH|ÙYL²ÛE›´½;pSX¸Ùs ‘ölù®4)ÇSˆx¶ZU Ÿ„7?øSÿ¨ŒbFÈõq“'ãÑl^ñ)¶Ã« ^ë%åa×=:$ªçÛFi6—":»û¼\çír÷Ëé¨c9XijÁ•á3Ø4™—=6ëÁ2SOˆšI¾CTÒM8Î;ÔMRÅ4Ôp¥X÷-µe'hÕ>+lëy’–·)G]+ÍÞJ[íž\¼J3nj¼èUlÜ€Á4Ng¡.µ¨¥=òQµzq'äÍl¥„o"8t£¥Ž4:eñF‰Dm‡¸g1+÷ðZÚá5ûi N7§ºš“?< Os#U­˜Ï-´·¼'s©éâÅ>;½Ë:•à µl¯]&Y-}Išx¸ò©šùö>JsÐwÏZ!`K5^HLQÓÞžu­Vܽ~9<—ÆR¿í¥Ðg{3ˆÜJÐ^Ïc±;£eãfÉÙåëü™3l‚,(R·Ó÷ óK™‰žyJb/¶ ×GÊ5È”Çka€ÝÎó¤žiÑ’?OÕìYUàQZ·ý–Ѩñs^cÑz A^—{©þ!AP ÚsŠï¨ËMþ¶7^^W¿ÏG`oÔ¶¿ëÍQ\Ù˜[˜bûAS±H2šÛn0«s\éÇûu1<-[°~Ñ]Æé•a ñIgY*ŸÐǨ¸™x¶~…­é%åŒ$‰dëìÙ® {j¸kt—¿¤¶2s4;ªAÈD>œ '4{bùu’Gyu#ÆMÇI'#Ÿ·gm#·òþ&WkO8Î-‰å°ãЋg©l§*lQÔvûU¦ ÂO¼.kšØÂ[ã Šq.> ”ÈÇ0ÓáÓæÃ ø«J…ZÔj-Jä[wé¿Îb´ÔûA6Ÿ…®ß}¶Ì6ÿüN܆ׯìùYv`L€5Ÿ’ñ¨AKïTjnÚ‰qÓNû>î³Æ<#| Yζ¿¹Ë˾WQQtJ<>Cmö:xÿQì¡§µ¦e•3~¤–Q„û ˆ· x4Éâ|‹m¨. 'fK¥Ê7fR“D²Mî^ãÍ(É…s{8@"lw1V!øSSÊã$á$iÑÇ5LÞV"GL¡ç}°¸cvÅÄ*/¯•yÜXçÆ?–¸öóë´…C_Õ/0tŸÏ{®ÿÞ;éèÄÜG ‹gs‡1"ËOM ®V®òj"ì÷4s˜(•~ñ¾WMl9àŠt¢Ðâ øV‡äøÛAÝátI_+E.e®mai®ƒÒœxÌæ`©$‰ þ9£ l‹Ù¢ôs‚Ãe! -2ÏÐ'yOèr”O³Uƒúê‘FÙÒÊŸæç†‘è}˜å<ªŒšLé½ Æ5^…ûaŠ'„se§ß¥àPíuN†{äáFlx¼?X\‘†ûÒù¥²ƒµ÷k‹Р”†8çj°21‘46©&>‹Y‚êÕcÜÔ05×ù¦o>skÂív¿´ƒøÒÇœò§ý>µQPûŽ˜LðAèÌmúÏa~ÿÉ ¤OÄ­ìN}"Vx3­&*ZâúªÞ™ŒcFkò¾ˆ‚C…Ö™SÉd±µX©÷¯®Ø?Q!h=ÝKä mЪºÜ.¦[að–lõ¦—1J P–5èCäï9žq_OR(w)e¶ü/Gki{¸åÝ ò‚,°½o*=AV«YßnNy]†®\zPaùðRËlý*pb^ÒG3œê Xg ?WoÂÙÕæMN,‚Ý]Kˆ±ßína‘hÞ²j;ʯøa’ÅÀ~˜”ð`ä¥âù®á–ŽÀ(–L‰SúݧÉ–e&ä1»ï£zetÁJ´¥Q­=±•ð ˜)‹ëB‹ScÀsL@.R\ØË¥ßXÎñÄ/¿¯îÌAߺ ¤æóD³R¶WOÉID‹P€I@¦Ìù }ÆOÝëE¨<šú˜ïgg’d8G0ü³·ëüבU+À6食&ÊBZp°ò4"«¶…qµø<Ü ¥×}ð¯'KÌÓ£)El^ŽXW± ’°ß¦’3­- }Çiµfxs¡K­éCAûÞI6¯É· ¬~ š<_Ød‡2,«M·€×ªµŽmw#ÙË%w¬ïHSc}·¶ìï2%õÀC^PÔ’‹±Ý0u«„V©gMâÌiÌèÖlºGí0‰3±vtiÝ,tÛè©H÷a u¾Ù´ÛW²ä ùH’T®Ð;öR£OÖLà¦õŽ·Ä/HGyè2KB)ÃôšÓä3ÒÎysx>;m# .Zÿº3½PÒ™}<‰«¼öáX /žSAX!j¯¡ƒ;«8ù´È‚Éö²zR#UëN‰He2õ"iwß­/èt€êÖ\ÕÒs¬úïg¹ôÛó[¸¶Ë¢Ã›ý´äu³b+D¦pÖpÒzvÏïwÕòy)Ñ3GCKx>ûsr³{5‚kH"nÁÌ5|=_é ¡ïß| q™à„÷pP¥õh”> $â6 gÞëÛG9Õu,åZ^´9.ž—ƒðãmæ§œ‚‰¦º²5î\ËÚIΩd´=ÏeWÞNY+Œñ×`ž=ºÊÙ²ÏÑÑUÓi\ôcÒ&jòë—^9¼oœ1uíª„ý¯)—AÈÕb©vÝîH¯yHÌÓlä5æËꬄ$v;„¾Y;™5q™PG˜Rk4›38«Ièò3{ª5Ëjjº{©¬±—¸ò76©˜7<]¸*7šAa„fÙz»¶J¬œ‚­CÑ{î$hhq¹K¦Ö7„…`YШ޲øTø(åOØÑ“œçÛ;3œá¨D7Êïy†LuœÜøB8Wq>] žê ëÅdûÍ £çMmÃBëV2ß#[™™t$«§<¼³Ìc7:aùœ©;êõŒëœ;™´¹÷c ß&㊥¸Ú¢åç„øÄVåìAÑžÚ¼R ‰nqÞ%/É´Ð4>S¡Mþ¤@e†òCÿi8®o%qç­·Ç-¿^JSß87Ë´ÏϬ‘ž=LÕp~ ü‡rV§¬&dA<ã[«–®ÐR¬ ýQ 1ÿ»µ³qF+ªÃ:0¦÷çcTØïá¥R¬œÖ³#*çgH.Ïz®(.'¯ø2‚™Ñ·ùð(ú ê³Ð¦C5à²çû\ôª7' =>ð„¼PP±võÑ+` hL¯b·Úc, Àl¶ÓâÀŸ“é…“(Îòb\ÛâG01f¼cÏÖKð1ª$¥ŸÃ_"æö¯Ç͸‰ný'8plë¾`Dz~¤»r¾îµÏx•¨ ©‹û.ÙÜ0¡©}È{·ÑjEó-Ƭè‹æ(d×!yVæë¸˜Òp×Aòe¹ð ®}Æyä´É™ÕasÒ|h„sµ79çP,Ȧ¼2A‰DmÁSú©.µà¦›}EBðLtvlZ±ˆûUÙ>Õ–…ÝÒ)q´ &¶ªBON²ª”6³by³`$À#Û/v¦ÌÏ8AŸ ÀâÙ\¦8‹cÉeƒnusL¼È|Ú[­ŒO’ý:÷|Øvt¥ì&ˆT¼?¿®ò^z ¼»öGpK¡,ï…?ÃUëjs8»åÃ1¿_ë!ýûÆt?,ic gQÌ^Ÿ·àè:0¹UKš·Ãz¬×ãU<²ì*pS ‚£—ÇÄlÂA?È%Ã)c!N—{3ÇèL—Eü6Ö¦·p ºÞ æM—Šôd~í•^R¯&§Ç_ÙÕún9bÓ þµH6xÔç/øŒ$Êj×?Œ„‹Hâ`‘˜Áçåq¬¢¶!qÃ…fª­~Éÿ}ÊYÖÒb'Q" fÙø€£¥Vi.¿Ä„R¼úôèÎÌÊ÷¢¸ÖÅ±Û Ñ.ïgÍEÑÒ-W-"©ó»¹‘aF8d^³ýQ›>úùTƒ8Qy†sžÈÏ};L{5q MõÕºòZhqæ'¶žúÑÆ®PM«ã 4n5&=¢íÅï›Z .Æí.ÆdýGËm’aÌÕ_æ.æ–§L4Ôû–>‘'èc[\#Œo?”Ø1飲РQV˜r¤AÚëUÝSã× Mj|F¸÷Õ#ã…«ó×KÅÈ„wØŽ—„IÛVùõŒ"¨Vý]Cþ½iÝI k¬I‰þ'dìÍÚ­‡Ævë¢ÀÁ|è´ó+†‹u¼e½ØË¦ÖPÅ¢%/kHqJ‰´èO…DÌy-H/¾."Úv⹈!•ŸT‰~‘—h¥¹âV;nñNWÉjÿ”N,Ã[‰Ñ µo’1OH©Ú<‘>Ù[‰ÿtÜ%¬š÷Ý !—KúÈš[å Oá Ø9_å÷þ⃘ÏåÙwøõÀõ*ëP ¸_n8M³¿±`JÞS}öº*A¦c£¿ìh=ÉbÜÇNø¤_0áïjçìhý Ì³Š(¥}õ#I~¼šžû 0TYoD !²ÏrʨŒ~QÁ£nÿqir"èÃ'Ãà+º /^jlv{Šní­UY#M}¾¾ã¨á1ú\3 ±q,Ͳ@€Áx¨‡×Y©ôƶ/ŒÜ:âj5dtˆóËPÕ~òÀà&ëg»ÕôtéV:ßµ2eƒÅoCÕ$MâY$%S¥%EoòXsv9|óâ‘©2#”´ü Êw8Í¡ 6uzß @C–3×ÏE„ÞhMvb„4¨kž!a8$̃׌ÖÀiT8ÄF3¸4é¥ʸ÷Å’ àXR°éüÝõ¹’Ì`Å`¥O²|WÏfQ‚ƒh1ãN‘ÝvèLbÉ4måŒmÐ|X-iˆ~ãÀ¥þH)FWùØ}¯õl‘ÀóiEµ‚(§µëOf¤h¦º E°µ»­¡£=Ý4$>ý¶CÁ"ÈÂéÐüi›‚pšö”¦µ$Ÿ²9Ãó‹ :ܧ#3E@­Õ2ÓWáö‚ Å_†uj“èucWTQŸ2i¶ÚQÎôû‰Ž4_ç—*å¬ÁØã’?IGü²ŽÎÇOmEA§Ìˆp=1zÜNœ¡i†bþHnŠX‚©Q,ÿŽŒ„]çê“SÌXÅ ·µDŒ¥äNQ Ш¹ë›˜ÌZF)-ûÕÊvSuDQ°áRP0s¹Û»n\û•óc³É©cD—¥˜ “¨à8_1zßF¼]„À[oø+’yGòhP,Õ$zÞ½’SñS5¹:{eÀ’‚k ÕùlzŠŠê5S!ÍN e¶à ‚FôÇsˆšN<¢ýêUa,FKX}äxšÙ7Âê0Ü÷M‹dnïáF!¼Ÿ½¡YÀl¬L‚書þãÕµ_ßq Vôi¡ Ÿ,J4Žã6œÀ?©G"ñvÐðóz9!bØÍÅõ†cc*’,µý€.Û+ ~Ç_h°ÉräPwõº­WÏ®&…YÞ ’´±;[õÖtÒžAææ¿c@Ä­ä© Ü^ LžmM彋ÎÇ r#/Ä”ê;Át.>’CdÝÐ^ùZ‹@Ù–/„©Jý~â %OÁ.—t¢PéFû6J¤°ÜˆûÂŽBUb¨ UÙùG0ˆ³!HßráÑ@¯›Úid\–xuþRÇ—¸o†~EŠóCov½aÿTèí}ü®d)ÔuÍ/ßœ[4éd.LvûE)ÛÞ‡æõa7‚HÍ¢Ï$j¶}Ca™hþ™ùLDÊ}Ǥ’¸>ÄuÏ+<:H%M0˜0<¤”‡éeAÊï @0ì"šl¦RM÷ÍxRýÙÚU­’_¸]2„B+t ©´7Ád¿à|¿$õ@Ù$ä:™HÞ'iì"yÇ%#„,HÕò ü(ºà*,Š›šª[1×r:á‰p&" 1f“H X—“µõ-•ŽŠ“Ç¡ÑÁ…X™.,᯹pÜÞ2ú™4ó%Zäl[ <·wõXÜBåz2ÔT@¹Ó/Sä3\M ®ôa¨Ñø'`/*Žbñ‚½ëä¾rˆ²ôŒÎ æáyµo§5ÓRŠnÅ'qÁˇòÈýi“$×Õ~˜¹,´Úõw…Æ&(ò™ &ɰÐŒhßyËýh+òù°¦þ®'Â}.½ þ› åñ)s  GP¼Ë‚·£0ÀçIÿf«±°ý˜îÅ’µÓÍgšžÉA âÎ'z‘Nf*ߥ&›`öµ6/vµâ…É–’Ab†Pלh·}tЮæÚò•q„šÐŒ?Õ=Ñf<²gÿC¬Ÿ¾o§ÜgDÊÀ}µw>@ô§,™3‚ˆñͽ±I©A®œÙ”¡£!½¡5:ñðÉ®°-~bK9ŠÒ׈@¡;z즠ÖÃ=[ø}©eºÛ›¥Øš>&EzSïVè>U3ôøRªåßéõµ0'‚U¥[YEŒeQ6™‡&%´}x§Eëjmïérù³¢ˆÝ ÕMPOÓl1ìnš|Üp‰êþÕ·¸i^a›QÃÏK4˜n±³Õði;å¡ Ö7s×PÛ†¬´¼OܪU­À,ºÞr/±®JÔ`^ŠÝÚS»ø‚æãþú”ŠØ>Þê;)Ïò½§kæh Îr¥É£f¿ŸÑPàß12< ±@kV*!—¦£à[.W&rÔJ¦iÂv£}|ù’vØPõnkëE ¾ÃÜp%¥¼‡³ƒë»aí¬2Þ”ªÁŠh,XŸü€! š y[÷E6`짯´ü¸¹Æ÷*n r9³iÇÒ èLÿþšäöؠϲ'ô†žÑÒj+f¾“ÍÕâ_pˆ®ÌbÚØ [׌«múö" \P“qÐ8_ K[.ɼ ß÷<}ù"]§¼B5í/ëF ¾/†—XÖÜ‘à…ÑCÞ:UXÖìî]>^´8ôTº¾ƒ7OÄXõ¥UYÖíâ|í}á¦M.â`%o‘ ÍŒžBV%žé#DÊáɓӊD›ÓYq›j²ù¢2lžC5*§ %øtÅô+Âj¸Ñ•A¶Æd²tf®t™Áþç5øP\„ã È¡ãëçŠÎ9ËQ¡|†3|‚xš+ÛÒ´w¤ü2üØ}ä ˆ‰U M0åþ&Át’e*hÃüdŠÈ¬lÐ ¯•Ø›èW?îßÚ3:uúã6Ùz‘AGdgE_Xnk[†©tà DÚx%xr{"Å2׊ µvÉ&ĬIÞ#žoÄ:Å:H«EcpÝ€òÅ<“éktÐØ!S®8Xeúãózëàw¸Mi †;¶Ywè {•`u¬ÝË¡È4' U FïÍÝèÜõO©íÔ&¯±š(ß P©HjT`o\ßÉõ¿vêMÀ‰†ÓóÅùô3ƒ™B`ñtg’óÍâ÷±2’xâÞfæŸÃuZv jWßa¼áîyÞ{ DØÙLö![‹†Ì„SÞbgQ²b@å ìt«¯Â/‡àä}_­G^'¦ôýI†ï·¶ Üw ‡›&v­ƒHAÕ‘Ûêy Côül¨¢Ìãkw´÷«”Ædáq@azIðM¯ØÙð¹˜0Ÿ8¦¥+‰‰ÎO?‡š‰è©™b^uÔ¸ÍñƒÇðf`ÚµT{&* OF_:-¦Q·Ìà²r*Qt~Ç^h/ÇÍ\†)%–¬ïHIÏ)§ÕNkr§š8èË©9BÞ7IC®»€p¦âäd1Ó+ë°Ú£Çe,0ç GÍ­ÄŠû_+ò6ÀŸ8$áV0A Þ[ ^õhÉÅïÌhÐZÝ;éP}A/©TöL| mÚ·˜dnûÂÞ s‡W,Ÿ¬ý¿Á©ÏÎp-ÿš¤|kTkcóLª´ìg¨Ái‚q›ôŸ¨6¹~ ‹Î êõ¨ÑðB°ò‡rZàéÜñ%8rÊÙlÀ‰!»aÃfnk>p÷˜ã+ÓÓÄ‘²…EûñÅl-I}­Þcº‡¶¶Û’€[ éz`8ÂÔe1ÐE ”¶‡Ç×ix_ô™ºü=¯Žöu ª¢6íË!ÖT=ÚWšÄ˜‹¯H \†¿¨=d+ùì) á|ÁÌ,:K>ÉT^âB®bž4ùl~èšf˜ªÓg‘þÅX5£˜/ýò8Á¯íƒ½Ó*c=aþ¡fïn<èyÛˆõñåµ°">ô:vîÔËÝ ‚u7þºÔ½o2œÕgk‰sÕã’™ÿ¸A† »2‡ÈõìU*¥[Ôãç:¸£›OnÝŽ“WØ8Z5˜I‰«Æº<ªbØiŽ¢fÉï’´f¯dl›âÆÄ^_-B æƒrD¤×p«Y}<³zÔ”Õ嫟¤Ý@&¼|†’÷Æ%Ci&ÄÙ\4¿$K;Í;nÖç®@ì~4×ü& Û 2=Ù-H:¡š,©^–ôv]é>SD:´°]›3ïŸyŸ6rÒJÚ,9±!¤k›/ëtEÞµ¾StX„–GM&À›@$à J6`’îä$øÓšŒMñu>çQ>q”Š@aâôÑ"°zä:]&©*ù‡—Ò’Ô[âx]•üîr|J„Þ.¤}ïX/}™’¼+Ñ)â{QSÅO\âc±÷ÆM•È>”×C‘òûçÕ ‹3–û–Ÿåe\ }ÚÆàX‘¢ø€—·Þ=_YKpÅ‹)W+¼ùýz¢•ˡЧ—AjJB&€ªáSÖjïz…¬m®NC°²·˜zóÅ´*j9Z·Ìp–êIžòàש¯`ê Áã¼gò}i‹´¾ÙõØTð›ô½s¸tų³(_Ç)toŸq¥®o2ël/¬Ò& éá¡}‘°1hl¾žÚ‡eu÷† Š;Y7uöAmX.4I¨‹\ŠòŠi„éè7”r§ô"|úRÙ}ùƒ·c6hµ¾a-ôß«Š&û‡­‘ÂFÃ,ô¨Ó¬¦JöÛ‡4³NCL!Ùãã‘¡ß-òb(o3 ñ^qtíôHjŠ~«Ô#:ÄBKsÝ5Õ¯»aŽGëyûÿD:òûiÂUtw¢[^$Ø­¿§1¡ÈÁ •Éê(Ùøi³÷Űޖæ) ÅöJ^„Øž†ƒ*úÞdU÷Œeèö5$ATÔháþÓW§GýýËêáï,Tßöw Å1IQø$…ÅÈW©‚±ÁQÓˆßwŸ}ÜÓ&HxÉêÓ3AIÐãÂÌ;åYM‘xºò§ñ0¶¯ÆÄØÂ[6>×ÀOÎiÿ fÓë7À âBgê“ Ó†}ܧNtr†¶ë‚ °r˜{fQ8¯Aå«KRȺÑPI%„BHóˆ•Pü.ÙŸ—sâ0ý©4÷lÞHJšgË^)(îÆKÍ5¦¢$n1rÛHÊšþ´Ž£L(ޏf¶j ¯Ð"T£H˜'ÞSÞ ‚VY€ÀRà¶_F–ܲËõºzú6 áHýùûøRÈyzcoÅ ç’Ö¶sZ4'îSBôý‰²†k¾³o æt&asn5›³Wï¡[ž"dïȨ ©A˜%vQcJMµ#âØ`'sº7¢ P¹—BÄDÙÙaÕïÀ)Q@]ïcðÝWøI1–óuF™þ¦Ú¾—ÌAW` ˜dªÖ¨ÄÀ;2d²]n).å÷0bUÅbÖ"<;T$þ˜û×lÙS‘»Ä!ë'’£SÝ)9cnˆú ÷fÁb!û¿Ž¼x°Œ;;¬/À1CcQ…÷µz¥Ô²v—ó¸U½ÔûÊ"²ªxí± 7ƒKøpÛ í¼‚ãVZ†ê~èB]1,iv°®°ÇúÄí†:r¬xïŸdàgôB`Ø…ÂJ >Š}'ÍsÆYVF$+à†¤ÊHìACÛW¤üLmVƒ’†4º"ûƒCÌá7£Þ<Úk2‘À!ÔÁ¾&œA_Óûë@Ò%\¬£Ä>ÂÌ'Ó·O²¹àÀÑŽÓãè’ÒÎ4Œ í{83<"C˜X| K&É¿…Œ¾=xÑ@äa«–À3V‘‘ ýÅoræŸÆo1E;r°åÛk±’&¢`}›„Ä+Kƒ\3áê×5X(o(û>6‹PÝUJɵèûÇ:{4´š`gáFŒ‰U[³…€L{*œ‚‚tØ€©îcyà;SK#i4ç´ÖP‚¹Y³U³ C”Ï Œœ¤Í‘©Îô¸¤nŠJ<57 4WÊÀãŠ&•¢W¹„E&C÷ÚÓå\P»âóE%Î[èD‘9|Ì‹ÌÄr½SÁ®«ª3%<ü37¸zS?åM‘°÷žIédCJûìIàHwM+{«RÜÙûå°…ˆYççƒK¤¾'âúŠÎ7„)å[/wà¦<&a\•GB 'ê\ÝòœçhÔL9nѼ¯½ácùáy’¹aö<¦Ü¿ZœjO”¥##º»ù ïLâÝôWXdÐ|ƒðùÞ´WcÐaª“ì«ùÝhË"DäT=ú«YZFÙr`Æ 1gûë¢;N_gS3„Jj’üUñ{ì|ò#͵žœzšÔ¾{¾P(ý‡: ‚}¥JÍ`èg"6RDZ:\óŽi2Èe1<Š)×vÛ«R4W°rrÞÌ»ˆ}šï&v¥ÛÅ¢Žü§çõwîÙÈ< ›®-×ÎVŸð´Š%*²F³ÆqêÅꔹÍmÀ犫“rYÜ}Ò?°‹ŠoX˜OL$´Ñk¯ ytå¦HŸoëV“-eO¸ jC½Ëã(Âç’Çæ0U ~ºsQ~¼—_LÓóŽн½©ˆ iÓ„4 ÓfLWZ1jµ3­–°*7e©?žrGuì1~~9ÿà²J‚å³ä1[%—,ÀROjt.p«#ÜÍÉ‹ïÜD; 8$öÊ´X²ÛÖyI#ˆØgbé Õû¥ç¢±[yÞ‡µî÷UÚ?)eÇVª§Ý‡çd½@Ú~óä»Yå8avWÇ©Îi‚êá†wýкe·¤c¹ÕÎ%[ÿ@±DnËΠæ´çÚ€±VB;eT#U‡¶ý¸Í¼¡ÇLNx&`˜üœã܇íR±b¡8™v”_ò7æ£4S )gß8e<›ÖxÙ)B" ®Îcõî”rzëSÕaeýúbð æàCò™¬Ð?9˜®1Ú±"Å­pî+©`´9¾Ú—¥_çLg4¥á6àºÒ‹ý$8ƒÈ’9Ê­èÀÝgõBu’6Ùï"Êëz¹2‹KÜü\¼£ðRÛ(Œ{Œ„D„ôšÍuûKÒÃî ' ήæ’ýQ(Z¥æõÆOßd®óËcáêìˆ$¬[oÓØêÉbíŽÎu†F•MÁ²™oQ໎ҫЍØ5û>¨0Š[(ÊU­êœM_‘B¾C ߸æCpÁÞ÷*ýH[8h÷¡ñ‹3M×¶.Áª3¬ߥÃe §½#Â$†ZÆãçlÌ¡5ÐGhoaÎqé&»ZX`x‰%aÁ˨l²êi¼'"ú€¬׋ùÃrÃ,­/F¿0¨¿QOeNûJu¹¶†×3mô¨äÛeÔ9l»8WƯkýãXaž½Qðó“»+™žå ÛˆÎò„#k"1'’WãArŽ/ÉÙzà+È+÷#×îu® EÁ (ë9«Ãž‡‘!J:ÙHQ± ÏÝVÛwª97õWæ~¨Ð^A/\ÎöG6§ÉCSâ> Í| ŽñíŒi~ªKgP7YÚJå0¢»­ú‰@u熢:³jé&èËÀË~JŽ*u€€€új8A¾b@ì4’ê©£®ÍÒK­ß®(ýMçZtOeÀçÇOÕ|MƒÔyᕜ«cÒÇØ¬Ï=£éÛ¸Ž+¡*†¤Ó¬mj¦ƒÀo}¼Äá¬àõ˜$ªüwÔEKrY8µ_ó[×¼ádEìA½ûëݦ¹š)Âm#ÔÅUÕmz4#\~éòiýôÛÈ 0}¤àí†FÌê·f%dòþ¤° þ5·(×- cú2lÌÐ|šx ­Ù"°FsömððK¾ª~²ÁN¸zŒIøì³yÂg5•J°hæ» ògiýÉ`ã—¿0¾ŽGWõº¢k {E)UÌ;gsZ3éEI‹’Ò2Ñfŵ,úв)#À'_Zá} &ÏðfVÎ1&{~Wœ›WŒóU`rÛêòî£)©`»8cÓX·u9Œnöf¶ÏgÓ²ºQrÓ´æ“T*-^hø UvÓ儽MûÏ®`Itœ[½Un ²ï×¾•ѶrS_ÐY”`“p0ìÖ—!ôÙ ³‰–™Çï ﻪ¸(LÜtÕ Zl^TðÒ:¾ªM€Ó(¼Ø‹ælD·Ì)Õ%)Œ¡©g¦ªêUÝ4¡$ćàZ ÁŸk§‡­÷ºh:ÃwÒ½Jµ‹€þÈÈeF,±° éè-¸.2ݳþë3õ9×!²@¦ãE«Ž½ÙúÁ^âÚKá£êÍ® ‘þ».âæÇiJ—Öf4–f›†øëæ5TÄŸÕÌÁÊk™©ÖŽ—0d “ išçñõGÿª§+Z endstream endobj 403 0 obj << /Length1 1825 /Length2 10559 /Length3 0 /Length 11695 /Filter /FlateDecode >> stream xÚveT›Û-îP 8‚;ÁÝÝÝ’Á‚ww÷"-EZŠC±)-îšŭ@±yôÜ{Ïé½ïýx#c$™kϵö\û›k‘V[S ³…(Â\áœ<\Ü¢9 =u}}n7777/#£>î ùg‹Ñâá …¹ŠþÁ‘ó€ØÀcò6ðGªÌ êå àáðŠò‰rsx¹¹EþC„yˆäm¼¡`€@æ ñÄb”ƒ¹ùy@íà;ýç/€Ä àâø+ ãñ€‚l\6pˆË㎠g€ …Àýþ«‹¸î& úøøpÙ¸xrÁ<ì%Y9>P¸@â ñð†€¿ÛhÚ¸@þnŽ ‹ ïõü×’Ìîcã<œ¡ ˆ«çc’—+âxÜ §¢Ðrƒ¸þ‹¬þ/àßÇàáâù»Ü¿³‚ºþ•lÁ\Ül\ý ®ö;¨3 ¥¨Î÷…sl\Á¿‰6Ξ°Ç|o¨³í#á/ñ6E€ÍcÿîÐäuƒ{ryBw ü]æñ \Ár0ˆ+Üë·>y¨ôxò~À¿±“+ÌÇ5àluÛýnìå4p…º{ATäÿÍz aý³‡ÀÜÜÜÂâ€ø‚€¿7Ñ÷sƒüµÈó;üØGP€Ì `÷Ø $jyüÁ ð´ñ†à^ €?þañðÀP` ±‡ºbýSý1 ±û~tÔ`ÆýhB÷ïÏßÿ,}†¹:ûýCÿëAõ4äUµtØÿnúïeYY˜/ €“—ÀÉËÇ䊂þ»¶ ôßBþHUqµƒDþ¥÷ñ þ£ÙûßF`ù÷œ°þ»–&ìÑÀË?~7çà=~ñü»þ¯”ÿ—ÙWùÿðûÿjRôrvþ‹ÁòÊÿŰq:ûý›óha/øã8hÀ‡Âõ©FM± õrùßU¸ÍãXȸÚ?Z›S„‹_ð_a¨§"ÔÖ†ÂAÙä_aƒßcç u…hÃ<¡¿¯'7÷ÿ¬=ÎÈéñ:ñ|tç_KÇQúï]\A0ðï™ãØxxØøaq?šŠW@Àó8œ`ˆï_~¹\aðÇÀc‡A;˜ÖïG+( Êÿý ‰€ #!nPñôÈÔü €†#!ÐæôÈ´ý=Öý~÷ÿy@È´ûò€ö@~Ðá(Bÿ€’ÿ€*œÿ€2\þ“tý>Ê€ýe¸ýe¸ÿexüexþeÀÿ€GãõÏaN"²\è„O£‘”ã(¹Å5Eq¾c°Lœr¦HK$Ëy±'ç×§|B[yiÂ()7J¨ #yvmº³ë®…FI]YR©µ;Ç*Bò3üXKÙ9XGmf°SžÛ1<&[µ«yò†YÕ»ùðêiu¡õì\,®@ÈL´¼á»-¥I…hçhïO‡5éNÄeñ/™wÎ9ʯ¾¨#§Ó3Hxé|ˆx}Ê,—Wœ;å}¡’¤eáæ#9>Ã):‡“ëˆiçvPæ |œì_$Tq0*8­Ìrò‚pª :5bM¿…òB3Aœ$ºX…!FnÁ(~Ü~O9J¦­åüòÁ9mKQ0ÍÒê9¦Éílf?|k T_Õ°r‡àÂê¬%ß=m­fcVBuÈ>Áò|xWmcŽ(XAQßL¸§ÍÆ7ó+ó—’YQPÏ”·…é÷îªí¿èÆqIö´ cÿÃÉw!ÔÞã|á2Õä÷$Òñe,&wÈg^Qÿîk\ô$ÌiGKˆeеÈ'Åã$U¸xM\d¨èÛSOqýöõiëª|ÍsúÞÑtDp²•Ñ61S-žÛÂÁïÆÃÔÅ¢˜è‰ó  ' =ý!«*÷Ìkd4õVÎ/ÍubŽÜVJ‹*T`Mÿ áÉ×m•â†ÅiYŸ ‘ó!¬Íáx"-—Æþ–Îå TÃÚx75*û0‰,|ÐGƒ  ÅôÌ9#™xÆÙ³_!·³ó9?÷ý‰-uå0kìEy4'áÖº¿ýS/>“v:{~ 7±tƒtJÏ¡ Ë†ó­œ´×Èd˜5-‡·@¥Þ,QSSfýŸ:r¼x/Ð rÊP´ò „Ü Å©o=‡1XÞã¡9µÊPP³jpáY\w7êšXN39®ùÖ^YdÿšÑ”»"öþÚþYÆLÖóuOøüçÁWK/Ì´W+ìXðâ\ýƒÐ,ÁÏáP€wÖΤ ?—LÄlšòp=bRœY‡wÃ3òhˆœÕ!H bXyY\R–ÿz½«Tù™CÒv¯î1>zJæ[ áY*G•“파JlÔéïÌ䂦¼ÆÎÓ ;Ùnv×CXŒhn×á2â€ça6: ^™w½}2ûô¼¡ñ>wR¤ÛQ ¥ª¶ÛI¨DÎâ+ 2$OFc4»½ŒÐƒKȳÉKÄr XKx×éŽÓ†.EºJ7oÞ>Oð‘ì¨Éo ñï4uždi ªn“ÏwÁ*nŸ¼MZWÑ~uºÆR’¤mO#µx÷fsÅAU‘ÿ°á!Š{ÎAŽÎA¡¦l‹hþü/_êIêû_M[þühwW"²¯Ü- %ÅÑÖG‡ýå²ï6Ø-.ù }…͘j?U®^†üB©çöÄ9ÿtèìÖI›Næ§¾”ÜýÜŸ «Ã[ï~ä¨HÃn¸YÎÃP¼53 g6Ûu·lNeá!d´-¿µ’Ϯߗ£ó–Ö!¼xî7`U~¹œË<¤BË ³ÝF?ejB×%Ðñ“«RÞòÉZ£’¿Õ7Û!´ãƒÓôA‰váÉ¡1Ô/ü¹*‹^©H« XN6tZ}xo¢à¯Wêàõ¤i¿ÝŒP¿—{R%’±ÀÏuôºúxT*ÓÍ 2ùB7Í;>mE¡£Œ1 MÑNò¢¤¥ÏaZPüÙP°Í&·û¨£Uy“äÍ-Ro ‰› o<#…¹kžN´"óŽªÀm31Ù„Ô?) ÔãF·‰÷¸–jƒDª¿˜¼>‹%ˆ¢Æê:]ê¡ ï? gà~¶pVs{¤)Ç2íR:}3‚€ðéy=·ÿYØIé¤Kvüd·™,´þK¿”«¡õƒ(±U™Ôn’Oþr'Íž‚FPbëy㻓Ù>Yçm®œîYöþN”Q¦§ß:¼ßó~œÇj¢Z¢·¾5²ù>ç¤Û:¾×‚«>¨Id¡˜¹_:˜û\á¶M_{Ø’wŽ-oâÐj{ÿ•\»#qmé¸Í=Ys£·ïî n-ª°•~Ë7WézîØÙ[/WÚ賿I·ußn:Îr[‹E¿n‰=¶R7‹eÛä5äE -[s—§üxÖ±õËê@n¸\›ÞÌÃTm¾CÌóÎ,äc÷Éú&’ã!½Wkû0¾(3„€çäOOî7(^þÜ_°ÕõäaÜ1×¼š Sk5ˆ;ë¶+ “Ôßo:/Ê©À™3,c€-Çi•ó6aØ#ÒÞ40²'øÞ„)œwWÇc}$nT}ýêB$¬*Ž»tv±©ÇãTÇbÛ¸ÉÒ¿ qAk‚,—¦—­h´³ 0ù\’.sMY^¢†·k×VÄ€cA!Œvã£V%šî©%•ÈònúÓ–öYÖò3ZÏ÷J/͸×nٳўõq_ö6šŸã¼ ¦~•a·׈T¿G¿P$•h$˜Ï7mù&©øH£ÂQâ:•D†ÇaA¦GG¾›þ¿ m\’‹ï3Ò9å*ÚÆ“éÀ¶ëµ!±fkŠYÉé<ðÐìÇø‰~L9vÐyÊá]çã;âû[lkUd:‡*Uo£œ–8¿…¾õØ!©Æ¼ªM±Ùe ¼­1·nåÆÙ¿K¾ôÍBÎî\H]öþ*—šO7à­jo?ôcÍa=¨Èè«jÑÞ³R1½q¾›ÏÍæ,è-¡àô˜ é*sÙoÄ‘3ßSvð­]…¿3‚}ÏÂx9©•»Y7ß“(/JúVì`äçj 4`0³†ŠÜÑH9sc¯¡N>-TžíÊÒÅ»Á>fM: žà,¼Àr q‰xÿm=]ÙŠ´²¹¿ÃaŒrØWÁ†ä!ÁÌÁÒÊÜÙ¶²´+»M1óÇ eê·ÁqþTUt%ZÜEŠo•Úy¶º¼áb…•Ý­…ì˜ü4E_ŠãgWÌx¢dŽW•Ú®OØK6N-èƒ4àØ9/‘¥Òì)y…ø„°ŒøÒr¹í·†v^â^ŸÅ§%¬*ódùã2§ÇÃL{@J„¬/ìç[/{•°å›É®=mç¹V•hÂ?˜Lï ²p®!_Mt³[L»4ÙJ´UõŸ^H ~¼kÁļ·½| ÖÓÓa¥¶Êž*ú–Dqÿp™*ñ›ˆc˜´v¢¸y‚ísVÁ¦µòèÉÌ‚,Ãn «"?$Dj5¾,SüO‹/I´Ö±DºVðj4•3ÈzªÎb(ùz©{O‚v¹6/çUÐŒr¿ü‡JeꘌŠ¢¬¯‘bo‚àýÀµe‚ã$Oeo:Lu·b7З›U¶mp»Ðé:_#;&Óè§üþ7ù˜`Dzߢ’H”‰pÛ7+ yWî@øu’ yo†ÔäYƫ̮u´!oÆ™O_ÚV=˜µŽïIth:lžÝkŽüÚÛ XŸîzK™‹>ÅJEX¢c«À¡‚ƒÂÍèVÀÁÿUJ¿êgtãð ÿÁå`ârÀŠÁ³‹µOƒ‡â¬`ß»ŒÑ#‚É 3¼y ?5ÔL\ݼ°‚ü F?²ðpŸd¡&í¶<Êçäêïý§Þá áˆÞÃÓ–à·Vyݾ*[ؙ¡å¡iØz¤ç>y(Bí^ßê÷¥†¢Â^2©|]þ¦²ö2àqš} ôk¯Y8ý^Q.—v7è‰ +(F5—…޾å `QzÓsͳ)ÀíýJ9ãCdøwÜ}ëR•Í=¹¹¯bQ×¢‡æÒ…ûnË®³ u‡kcãÔ"ÿ€È·_%¯«õPòGÆF íN%1ß×⚣H˜öµc{ác_ð ”ÅÌš^ürEÓ? /Ò f#2+§j=u[è¹–q 5,´d”C ¥ÔSv~nÔ08Ö#Jš´Vì‘‘8ŒŸ²£ãH þ*}p¢@•Šl\\ÈPŸïÙY Ód˜Î¢cܦÉÖ>ͬ¢Ì½3=CŒXö/qÆw¶Ù ¿Ê9­à0ìX:Öò[HÒ ñØU¬¿–R~8'Šá|:ƒB›ŒÈ÷‹PÔñkŽÍЉcÚÑVI)@Öšú¥¡W˜â‚Ý\M60<2T¿ÁqÙmÍË'Æ×'×û±,—x.ˆÆpIy¶.êªyå ö€" ŠùÁã”ptå¼¥$ýœ©öþÚ º8¾[ÛB$Ä—¿ÖQ9+orÜŒ¸•ÎÇ¡Bí鈦®L§Zw0+%ÆüÌ+¸Òºš9¦>wŠdºIäúQÉiÎ Þ8Þ|í“»ÎÊ…æ•¶ÁyKn¦kuß,Dì;WtÞ°cö>íüWÑ&gvnyL%ÄWlš3}M3™ËèÀ*´¤ý{&ä%Ãá}lŠ$—Ï{jH\ÿþ%éÌ;çû1¹Š]¹¨Ülzïêá#€«ÊGÞ2‰–¾É•F]#kW£-òE¯»'rñ^t_i¿`‰³¬¿Uxc‡3¿&Vë°–eÙ+KôZß ÖMÎn•FlÓ9<=‚ Í»œ·/!%ÍyÂHYÒ׺Ö™üKæ)¶ñ¿¾ 0g3>q?Ñfï%öÙ§w—™f^°à7JìRûÀ6GgQ|Ðm”Ee‡¼—¤°ñgS“ofÄ "BxGîñÐØXlç>«µCH¬jŽê'¨EäÙ™~¸þe(ÀÜýûÌXº‡§i½w‘ð.Þi;¥Æ%’·ZÒµ‹Ô¹Œ³WÞÛµôJêú¦$w N„=À7‰"Q”MøÔÃAŒ 7C‘½Mº¯ë£â_}9Üò¬3Ïnô›{í]³²ÁŠ®³F ]< ฎÑCé¢ù²€ŠVU¸'é GÜò…üä9ê›]s÷Q°×ïij\Éc;Y'm>ÏÍJ¥ ×/“½Žï¸8¼‚ÓòðPMW1}3ÿA™Gʳfüs‚¥â&ÉÓãÀñýë÷M©»žÛçl2ŸU45_‡vüÀ¼£ØÑ]v›_|‡fó¶qÖåBˆ›B“œ k³¬ÝFNAÍå¹Òó¸NÅSÀ¨oô/ÒÈ9oá±z_'ü¼€¤½ôu‡ ÖúÒ÷²Hœu¶bÊloÉMߕﶌ'Œa /s½Ùä¿ ¾Î~ÖÝó‰}Uµ¥ ³%ú`Qèô…¬Iò‚³c,ÀAFE¢vø•˜†òwF3NIçSÕgÞÓÊM/êʤdÖ€äÛ(ÚýF³fÜèE6„wÍux¼^ÈÌñ§-e"…iFÑÅÁ_LtÀš’Ý<ÏWElã°¿8bă3ŸEq?›[M{áY>ÊôàJÊw»ÉQÓÖ)Ð|¤ÙV¬Š2µ@Ûúö cmŸÂµnrê»ÂÖÜ5"ñ^ƒLÇ¥"D>å´5;cuÙ3c£VÙ¦ãLÓd:ré‚×ÿÆW¬}‹UDCrþPO¹qá5.Vý@ù‹ŸN-tM¤‰µêyÕ§½Å]ÿX9@ÝW'w:øD¡k€ÔBE-¹"NKÂÐGü(LEêM.§B»£,­Ê%…ÀÛéÏúöÆJ!ûïDö7d¯H98Ä^úˆB|m"õ¤uœ[ÏÛéè0öir'üxu.×K'FƒÙæö>B•y=þ[ãJ0•0Åú1K¶ñt.lþ/Xs†«ÛqO œõ³äh}fR`$dÊ [u{Ýþ«½ÂE<ÙqÙH9Ô1êÕ÷ŸQÌiS„<¼lÞXß]“'=…aÊG›Ia39Ü£ûüa˜cß·ýÒÕßC`ôÉâæœøÇi=(À£S‹óZÏ`5¤•*¥÷Û1z@ªÙsìõÝäÙµåáEΧØ_ó^‚;€±?àxQ«`i’–«uMû“ÉnœÅÁ:Ìïèë{RUã£õ0£<*,$÷¾ÜoŠ ÁV%^|þ=â÷W Dá¤ÆH>éz¥ØÕåøzeÖm¢×ú}ãÏÄÒ }°+“kÑhùŒ?›§Ã:»ã²¶«cD„_ýì]NYbÄá °Œóî ÛT·v7)z|»¬ŒÐÙ•(¤òù®ƒºVùÓõ”,½n-Ôì+ÌzÇtH/ ˆC &¡–j£³ª|FçC¼.ÃÜa]«RÿcÑð7µÓ$ò3tEûœk¥( YlXçÝ–fyÖõ¢˜º…RH5¶Íϳ¹\GÆ3'ÌV@:ó°:Q-•Fæ^Ðû/Õõ ìj±;¦pg_Çúôò3÷y³IM?Œò dó-%gLæÆüèô«3s“…ïjµ${î®q h8}íÜ™s‹•CŒê踘»%sžÕ­òxö`â>ªpÕQ½[0e6ŸõeÄØØdI”˜rdf ÔiéøðPìz7”JÀ‹èï.Ò}g&9Š­.Mp/•ˆFv M:8Ž(M­ÇËSøÇvÊ uÒ¼ÄQ”©®F{5ìõ验vkQÌÕgݘûnÅ'KQ‰…¬sÉËQ˜2óõ˜[”ÌI^å­óùξ~úÉB#ÊæÇa»eÿñ»ÛŒÍûŸœ$vôÉžœÐɳÄí‹TG®Có\½n©ÄÓ˜çŠl[íýÓ,‡Þ/ÔÔEÒk1 KêÊTø )¥Roî”C˳oâ§!&ί ¹«ªÅ³ ddÍ›%ùmуþ+Åe*ÍÅš[·}ÁšÌüQƒŸ'Çq­µí‰ù©ü~™‹¢.b ÉÁ^ˆíß"pJa c<$bot¥¡íJ@¯zÁCûO‘F*:ÑÊÐ{õ[&¯ êæ÷*½V~jY¶7¡yÃaU+˜Pcj¶Äѹ|EkŒßY›!ùÒ]_ª9óǼ})Ñ`o–¾•ˆ,ïtˆ·Y¬So>BU¦Ü¸dF;ZáÍâ-¥Û‰;lræ•"›w™QúÏXî'rÂöÑâ2+&CĦ1× û.çýê)[·>b¥[†,©Bœˆ7\$O jõ}smÿ÷ƒm,S±TO5ì4›å iˆâfSg®j–Þ°•M{'£fð‰–2çõÁ´Ñeé‚8£|« §ŒeþÛuL7ÚˆAx¯ª@n1ïMÀ”ÔÅ™¥‰´·Úná^y4ëÇañéÀ¸áïù¬„Õ!è"°’ú$¹Ù)”{ÓêåËšmì4–Ó;k¡›iÒžZW `ï˜rånüËî&b¼…Pñ½1Î\‹˜Áœ(Ÿ~²P‡£[®ò#Bƪšz3”¤’~<KCîƒ]¬·GèfH6¯–R«¸EžOi£Ï `é¼J]£€X~T$ž\lºVÛŠ©Dü’ã>i£J"ò—ÀÓ ƒ†oU<×DØçhÍK÷/uúnòd ¾…&è°ã[Ò¸8[®†’ˆGÛ4X“}lSÑ‘â74ð4‰_ö°0îÒDíÞ ÷ˆf&sDAƒ5×È‹!s¸tÒ€g¢n£ç"ÞSóyñë'Õø¥pfïƒn˜‚µ™¶–ýðŸ”hòfoä‡MŠû ñYq‡.­~@Á0ŒÎ<¼^Ò“|ˆÝ—p$*ãÝÿt¤D– å/¥˜¢ÃDüŒå•gÜ[ƒxj ýH÷¹Ûið>³·5GI¶2Ãõˆ¡ÂE&YѸ…RðÆnžÊV8©fð‰Qtë=WSìî‚G¥Á€vŸE!û3J‡×f¡“þ}ÖOš¥j÷$ãÝÙLé ½4ê­7gmZí|Æðu÷9®4÷ð6}¢~ª-òŠÃ ‡ì ”8Þ<Ìt”“K3À4±áÆÜ霸®tÜ eJÏUÁ°F,(_¥Óç'ŸÄFÄœ]òE'¤’rʈFÞÿÊë_9ôøÞ@œôö>¯ÿ ®øž¶ÊÞ¯¡Ádû 4šð’×… OºÒPZÑlÚóM,Ð'TÅ53ÛϱÖê¥xN“l‡›ËÓŸŸ•ð–üßìõÎ1÷Ú±o·ÉujŽ K…ÎWûîëšSØn¹HDÙ™¯t–?èÞ± ²0™Î(é“TA`ZeÄü÷LÇâ&Ð íq-—Š–c:Nˆût{FL@ÏÑ{ÏÈjŸõ®1Q)ÄoÙû× s{Se<ªˆeM§7ÄÖL[¼Ûo`¯‚ÉtS\_ëCÓ‡½ Z$ï,³¨úùuæFw(´¥ƒ ðÄí¹Iûè¾ã¨«ÇMRÖ)q w's«?þbáG!,ÍÐW\î çëljse®ÝW™/Tzx¯Ãëg ¸~– ËZúÍ`Fé–lJÅB>ŒïÂw¦uwtPø\é Îô&”2ëWvþÑ’âapÒn¤žB§õMm½å{±Ѷ}7òÔ™òRðKxXßx~°½Ö³¼—ºñãpR·ñlµÀs› Áy¥˜Ì#Wû"v²ç}¹#E/ŒNbST½Gh&ž"0-ÕÇ<¯¢Ußo^,ð.¿P˜ÆU {Fg@ñvù*×+<ÜéyAfZ8“ÄOÎEøÊÜux¯„Ê×/C¬<ŒGÒ><ûΞü«_ôÓѺ+H:¾JååÈQgœ«÷@Ns&MfÏç5«ÇjÅKT{â5bµB\£à—é8ì}çRîÆ6Í:1)³Ñãèx’ŸÃÉðt-£Ç>ŸåAZ]GÉ~|PTr*8éy¶Åÿ²¿$KNàèÆâ¥Á7nL [ë3Ò/ÏR¦X,“_'T¿ÁTHŠfS¢hyõ\ÚgŠì¤ÉzZ´2ú\~²ùS]l&ñ6Ľ!G<ýº­S õ¤³(u¥A‹\¹¸ÂéèMUx>:é˽!²ç!ÇÛѨ‘v2\Z†Ê)Ûë\ kÞu™jDy Ý[…àžÓ×è¦ê/"SÚiE:„o³{PÄÔr¸…:NñAt÷TD£Æä±h.S2Ö"}^hG6ÇŒ ɸìq5%ÜǮ֦H/•ž°ãèO¤îÑÔc®,°mSW³=UU±BσKâå“Okvx)15\ÝP‹«ˆºyžÅåÖynçÐ®ÇøÔܽóZÐôr¯\.£V[pÿBJõ–ÑÆ`ÁÕPû§D8>Rôt—ÑzÓýAˆ¹|I½à1¶û º ¢»àáJ2Döþ¸¼ŠÜÈLÐÌÐuÊD{½&É^œ›¥kè:_±«r¯`—‚bµW-E–@fXQY¦1¯,~h a¯D•ƒžë›e{M©²¾Ç¯äÝÕ²?š5lžïq/©Ôç á5ŰQreÛ¡»ÂAUQ©½¦Ûh$ÒÚýš¯ ùåÃ9DÍïl‘IQ„"k²2¡‘vsXse$1ˆUb&MKç0¹ŽÍr޼¢ p’dÓ[‡S¾ ”à2É<=½褔LáäN6mÕs…v‹Ûôê¾pC1ËîÁ4IÛyAÕøUœZ/¨¦&Ãó¥Qž×)yà=éªoÎÖ´cc†TX…9H)XÖ¾ft–Ø^p$§þ¶%­ýó­ð…©Ù*ωw$ŽÝ¦K«qÈ öª[ØÎwïÅ—ÑS “ÙÆÉíµˆ²<ÃëCÏ ¤n÷ª,ý^ëPÖ˜C hç£F)%!µ;´9±ÁàøcÎÒ’¯>HËD¸D×XɳDvÏå¶Áè¹i{¯ç`s`‚cMMáöÅÑÕ*·sÆÕ´Ù´ÓO'\0®’ß6yìeó3ÒOS­Q…E®@½Ó!(-²ƒ :·†»Ǻ:œ¥u;ó5Kb¶úUik.ª2ôƒúnRxÞðsöÄüÐË»+èS`êÀy7W¥øsvrY$BÆ3™å@Zªè£†ÖÈîðiXþ4•”´ÃŒ›U´âfFↀÒé R‚iF:µ ­ÂvTGÔæÖ Sffç*O“®!äÈ|böîÒÊî#SHÊ–VSâµy:÷„äQDâ‚íµN‚LÙýp?>LVJƒtn‹Û2¤Ž{“|…12„þIÛIºF|¸aZ)°{Bdt(T¼ì4ñØ̪.“6Â?5V}ÓПY=°M!õúyÒöRf|5NhDÛ%Ï<18Tø¡í»lrÒ5ÆvíYdvf=¾„A!ñª /fÉ[ýKŽë´]&4³'‘Ým¹acD¤•^~,Tu½/–f~ Û2Ö\I³•UXNߊ€¯_v}–ˆIÿ˜?–›Š#ô¸¾ùŽäòbœÿ[-*[÷D&=[Û%!ÝŠ)?€žÆ"ÿŒŽF…™M3³ÒÃýÜmàò§Ý‹J™ÐUa6 íbÍ,þA,eNJ0²¤\Œ;>RW‡· 8.‡Eá +úÝ‹‚8*Š2ÄðnÆA»j/Ÿ^¿V§^'PAa £gip}pð”1n€~tÈý¶—ÞNËaÚÔaÒvó*ÂŒo=û<®‰ƒ?3ŸÌÀùm÷ŒmIÌìªóG«X³x$3.¹ ¸`B$*¯¬4xâxmaŠ][-섆Cî>=ÕaÿklÿÒÛòðÓÒËö1äJí7”X’ÞÆH-ñí®+çoíØ¢ôÑ-WÔ t…ñ;i‘Á)qgR;×Rè~iäKÕ0³‘q$¸Ð ¢mªœáñH™ Íåf:çzÁ&÷=Ó²×X³7tÅ=ö”bàíO*ØœŸ‰?v“Ÿ“SÄ=¨MÇt!ä,ö|z/+ò"© ôI²înħCô’aj_ ¤ebCúV¿º±÷çt×XFF©¡ËŽ=>IȦ°ãɘ*#™…0CeZ%R{äÈt¢•»Ÿd,)[ÂIá(ßoÙúŸšÔUÈñjaì•/ù‰SvEáêÛ ÌÇÛ¾¦Í6 °©¶Æä;Ú?ûS¢"Ãøt–ÐÉ¿OƒÏÅiùUTSeiä\/ÛêqŸÑ±ÊõáÝz¯’ãÚ 8sĦ&˜X-¡ÇŽÁ R¦båOÁò€M1GD”W Л³xþî‡G§Bóhª‹£ú0½^ÕìYîÕÌ;Æ’6‘õš‹yþ 0ô6zYÊm„û³Ò 3=®Å*Ö|Æ­¯Ð‚ f_l£(ìïA§$UbmÀÛl¥û Ì“£âæqG¨¤Ÿç7;ÂL·Š÷QîJ`eöÆŒà¤(­jÄ;oQ–‹Fñ¡Xä:¾Rš!Ž@¡HïoMïN*ÍÇ(!Íß_*±‰ß‡»¡xæM.þÌ1yž•Ë«ìA+`ÖWoPQkCíj’ðtÀˆc6ïÿTX¢© endstream endobj 405 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xÚwT”[Û6R"ÀC7 ‚¤tw0À3À ]Ò ¡Ò©H(%]Ò " %!ÒÝ)~cœsÞóþÿZß·f­gž}ß×]{_×^ëaaÐÖ㑵ƒÛ@”à0$?/H×ÐÓã /$€Ç¢Eº@þ²ã±B<P8Lâ?ò0eS#Q@ 8 Põtø~ ~Q ÄÿÂ=$°ÔÐàTá0EîæëupD¢êüõ °Ûrüââ¢Ü¿ÂYWˆÔ 4ÀHGˆ+ª¢-ØЃÛB!Hߥ`—rD"Ý$øø¼½½yÁ®^¸‡ƒ47à E:ºÄà büлBþŒÆ‹Çè;B¿zp{¤7Ø  .P[ ñ„ÙA<Tu@OEÐrƒÀ~ƒÕ¸?›ðóòÿîOôÏDPد`°­-ÜÕ ó…Â{¨ ÐRRçEú ¹0Ìî'ì‚€£âÁ^`¨ ØøÕ:P’ÕÀ¨ ÿ̇°õ€º!¼¨ËÏù~¦Am³"ÌNîê !x?ûS€z@lQûîË÷çpapo˜ÿ_+{(ÌÎþçvžn|0¨»'DEáeÂûÇæA H $@܈­#ßÏú¾n_NþŸfÔ þnp7À5$jAýáù#À^éá ôÿOÇ¿Wxüü€Ô Ø@ 0¼²£ÌûßkÔù{@}3Š~üèçïï7 Ãìà0ß࿎˜OIÉDÍXëÏÈ;åäà>€??À# ÄÅÅQaq ðßi´ÁÐ?müG¨ ̈ÿîµMuìõ‡ìôÁü;—&E\ÀþÏÍA [ÔƒÿÿÌö_!ÿ?’ÿÌò¿òü¿;Ròtqùågÿ øü`W¨‹ïЏžH”4à()Àþjù­\ ˆÔÓõ¿½*H0J ²0—¿7ŠP‚ú@ì´¡H[Çß|ùm7ø©4( ¢ G@Þ-?ô_>”¼lQ÷EÊ_.J=ÿ.©³…Ûý”™€°öðûâP\üùQz´ƒøü¢1ÀÇ ƒ#Q!j¼@Àî÷óL…@Ÿê€¹@ì‘?]¿­ü¬¿Ïï§ù_Um==PNä/f ZúkýKéˆÄojn+îTÞrV)Kãͳü{~±5æ‰IO´0’õsž¿£úÍŒ£îrÖve”©Ú“%‘#4œ;gC>æY!s)ʹH4Åž%¹=žüþóÜÚá£hjÌÒíÝDZ"k3L3¶$£‰«ÑNÁÕò•‚ï­ˆUSñMÀ(:e1wˆbå¾5bsc¶E·|–1Xx n î9½0cäjkçX/®¬b9YX£ÅšïàFÍi±}xñªˆp2ú ZíHTE-Ç͵8ó×Ìoù1õ!Ï G¹0g¯§ûº¶<-NxåÏç}:„lIÖ ŽEcºíÈ&s°Xs…ôA$ù½‰ŒqV]6í“ß6ÛΪ3ô‹«okb.„YÑãØnCZÝS÷hÍåÕßõ9iMýèæXùàè{Ó#”+»Å=ÿ O£"”p¥RªñMêÀú„ÓG¥Ù4®s·AÃIÎÝêë·zÒ ¶[&ä›^Ð-ñpµzš^ó¬&ë±3c\ÑiìŸ'%m=ño‘D+¬Ek{Uí¤Z\³æ¼ýŠó¥]ˆ„ž³K-b4'0X·°ý—zÿ#”ÆëýŒëºá¬‰­S:Q¯Ÿ·ÌqË‹ Pàngðì ’"eS?)<äš%C2ÕM@GÖH-Ü]ôD„´Æ)מjZF!ë&g¥ˆßãNHÝ‘kÆN¸4ŽdRydÚ2Mº“Êæ‰…}YçíkËâ ¢1štÖmbé#M½pš ôGÕ£æ9L Ó¸^ä‰Ã˜iº€fñÔ‡G¾¿ðÇÈz%æ`læ¼G³L{?Ñïu·ÊŒ~ëdúÙ·–Ü›Z*£ C½ù}¯C˜åe0±#¡Ážü–OÌ\é¶²–LGùnKRÛMáz~9ei#åæ¶¡hÏŸ|sa£ë>Æ9Ý¡ƒýÕ¦š°ºFÇ–«Ö´ûêËõ` ×r6el:&có³Ð’ùeÇS …Õ×öóˆù‡@Ù%µý…†Ó±ÉÐiGÉæH­C bÒÀø†Ø/×V½¹ÇD»~"‘ÆJ]“ƒVMªÁ¡ë¥$Q& ¤Xs»Wc ?J#íO¹õŠYj1šÛ¯ÅûŽžÁM©:¾¨éÕ'½Œ©u+¼EÆw"&¦¥õLB¦°–sÓÜ š0ݰ>$–Ï+jÀôDkÖ¡·)Ù)O*É®ð©øZ¯‡Žb19Èä+C‘ôôº¬¢îÕëoDXïÜîF̽žGsVíß°¥  Ú}¦G¶ôüùÐù«jÙd«"ÒL^÷äWÎÚW¸í/.ZiØð¬!M£9ÞÛÎ…îŸäMd[Ö®@©»Ë&sb}AäpP9ÛŠßM,šIΕÌSs§KJ;wØù!\Ž#-Óý)%tiépüFTÀ'݃@f & %Ì^¿nõ×›Wµ.ï›rŸÒÎv>K]7µ›$e%: :”…fàÓSnÚô“ÌT§¥¿¬ƒQ}´˜i—ÖŽ L˱k«¥z]#7 êœñ™û{AÓ"º¬ éÙlû‚ôì8û1`î÷Ú—Ûä†ÞÓ >&ðØ~ôæÊ„Û¡ÔÛei*Pƒ’ƒZÌqÕ *E€y” úF(ÖÖÔAš>ï+¡„ufÈjÝ\µôi¡{[—¼ï ,—ÑŒk¿œêÍ;GS'»AGçÁ‘)] ¾ê'Ò¶W2Ôªìš'(žlºã- {w“f4Ë Çž$1_N ÷aèŒå*å®`ÂÆßXwíMaÔ4!†d8Šd“GZÎò 'Åmuž&ÈâG‘% 9N‹pµ6~jõR§Ñ•\žÎå‰Â˜J›h^å£S›ŽˆpäÓÞé&Sˆ•*ã>_#ñ¼Ò%Ӽタ¼ŠÐJM¼­é[ñþ@(“ÒÈL¤3ŠîÎMhæÖÞÆcăÓ;?’#ž&¾$óèO3üyäjí!ýòXŒÆPoðᡘ¿èÝ×C†[<ƒy¸–§g^!ùiŸlå3‹%ìPšù>Fèiß7Üì ~®bæÊ©»³°–>ogNwãëv§Œq<Öîj|ô©‚É+‚šO²•ëÌ=Uï v&c'ÚçêÅ€{œ]Kg<‘¯9’¬4×Þõ-h±9)>i³'ÒÌÚÀN/4þ5)Pp°üeßXQ—~Gb¹wØ”µÝì1•g•?Z©G…Qê'K~.YNöab>Ž#|XñˆÍ¤ºô᲎o7ñ9W……ª©bq× ØGÃV¸Év$uW?¶s‡qYþö›|uR™È‘ŸOõqø!‰›ïˆÒ»kÑ܈x‡~Ç?<ÖÙO+ê¯^„3íß¾ì¾ÁÉ-¢FÜãæðDæ“æ DB6I}±dNé«oÒ‰§ñáfm[62Êõ—D°˜¡¹fÿ2K—T‡zBLe/<Ɔc{òå Ù)Š!EaèÖaÿ:ÕÛ7Í[xVÏaXƒ{™ Õ[U,¯'Ð ý"´Ÿ’MÒ*¼hI^v7ež2uPgÛd!ì¾Uî•#«y×)ó¼ƒQz¹U6Ú7÷¤’â9¥‹/ñ¼^ÞÇ(K88ýÔç-¨sûÕAÉYav‚¾Þ^5õ`QnW†ƒ-eA·Úh»?ñG%.È]š¡—SÈÕ _â‹À9s½nß' À?=s(˜o¼@Ó⡲ôG¯e›¬iˆcK4“ª8H«!eg3‰ Æ»n.‹¨¾ÄÓiês»°ñÉ5Aì2¹¸×{Ö±õó¾]æ­Á—µS_•6«³ûSõÌâÕ¹ צ—\ÊøEùÏåÍÌ«X„g#|_s¬-ïÜ2¥1g Qºf^äë&O•¡Ž»—>Oí¬6ÍBß2ß×µüîê÷úȺÌí¢¦ŸXpÖÆ<Æ»Q»jØ$]’ÚšøY$k'?âßÉtWtymшÀPšî4=±=v|8ìZgq1~¿Îy¢.5ñžËÝm/ p´š”îUõÛxl³á: Y•¸E²êè»d ›´äª†¶1ã÷ŽÉΑkr0Føð ÀmýUÏ¢JÞðÙ»ä>Å•8œ0AC¨Ía,ˆ*›à}lÿUŠ0ý¾€SX&\Žš•”ÃTss#œò-=µ{ûª,^cR2ÒËÁ‚â©àÇè2í…yø;} 7t¿¬o¤Q¥„%æÙ€]Ú¶š0†TÅœ‹ U†™­ûx1)êvCF ÆMǘNñ2H'È»d«¥È™·K2‹N™NºS‚ŒªóM¥ÊI-gˆqˆ ®·óù"8hwàÁTgeù ¥”äO–¯Zí 7 Ò!•ªy¨·ÑB¨C´&‡¬æ™̸,l°Ç—†¥ÛwW"ã•mJ7éáuY*_„2 ×V#ïHò›%–#Ô- ’®¿µu~¥Ù1Ó_érb*s roûFæ@cËU\Ê?‘ ÷„§*ÇËÅ0<¥N#à­»#¾zŸ+úË„ƒ&žÅ1ê‚?PI‰ñó‰×Ì”Do³;ïMƒ7z°ñažþOÝ(Ã= Ÿ¼×iërwÙ°Ÿ²wz ÒÀ1Ax÷‹Ï·øÛ ÷Þ¾˜Q™äN½¼=h{ÆkSx‘ã·ííFڌ޸ÜÀŸC;ßõØ“J±H_¹µ§¸†§µ“‡a 4 äôŒå&ï»qºöÄùð*ÞéÊ;µÐºÌöÖ‘åü†£j³Õt“#ùcŠÎ­ÐYYsg©Íâ£2I/¨ˆZýeDñY„ˆ3/—Þ¼¼­¿QôíAók‰§d4ØäuK’|{•údp¤:4­º&–ç¸h.[²§”×áMÞ²@FâîQ´4Ùø=®3PK¿Š–ß0z/Ò$‡ús’ò8&¯Ež 5ýbAC—J³gŠZÈÉ9Óáœt«h³Á¤~‹ó³Ïµ¡¡…¤G¦.Vþì”F•ûaÐ|£Á[2‹ wMM–Óú¥åÆ-dú7Å3CæÔªS­Hî,ºD²÷‹QÆoKÓǪçÇ»Êì˜Ji¯u®¾K÷'Ff…niÒÞSðï‚ÕJÊß1%OI×<‘-/âkzbåk{ý¾û®2œë g›ï=¬«·ÅéPLAÊ–ÁNA ¢ÀÑc!ß7Üà;Hsê3t^9-'!±ªÀë Ø9)¨èX÷:³;×;,ÝúI}\òÕ¦ù¤ÓÔ¶Et‰öáÔiß v*µÍ•ô>7¦NÒ¶C,fß[Å•„Ç ½!Ü+E]”Ä׿èŦ³@mX¡Fu¤­±vOG˜>ć§bÄÛ«á\æ[Ä-aê#ÉݶG.¹gÌæx;Ç›¥7SK³²U¸ŸÅ)Õóq†|†\ÓK:™¢Í/Ëcñ‘:Q‘˜$õºÆÑHI®Ú{œËîwêžÙ?„d«zjµÚl™toîc~=pt>p)UDç,ç~óãÅQg4&H'÷žxPnkù1ï~þõƒŽäµDÂ!t:j8ç²tśΪ¹‰J;Ãt徯Aœ¦cP Æ´=}<‡6ÏO ³¿ßÜŒ~wÊÇÍ%Ëd1¦wªŠ{„oÌÆ®ÿÆM÷f̤´¥F¸îyÊÄÒûUXÈ+ƒZyánüÜ|³È2ù¨Î·Ä±Þ4ç<«¹V9"®ÃV^ÙéYÏ Õ^©ë½­'‰räz>©ÔδÔö¢Aº%¬–Þ‘óÓ1óÓÍ‚!QŠ_ÊDH½Ž^äKëŽ$]—ÀÙ’œ]Þ÷> ZWöÀWÍŽ żè^ Óú,!°”c–å(<êþ`‰¼÷“ 5 ©¼“¦¢ûÀGñnEÎŒ:×ö˜S7CíS™ŠéR%<¥äܵÓü«••ÉK.{˲0÷ z¾ÍÌxÞ» "ià"h{˜ë¾ýfÞ£-h©TŒ Áí£ ¥I>–o²ƒÈÞ9jͤ€úÓSÇŧ—dcX~­Uk²?of¬-½Ávˆ»Â£Ã1~9³0?YÂ.žyÖ$­àQÌŸ¸B⪥ÁtˆzÇ~1¢ÐóÆ?Lj£ÛÚ¬Ö;Y¿ùòݸ2›ºª¤ž y†@6ãg‘Ûã`»¡6¹BóoÃß `geØbÓl¾ÊõÑõþK Õ·jvL [̤8Årܼ˜eáÙ œO V¥‰3‘꺣‹˜bóÁs5Jwú²ñdóùvc2B7*ð6ψ HjÍ{ã—Þ€)¬ÜÆÜ;zÈÝByt…Þ^_ôƒ^N°A9H¤ˆ~šÙõøCȳòQXe.¡øKΕº!÷¾oÓñgíaAf+¬ï^œû²³‡»¯*hÑ(>Ñ;í º˜ú›XÊ2 i?»ã9ÂRϺc;`¬v™0Aç¹|{§{¨PŒà ±òÕޣב‰š–}ß@Š,Té_‡Œ« R¥õZÅ ÍZ•±[ó—fŒrr®*RG {¦˜‹5ª; ”‚&_Ðô&È;Û?.`³âÆà‚OÐ^„jêã »Yàâ3|0ÂVø‚]Md[¥SŒ>‘]ÛÝk$ÖàiíQ4/.ì[Ôµ[Ÿrkù¢¶bßW¾¢eÔ=©·¨¶%ÒÙî-‘YÕf×PŒ…0õ”Ôó`?êš¼ÇÚÊ̜ީc—å~YÕÊDH]5™·ó ÞTYœÈ‘¤Êª3ÉB©o#ô¡ŸN—QyÂä–ÙH]ô„^‰È÷iËøçûÖò[[\ñdÙ”>q…]òPÈ>¤¼ûãÍ÷>U—tDñ‹0%þFM™4€¢KÍ' Ça幃Þ`ø¡t«´û|ÁóýIÍ3_wåó^ãx:|»,°=¨s°ô²Çêîæ^³ÞµE…è]ÓŽ±Éµ ËVÂ3¢Ù'âõhgç¡ÃG‹Ì6LtÈvbõigo¢Uãn¤ œ*ôÞ¤;†ÃȾF¯zâGùç=h­"I×c2±©’…QØ–ÍÂôÈœÇ ŒÙð÷úŠã5îÇàÍçã6£NÛ[L–ÅŽ—:‰—ÞÛÇGoö çkarj.Ÿt"·Ô´MÞœc·qéTZ7†u»|ç³bï2KëêЗ;mËC^’ñúI|Ç>HãU•xÆÒŒ}ÃQÏ%ò󈔗ӾÇʨ-zc%•ßþæËÛ\+”KÍÛKa5í†Å2ý&É·¸Nå#ÌŸ­E<U®B}·­1T÷*/û©—5 >6#†pvŠ›wªÃ5ÃLŸËsúo˜}‹PŸ˜Æêp¶±;Wà5T?ox|ÿýÇâ8…‡» _ºâ#`£³#‡ãï§,õŒÄÂC¶'«GlGüa®Ô]%ô£Ð·²aûñä^ÝøÍ…òä—:Là#& fþé—ûúRcR[– c¾ÝÝÜGLÏ\üu+¬'êÅaø§¦þN„z¦oEk#Ìøz-ên„Ö;ØX ¢€H‰¸µDmú@¾ƒKºÍ¿cŒðÙó3‘¹ú‰(‘Rýç˜"ÒγqööÅKéÕXW$E˯öˈqœÌ‚¡>vÉqr¿ŸöçTX5zSò†FZ}²®ýÚÕ™ø endstream endobj 407 0 obj << /Length1 1406 /Length2 6162 /Length3 0 /Length 7128 /Filter /FlateDecode >> stream xÚx4\íÚ¶è½F¢×Aôè½÷AÆ c3:ÑkDÑ{DoQDI$z'B|“ä}Ï9ïùÿµ¾oÍZ{ösß×ÝžçºöÌÚì,úFü v[ˆ*ŽâJ”tŒ,„€ PD&`g7†¢`¿íì¦w$—ú„’;„BÛ”A(4PhzÀB"!1)!q)  Jþ D¸K”AžP;€Ž@‡ Ø•®>îPGºÎß·.07@HRRœïw8@ÁâƒàÊâ‚®ÁF0‚òùG ®Ž(”«”  ———È)€pwåæxAQŽCâî ±ü  rü5š;ÀØŠüã0BØ£¼@îÚƒ‚!p$:Änq «Œ4´z®ø°öà¯Í ý+Ý_Ñ¿AῃA`0ÂÅ÷ÂöP §ª-€òFñ@p»_@ ‰@ǃ$ØêŠB ¡°_3 þJƒÞf¸ÂÅG! ~õ§ u‡€Ñûî#ø×á:Ã^p¿¿WöP¸ý¯1ì<\MàP7ˆ†ò_´‰àß6 ”@Üo°£à¯Æ>®ßÎßfô ~®W€=z HÔ‚þ"ðC‚þ#VnHþi½O·ìù¸þ7àŸ¹thæB\ÿ&ú# (Œ¾ýŸéþ;äÿÇò_YþW¢ÿwGª0Øo?×Àÿã¹@a>!ÐÌõ@¡U ƒ@kþßP3Èéê@ì .ÿíÕ@ÐjP€; Í/t_xÿŠT…zCìô¡(°ãÖü±›üÒ ‡è#Ð_Otø_>´ÈÀÎè§MÍß.ZCÿ¬«#ì~‰MXT rwù Ï½ø ¡UiñþMf€ B‡Ð3ìî¿VH h‹Þ#4ÁÑö?&€ ê†AÀ¿ŽñãEÁîîhþfº£¿×¿åxCÀ ³°t˜Óë°ö‹z/þÏ£¸+«Ñ }Q¢(޹~ŽÚxYjSnŠíªî§ëÏ—ELÎúÓóì]Œy?êÎ ^NSÏCa¨ô­+ðç~?îv€0Ù!èÆÅÓ£×Éö I[b[r&›Í^…‹÷ˆl¾úRx݉Ü|(¹ pŸ‘²¤Ñ£ž)ävnc>µ`a[E Y<"#w·Ìð0Ö0¿Æ| ;Wl¥ýî³n—9´´ô.§¿/]ä¨@«·Z¬*‚‚–ÒW“%w8i€–*1G³ ‰Á¡(z¦T–šÀJ[äÁ±ŒõX|ùÇtA[ Gƒƒ®Rð½'#uÑY™Üžå#›lãï‚Dw›“¢ùjÒÙÙ«í0Ά2ö«E`y½ØÔLܺÎ7:Óˆ’Òs mÌÅÆX¼'¡"Ö_&î^<~–•($l•*“øôRQLÆä:lo¶xõ @AÇN¡¯¥Ëâ´ê1|Oàôe´Âœ9~òµù]ûPOä‚m‘j*8Á¼#kûíVb“†èÙ{2S1T­Ö¢Ë†;>7~:Ð0/[¿­SMú¡¼äük¼©I¾1Ùœ±ö&F†îm ©p… iRb ç½2ÆW‹•b#/dBšeR%‚€O>LÜR6؉'­]¿cÐóÇ:ÁÖý@PßZ+¯ó¡ãã]NMÔýhãvÂÕWE‹©àñÙå<ÅŸ&6¥OåÙ?ûwºyÒ°Ÿg®PõÒ5¸nór„±ãaCÆ›‰ÞÎÔMoõ†Ë3ì Û!5©Ö°"XEc¼h«ÒR?U´‰e?H»ý¤ß½gľñä;¡å¹ôý`Wë¯ ºû®?ÊÝ•ä$œóá’"ëU:A’~Ø„Q¦ÊD§äD ‰†áY¸†£}#ÁLNk‘º`Û’íis YÝ¥šëÁY/ÃEk-ƒ æ€/ø«(DU⇧¾ÈÇO‚æzbï|]µ{O¶7­ÌÜè•CtZp£,G4“XÄÏŒ˜ë«h_ ¯Û·Ü©j)C¨§úÑxOÑRnqvµ{Ðú·!ˆ.Î.Ít™ ³TRŽŠw3[â§1O~p¤¬gÀ˜Uo¨j“a: ½bR͵=,®à„)]XŠ‹>ôpá‡1xÚÏ ByíÇïæèlï2לÃäÀ<ËQ¬{UÖ†•_¬Ê]"6HßCK´Êõ§âX4îľž~ýcóî©!ÙOÔ´™tf×ÈaÆ€‡<×½rÏH Åô“9~þë§§ ‘Ϫ¥0¬ÔÎc oìJz¼Â)T’º™BiOÕštË¢éòÄO"¥Ö!ÊPSD]úÏÖÜ$¹žºf锜Z™á²|aýë%X+¾7¦fÑLîâx*¥Îaç(;ÐOËÛðåPçt8“S?³µ‡m*h\è[c–×ez-dQÛi ªû:sÏEB½$0Å ï ™èkÔÙûi•"é ÷F-ªÛóww<»ãÇ-ó[~Ì35k³ëåËogª‡F$“?XÖçŒÓ|9ü!Ð3q†¯Ÿ­žÕѤDGî¤n[n5Ù•g6LÜ“xŽF惾2`]$Y¾P7IÔú@$5Úøs„}k€ÎÇ 82´E;¬ž¨(>ýeŠ8üv˜aáe’¡ïKŠãcûo~‘ÖdÊŽOløef®)¦oÍ\¾é_ÈE Ûs*û,¯ÕØ ¼š~%of’H®…Ó‰»q†Ò~¹¥uußYO†f÷g…ü¬ ©ô#ŒoI¡òt™æ‹3æûLbq|7,ËEÜó˦±ù¯Óm!ÖslM±Ÿ¬È$`©ñMÈް°nÁ„µ5kî,ãÏoƒ@Dǘ«•{ u«ÔÁF¬ùÒñ_S¯<¬1Œ¢ D2ÅeÈ>xÂ?d¯ãWeÆ×Ž·³†Ož—QX âŽòøEMöÊçM§ñ>eÈ‚ߺ.ƒÆ\áƒÖë§?Íø•é–…`ì;²#¿—;È`´Ì­êR‡l|®4]Üí•eY|•›á#ÄÜ=²EåÃ’3IÅoô¢<{lJp ¿ÔI&¬±ôwY \Ïow'П·¸‹·wKÕ=LûÚÕ¿á9Ï$éLèCGÝ žäã*M§<8·Hv¢ÝÊ™:0 ³ª\ʶõUS’ceñ‡,y±|­M{6\d¨ÿ•íKS‹ÔMÇ{îÁŽ8•{ó_‹ì8+{?wÑó·4¾Æ¤ï°ÆD.tÑÇΤ!t¯~xE÷¶@›XbüÍÉÂ3ððqÃ8‚r³2&[[½è}«ÖÇ“ãÆ\îŒS<·\Þ¹` ŸÔ¾Ñ¶¢¼ì[6:#±×ùåëð€ä¦¸×ôœ'9ãµge(£ÒÁB;¹¥Zs*l ®P‹Ðð·çκf ovUç|U ¨Kûæ\÷¡oÅp—kqfÜZxžˆ©pu½ãÖ†;Fò æïŠ˜~·SvŸÖàs+UUX¾Ïs ÿäøEOfò}Þ' …yLoSTÀqï_/`%éôoÏ V1Ro£æÃ±®Ô!Y úJõßG)- ¾E=iMìˈÀ)A0òì¦KÆö»Ïh<ÍG8U›ìjQx;å· ÜæÃ½àµª™}}HØ«‘ SÖÞ7xˆ%|Þ¨ÏGœ´up>˜°èXÁ…ðï ^Çæ‰Çò¨ˆÞK·‹<,DÄ¥ùY)•˲ýÄR½íëÀ2ÅóÑŠ1ãóž_÷GðîhÑhâH"¾OËËÀaé™k5qˆÀlLÔó±žíZBmÓè''ïn®.\ˆ(a 1"+vÊÖâÇ me6¯ š  t®oÎú☆ððI˜¢>æ¡ñX S£¯¸¿0çïbŸÙ iå8WTŒÄ8-VàÓþ4åj¯W™Ý¢›â·Aefߨ}æïj¾n™7/¤+èAiøßv¾Àž¾Ýg™|¯1TùžÊû$W×jUžŠÒÓÚå Ï}w½i»1¸8üN!Ù–½d(O5ý޹Ôiç¦ì@{–Ïè²6£=æè3ª^É$P’“4/£U0ò6÷Ä¢B’CoÏV°¹VæÓFNß…‡Ç# Œ‹Ü·á{gãwêfŒÛSÈz3>h­knï}³V†–^[H!<ÿØ,ÜÃrH¹ly韑v÷»¨iضý¤IÌ–›~pÀùÕ”¿ÌMlúÿL¨ž¿~/îWd–äa S\ÀÆçdF^W… ¾¾n§ aQ2¥ÁñìÓ¤ý´ê†ôyÒ@o‚ª¥ôôƒ-ÃÀ‚4”aÎjk ¦+ƒ„Ð‘Ž¶‹X?èdcÖÅõhO3Q/_S»–|cs°¥0(R²f@õ­K‘Éôä Û¤JA+u‚“ ÁS+9@Å×ç~^8Õ6$¢"çEª{Ó]u÷Ÿ+f~ÝÈÞQ(­ _íp{=~0L¼òfyò~^ SdaÂÄžÐ+}û»ïoWóÍõ剬·ã0¼p/,±L\êö|ü‰°½¡öÇ3š“®@ïs5¶›<ú°¢­q€ü–±;#)M¥4Ç;UG3SÀ5µY‰!2w«ºíYhn1ó w” à nzá¾6”hå’_XxšåKnîïÕåÐpIÏ]z)kÎòÎ%r8$?£&6»a2URÿzñ\â½3ÍL"Ο‹]"P ÞVQiGŸ@qÿ>&J·¾èmLø5i³³‚†U$7ÎI`£QÁ—‹´x]È3\ÜÌøŽRë8ÆDÎ+°<ÉÚÝ+ަAÿ+c}…éçL“t»5ä7[ å¼)`⪠ÆùO|8]v2M¾Kº²Øtb–´/žnpëf«Õï¯âdÈcö•޾q²ª'‡‹˜ËjæûÊ-(ïÉè^„ßê°…1>ós£±µà’e]àùú´spÔ¹ÔGä±sñt­¾ÞC¯ìµÖraUDØAŸ@µm÷ÂO%‰j¨¨÷©Wðíj&™•éê¦#*çÌ×™ÍÙ™Íêþv5öؾ9ÿ²š´M Û,Mþhøø‡Èó³tWf˜Aõ‹dƒ/™Ñض«¥T‚®Ç·Ž_0'»uªNJ`ÛüœQ Kê‚oS¼Ç»)pÑŠóãð•~0Ó•‹ìr´n §®ßÎyyÈÉC}ífd| ~„z@?ë|$ˆ/W&ìBË;‹èb4j?DÖyë{ø%R#Û[Çk.ôsŸòò?¯*Ë7yš^«zjr¡ÏÚ¦5Á[Ñ>eÑ §Vp¥žáCíè鳴륜ñ$»É¹,4øba_îI?ž¡Úü¢0¯.UÿêŪ…:£­PrÃZ›ú€_³W耡µÅd-1Á 6ÕÒ÷iêÊ G¦tr®Gx>“é-”úËìª2m!=ýŠ‘¸g gùjZóúŽuOtë-›±5†l¶¢‚”ðŒ©}—§ìooÞ~0–{|ëñ}ô¯²ŠÐ¬&gûõêÛãÃÛ¸$!x‹JƒÈÖt…í @ÇMq‘ç¤[õGž«[]'ZÌürt¦—EäæâŸ•éY}—2£•¦$ódN'ÍÀ1_“Æ SdNº]bN/ ¿ª!-—Çb\¸Ó„¤ÞÁ:3±Úxš$3ióóÎu’hý›˜ ÷ ”¬LuÏz°­Vçk¢T½‚{m>Œ³ñ¢¯8õêøÖ£“óù¼Aí`ÌíÐ|ýdqŠóÌCÍWZËáþâñä3&é&nÖouÒ—RÓz<;†®N•žÔÉui†¶ &©²Š™Ôe7q1Ox?jL‡iY‡¦+&e¶ƒ‘ß–wC½šV«så,#^WbzKOsƒPÛâd¦kÃeu¼•dEM•Uo®ÅcêL!Y¯fËú}6?½MÆ3΋U½RswX3Á}K*:™Ëá_ßЃÿ$uI­|c^"7}‹(¿WÇóó — ª$t}@t8^?ÜͶ³ê3À1»®7ŸHåB,û2®êà¶¡e'ÍDB÷Ó½/ø?9C6ß¶ UQÌ¿‘`&9¤ø<Ë%5‰¯•; X§x˜yŸI+Ê!»¬ïkaOÙ& …|lŽqe `†tÆÊÞ¯åÿØ@+àSÁ»õ#刜ähâ€cŽ ë·’׳%m›¶tžŠ`Þ@•.^9ÂAÑâ(˜ä‰y‹¾ìÜá䶆ꦔ\*e>×ÈDo ÜOì$¬äbYô©BO\6ØÙìÒ¹¨ ¬sؼš3ôõc1u UÏ“’×sº$´vNsÄ"¤‘²„™÷èéÓ&Qœæ©vT’¼*⵺¸ø™v±~}VG±.-Ï#iïô’æ¶ÍÅQÙÑyÒ>µÀŒÀµH;ûÉì…p¥8ù–É’©òVÿ¹¸ªâîø['}ɵ£*Öìn‡dŘç±c} ú{q'ÒŠÖñzeÉ"ß»xïˆÔ…zÀÛ°ØšV4ú‰·nòlôp!?¿'`Î`{³ò8$€_’Ê@ðmÑg:HP®Ü|÷ÀàÖTMÃ-&ÒÇ ,«˜bÛƒ®Û×ßÚ¶*l¶„L^Œ¦õób“î zÊk,Çsj£h5ó–éɲë$j„,#B7Ì{â†FÌ<¢k´]Ÿì=Ò1U¥ŠÞŒñ:k|6“”µO (kN\¼m<AE6VÜ´æ;•G÷ú³–Ô9ÙK˜%È´¤šÖŽqÌÃŒ³ §ªãžGˆŠ;S­üL¾Çˆ§žôƒ¯Ò{ÌÿYôÞ-RÏ} ªE¶¾93ºëXr§å¡ØÄÝp ¾åIG#~³‡äñÄXcšw9›j·dJ7>zé~~^‚•KE³]艮èo„yõÚLD«cX´–E¢'†Y­?O~wpû) ¬µWéç’ve•ù9džÈvVCîÎ( o¯ÇÜÖû~¸ý˜|¿Ä5)ïy¥TCŒF)MëZ KÐ«æ¹ %^ÅÇ!£÷l¯ ~0M*iŸ'6S{gxÝþÔY̮ڼœÃAô„5lC%Yv4¿Qú16I¡çö æÅjcË]ð,®Õ~3†U-Ý„ÎéÙJn˜OÌÊÓ{FÊÃÎ ‘Úã¡ åkc;Öäò—¶¼›ÝzVó°jïOœb^Gëb毕H»”µ˜ôðh»#í³¹佬ì‹M3‡{,·ŸlÇ ©~ÿÆdM¢ âYy{`M/Ûsªš¡Qø–'!ïågãæåËaàÂ¥í½³ì[–Ù¾>ãI3lØ¡ÊÎ3¢év† ;¹úÂåýdp|Ìd»¢6d/«7}ä¿ôÝ´˜¬^âÿ~¥Ð«.=öK;xà£h+^cáðŽo=À‘/‹|¿ŸŠÏo—ý¡ÃccëFÏ(æÖŒÀsN½!*Ù"?€õÏhzÛ_ZϼJ¹Ë=“ÉïפßR£7{)LjXÚSOâýîë6>s”Aþ‰—¢ÃDâZûµÑu[n6ë\9,ÛöàÌWº¥6CÃgæ‘ÊN÷ðV´«{©³a“<®|„ãÍ ‘Ô XïP4ÊèüË[vÆà]®†Ë oÊYï 7xd¨@’D/xß.Ô KqÒáSÖ¶”œf|Ú´2xMwrPc#Ïsê;$ÐÒùâyÒb.­=a Ðò}¤K™¶yµ~N­²…Ç·1ž"“Ñ¡APpSòk‚L?JMÑ™,O6Ë EͽKf%é20k}ªw}:™xŸGÏ÷G«¸ùØ œRaÁqµòq~~œ"~gKf[œ<ÅânfýÙÅ»ƒ->QøÆŠjLª`ŽÜÕHLæ*‘)P¯+xC–“ê/>ŸÓ½¬tØö_WÕ—`J[P{b Äo¿Íq똱³ÝË =ÎòNΤËaÍ4ö÷/ed=ɼ†ˆÅFéKæ{yל¾sÔ*ûã~ì÷£ñîØ¨]åÈ"?~yþPÛS¶'ßCüîô›×ÓO‰±´ˆ_‚æI{i©0b}ÈC°;D«IÇá 7nAk^nmï4x)Å{ÃVùóã3ÖÍ„á/¢9r—ENÖä(ñÁ3«Úž’E?|³™s‡…Acg3¾þõ+U­ÓˆGKB!MS´Ž`™9~_¯@‘‰gKKVXƒÕ$ðD‡®Ý8ÓXžÑ0ûHîG1%R¦¯G Ì º)Yç€û3Ì/)ÈbL#ºmÅ(¿ÇÇ]Klš±tïVå‡áx†WŸ»Ó‡‰…„J†ï9fZ¬ž"/!8 —äk¼™DöKþeÒC×.UñÖ ýÌ…i‹év˜ q†ÎЋæm ‡Â”Ùï¯æÒ¦žc\½¼¤^éYˆ¸í+4ĤÆéŸòÖ>ÔtRYx9i" '6‰õ)ŠK¹üvø¢³Ík3»­gVÓ¥&+õiI®Fi+^˜¥¥Ã›õÒe‘…È'Óz[ Ù€¹W7Ô't(ÍÎmHXXþóØ‘Á¢Ï?£´âJ‹^4Ušn8j:Ò/Ý¥UçJóç)Îû±L˜%g7ȧƒyòŸH¿b8œ»õÎØØ$Ü:J“)Èr¬òÊéûÏÚO=g. ?ÆyîÕŽ ŽÒgfæÄJ‹ÆÄ-ÿhùÓÌ endstream endobj 409 0 obj << /Length1 2718 /Length2 19473 /Length3 0 /Length 21013 /Filter /FlateDecode >> stream xÚŒùPœÛÒ ã‚»3î.Aƒ»[pww· ÁÝ îîîîîîAƒ¸“}öÙÙçûÿª{‹*˜§õé^Ýë}§ '‘W¢4²1ŠÚX;Ò1Ñ3r„e”•™ŒŒ,ôŒŒÌðääÊfŽ–ÀÿÊáÉUöf6ÖÜÿ²¶ê;‚dŸõA†26ÖI'K €‰›‰ƒ›‘ÀÌÈÈõ_C{nÀg}g3#€ =@ÒÆèO.lcëfofbêÊóßJC*í_îA+ ½™¡¾5@FßÑhÊh¨o P²14:ºýOJ^SGG[nz}+z{>*Z€‹™£)@è´w~— Õ·þ]=<9@ÙÔÌá? %cG}{ $°43Z;€\œ¬€öPv€’„4@ÎhýcéÿÐþn€‰žéŸp{ÿdfý—³¾¡¡•­¾µ›™µ ÀØÌ•¦wtu¤è[ý6Ô·t°ùë;ë›Yê€ þ¢®Tèƒ*ü»>C{3[Gz3Ëß52üj³ˆµ‘°•ÐÚÑþ7¿Ïfö@CPßÝþ>\ kkÿ"c3k#ãße9Ù2¨X›Ù9%>ÿmÁÿ‘™lŒŒŒœ,Ì èjhÊð;²›-ð/%Óo1¨/[[€1¨  —™1ôÞÃAßp´wzyü[ñ¿ž‰ `dfè0š˜YÃÿ‰ÿƒAçooæ Ðb€ñ÷Ï?Ÿ´AfdcméöÇü¯#fP—R¦ù»ä”BB6®:V3 €…ÀÎÅðúß(òúf³ø—§„µ± €ë?dA]ú/aç¿'€òïõ üo,YÐÜ”Æü #£!èÓÿçaÿËåÿߌÿŽòÿ:æÿ—‘¨“¥å_zÊÿüÿèõ­Ì,Ýþ¶Í­“#hdl@›`ýMÕ€ÿY\ ‘™“ÕÿÕJ8êƒvAÐÚÄòŸFš9ˆš¹äÍ MÿšÿˆU~™5PÞÆÁì÷Í cbdü?:ÐrZ€nÐHþ¥‚vç3ŠXÚý^2f6v€¾½½¾<#h’˜ÙØL m4ºþ5ÄzkG TÀØÆþ÷‘²³‹þƒØ B€Aøâ0|þƒ¸ "ÿ FƒèÄ`ûƒ˜ â €Aâb0HþA .Rˆ‹ôâ"ó¸ÈþA .rÿ Nù?ÄEáqQüƒ@\”þ å?ÄEåqQýƒ@\Ôþ õ?ÄEãÄâ¢ùüôÿA¬ .ú A3s°øc fðL ô -,õLÿ‘21ƒxØë-ÆŽÿ³ý-þÏÎý„é?b  ãÿØs±ü#ÿ?  ÿAl F†6– ùü‡8ëo‰•ÕŸR~.ƒÑ?Ô-#KK}ûY€XÿYÿ')ûo½èøãªÞø ˆ®±™ó¿büVÛ8ý;ÈÄäODÞä÷Ãøo÷?duÌÔÍÖhý/ Ìì_ÄÔü_t„ÿ‚ æüaÌê‚åïeý£µÒêÝÊ ÿJz0Øü!²½)üK *Àöäk zX[ÿÏ!²2ý-ýß#d±¶ÍÍŸCa5ÇÖÒé_ä@// vÈÿFN@‡¿®¢N’õ·ÐÆhdð§L®¿…ÿ›“‰ dü¯V3ù'ÈÉheö¿£ÄöÛèü¯þ³‚8€ž|ÿÐ5üÿŒ?¨¸?iAÏGS{à¿Ô)G›9€b8ýoPο^r mìÿÝnÐY:ÿ ‚»ük¹@A]ÿAYÝþAGåþüŸËÙÐÉt4Ž=?A7÷ñ_¯C@ +Ð~yÁÆ'м&°í¡Jß…nâÓ,ù¾Z2Dz}»ÓlUeºÿ¦ý`ÂpÊÚ®å­À ñ/Óæ:Ø–8…ÖgÏÝÅéýVø¥)¬É¼SÁÚ~B8:eÏ_vžª~Íà’äÙvNœHò¹è.}b®µý%«cÁ û •ìRï_Jfè"U"¾øΑçdÌãÂ8Ò¾£F»tEž»½›EËš|#–Œ¡÷:‹dÉ÷ÐÜbþö8ï¾^¦ÌìÐ…K†«‰Cy‹66ýÑCè(Q{Ñ£¨ bóÓb&#=ØæX?±çh'Én-i 4lFKûe.±12¯ÖZ?õ^¸ô}%=[êÛS¤EcQ±\¹¦‚>ƒ¡¸ûP{#ç(XY7ƒíe¨[Ó[©Ó5“Zî#ZÆ;pð;˜kB럅ØyaÈÀü<àìòÌ3O+&«öè5Ÿ<³u=pUj(9wB‚‡ÍKHAFAÏKmà ޹­FgýWÉÕj÷¥›JkwETe•Þîêà•õGΘf2§Ô³»‹ A½›eüd›Z#±¹aÌMÌ2¤”0Ú8ެ¼…á©j«FÓ­¢gàã2!‡÷ݺ%9ÏF¨LhjžN?5ñ†AÍif„èû45&©„ÉÞb„‰³i0¬ìòjÖ äåå„ôÇcዌçkN|ÌŽ”xßÃz4‡±“ˆŒcjkaÜ*«UžNŽ%ô2¢Õï·Ìór´É{=zuÄlvöNëß.˜ÓëþšˆÌ^'®_·>ˆÔ9yp‰ž•iœ¥vµjšÇ:ШHÂã;[C¤·ßG/‹¶5ö`üÜåÉ.Pz˜uœÁ£}ÂPÙaê99EÿP¨(µ1\%5i•ny§³öQmÍ;|}Ѓ¨1÷ò—•hÞúE)aF]R'þÊ|Ê0K´¨”·Vp>‡–2‡àšÌ³œ„J… >:ªÌ6eЧ²6%z\}ÝÌï(2é?Ó¸ž+€8ë‹Í„Ûû½FTG‘?‘.#!㺧À+V'ä9‚šÉÄåþ¹+‡•¡ ;«‰¥S tçK‡ûª¾ûÉ4Á1Õ×Fú­”Ë¿pW Š–¡’û¶PQCŸOÖæÌ;íó0 †GÑ.L‘/cG,¾YÚ!éaÝnM5Ü߯örŠ×NÂãöO® ž‹ŒMÎÈ;msžyÍ®ˆåˆ()<Š£ækF‘\J_•”€iœŸß®F§ñwj™''º¼ˆîEË}…æ‹lf#[b~ ë@t'kdÁ¼?]~£Hˆ.F—ó˜MþÚ«¿¦6ä÷ü0Éöžž'o%87D“­º8â¾>ò=6Í‹8GEG >KÞþ#^UÕn÷IYŒö½¢bZ‰p¾0”N%Û/®?lÓð ’® RÄÖpRªQÐB†€½ õ‹• àÒÙÇŽ)ç'Ìci˜ùB! ÑZd@~Dñ™(!Msºj]ÖØz*Ö»àCÖÑ#«£L(Ÿ¥€±Jy"|/E,µ3‹HÁ—…š.²%/KË-sä¦Ä"Ƭˆ$Àþ%k‹Ÿîr^K=’ÂwõèÖG‹ÞÎ4¹ú^?ëúÙÒ_¿¤ÈelY¶BÅv¼P¯¼üçNª W5Ìž.†¤ÉŒ ÉNÂX›CŸßˆòLžxRâHõsÓ Ÿ™KqåvºŠ÷Ó¡;̱ºê²…îGe/·¼„¥öÑþÌ,4Ú±d£05X·£M¿£ÈÅUqöoÃÉÊZßkö‰]CÃÚ95V/ÈÄCtüì6y>ž3b€„ ‡µùáMÝמˆ¶ÝÒ<Ò Ä°}­‡g:¯ñ²Aö•;£L¼ðÄ›rÙ%Ôã "dÖzá¢x¢]§£¡é̬R>¯0u:gÉ€«¿, šG“¨BÝX°}:ø˜¦‘sfF´ìr<ê‰]„“ì,\.tß…ªÞˆ<Ö Ø‘„•#é*}uÈìý.BOÅù]0ÝQ&iÂædù$þ]E9¢o€;†Þ‰ç«O¹>uŸѡÊûh(X*zG S»˜Å×P"jFÈl»sß–jßJ¾Ã@YÌA¸~–⡨-ä>_.9Ç-ÏÈK6{FÈ›fÛ¥×ç%NØÍµd»ÏÒýímß<Ö~èÕ`Ä ¹Äã{."ŠI¾¹34¦‰Sth’~]KY’™ÈãŒÌÛú5 ‰2ú <ï/ǦG¥´íjï½*9:Úö‘ÅÈK@àYвMÞ‹°µ+_£æ›ýP•G«=v·Šæ—HIÖœXŶS +× ß–ž ®]Ç8ƒÞ¶÷1’ëNb”Rgº1ñb—ú½Ó«±˜È ½‹ÏsPŠ mv¾´……T½,—ñ;“ZpËcÏÒmø¾38H2CúÔßçÈî¾v:Xkà;ãP93<öïm€-£h„À±n’EžJ™`ŠH=,PÛ(}…-Z~S]C(N–u‚¡áz[Afå@ wC¦œîyÝÜD,òCìé #-wÙA²‘ëÑ÷,3Ô|%pÊ;hÔô$^ïxÜÐÿtMÜÇ7à>ä#ÀL†Õè º8O_Àþz¬\`"Tg …¾É¥òKôD²’ŸMËV»çý ôˆí„iÄRwöDWlÑU° §ïä|œ{ÎáF‡t0­ïDö 7‘T8OÅíSŽÚù˜z|à-ÙR7¶Á0—ín¨ŽQªÐÑ‚¤"%8»2õV’ôÈi7 0= ™ú_”ïËßUþ‘A/•ü0`ã«LjLA żOzU/ü«ØÑ'2xú^»ˆYÚ÷$¸Œ áŠß”Šóã&ƒ>ŠqÀ]b v chý¥#J£ o8¤:#¸{;Ó&;f£×³Ÿï&“ù¾Ùûá/²Öj xU]-à°XzŸÖy"GÙIáȦ™{ýúÓ•a½HÝhå®ÒÈè8#}\gå7¦ ª÷FÏXánF$`ÆyZ}åµ±Ñڇ믚±Á;_^ŽZ$ iãI‡øÓ2âüîv „²&'†^9=×VÅ&37Ö/¾ð´ˆ#À[lÃ2‡nVº«OÀ`d3‘ðsoan£6'î£`9~ êÝÂâ'ož¾O0 Sêj¹§fÇÁ‚¼#›¦TIOŸÏ Íéž‚Þöɲ;ߺ;åE À…÷Ù¹Ö¬ëÙ¯¢}´ï:$@D’8;A‹ÂZiÖåC}ç‡È¤t¢dý g_ƒìe|:Çî®´+:±ã†Úöi;ì6ÁõÍ·9CeŽâqÊk¿& rK=M™@À s8áœQ)xØ®¶ƒ;Eç÷þ¤¾š`]I + ü/ˆ6§ÍO’DÊ×Oåq⡘àœEÛXÖMèS“/Õt~ÈmOï2ßf¼ä_Îâû0s %]k8‡f V·é±¿xŒè9­¿ia†â×þ$?nféz âèù2ooí,+I\ò>yò+[´Ü¢¬æ}-ôu‡œygR;^ÅæÊM¬o~Ê¡Xf^5)œªä!9ñ¦{ ¶DòJCõj4³î¬‹©ûŒÑIi&,~t™º!~tÒþ4ƒÂ1…n$‚‹ŽfcÃÆ©Ù,ûºöÊ÷¼&–Þ‘I1l•R“Ÿü”ö¯´OàBó|uaÙæÅ¶üŸo×0N®wZÂÇ,T ÖLö|âå„/œ£xQ°Z&LÅï Ë;Ûñû(’ ÃÙ]›2ø"ç¢rŸ~Æš´´ÒG›¾eV¢¡·ÙL \ÒÖ ‰´û)“GݘáÝ‚ßå¾ÖÂ»áæ§r <%œ¤ñ=?ë³vË覕SFðû³—Ü1®½²A½&ê|³w*ª.K˜jnÝ9n6L>«â1i!V^ÍTýÉå6b±M°dÒ7µî˜Ížjš”'SâÒpÃ!Fr½ßFíÔƒõc®q+×ʱ3¹°Éa‰¨IexÇ`ˆ’ÝŽw̹d%¾@'°EšÎ¯#Ó}‰ {Ü“&2˜Ã즭4‘³¦àÄ~*)¯ ÁÆ™ ¦à!| bÂ„ì§øPàÞèk, ŠfËî8Is& |•gIðã]l'ÌÓ0ãæMÕ™îky(n‹¦ ët ìy')/n|žºÙĺÞ9Qt£õ'tÞãëÂ%ÑX–*“z™±Wé:Û«Ê­bå¿6†I<Ìò/1 Ø4aHqmÍ©’þ10«ÂÌm"|Ž¡àWŠñÁÞKCVJËÿ±?”¶cö^0ùBQ~ŒVÞÂŒ÷^M|?./qëT/ÔqB.4V~ Õr,êNÙƒú £òûq"ò!¡•ýlÙl„~hÆø$[Ü·¯Ò—uñêuÕˆ+ŸãõeaöùôýÐìÛXãæp:J’ºã+Ù0j!NZÒÙ€˜}Ÿi ?É›A¼9”®ªÇp¾¦ÎMYY…û¦®òˆ”WJŸôi§‹{–+ÅõTU‡4>ÜuÂv^>ŒÖîVuµ —X"ÝÖà?¦ì†î‹®•Ø‘°Ã.yçÝ$,à¾ï„4”MP’¡`V`ª½°”s”õ“'BýC³J'!Œ1ÓæL² Zç^/Õ tiã™r˜©<6‹.v «²cJ‹Üå©F‹“”÷¨‰-e`/E ›‡c@¸´;éöBâ0nâ°äëvZõ~‚d8ÚôQ¸úYëdüs'þŠBN*·u‡Ýμä*… ~äÛiêl MfCŽ Úà4á”}îNk1ûGñ©xa®+{hÏ^û´±GrîkIû×Þ ÊR1ž¾ºZïJWùc_©9\ìî-' Ï£q¤MñdüÆDI+©›^¨Í±ê£{6G¡‡,/é;4ÊA@OŽ[ï,×.юؘ‘8@†üØEr¼Ùî;S0x.YGT\ÂØ .ÿV'3Çñ=I_xCMφn h2á!­i"³°EàeÀûÒ{°çš­Ž<OÁwÑm Ö;5Ø%%ñ‘dÉíÂÌc*ï7 òôB­NT9þÞ«~Ì,E—ÍæA‘r¶ïü¤™jûž¾<óìç‘ñê_ŒÂޤ:x1Gàz(R¹àIž8ªo}Ã4cqŠPDcPN³c‹1ð$ò>}Šå=f~îâÀ5ô òËJÁË—VŸ“c?|f@¡€Ðã&žœ»j‡¨ë¬‹)"jǼâ4‰'»£Mx“Ñsó;)HÇá§2Œ]ƒÞ¸IL}ãØ–zOÂ)4ÒþÍ|˜~ Âæ–h«~Þ)Ô^ª1P‰œQ“·„°íZF'ÓFb{á"‘W=ÔH(…¨ã=¸ÕèKG‚Ô±Åk%ÖìéfÂÈÅWXGJÄt\ðãK9p¢L¢AÉuXHB¹1b~ÎùmxTŸC §ØjálIæYnvÆhg{Ù¯à 6mo³+þ¤Z›âì~u˜Öp ]¾bÒ+Ü'·ð—ªRTê»^b!ôPocÁ 怷z‡Ëì ÿÌýZË8CjŸŠï6¡$\qñ©gÆmáYkîyN‡—„®€‰¬ŠM:~CU‚Žïk>^âŒ)ÄèC:š$×ùlj(È Õ€É~“o› †Ô­B¨à4Eå˜k¢jÖFÁ2^“ŠN)òþåΩ‡†üº&2lš6}6ë{EYµ3ÆÙÁÞØ›?Äzøæ^–êOÇCi³P²Ë’wM,†µ!D8Ñù!“³–ôôCeôla ‘'vŽ™™Í ‹žGá(´úv=y„ 6Á´õíÙwçÕoÕšh!Ú„ÃÃÀÀä°î¾*œ}ÕÐ+:Ô“ÔªÜ"2-œ³»:FçD ᦿžÄï¤îë”–¹/¼8L3èŒ/‘ÂMÒ÷0°‘J“8°žV ´iÂw™7!¼f‰ížôŒQì°#äG½,¥x*F>WzZ°‘XPýÒ»ªm¶ l2©¥»©Y¯{fLPñý5ž-¯²ˆB–ÓY&”–F„Û9>l„4²i¶ä¢Øg;N¿À‹gRá›^­Â}õÄ0òú⢘ÔÀaËÌŽ¶OÓz„°·(å '85F™_m2°dó\€ÙøDv¦øØø–UÿºVö]™E¹#Émh^ÂRàoÌ /[ÏÍ",Í#‡2âLÊëƒ5T+ÈÏõ©s.D?vgÈãéIf´5¬áôµSFN>ëj–ªÖØ }®nÁI™ã]i4Ó }ƒ×ðÂàl·áôK¥Ç^)/ošóÙýZÓ&Ö˜ûÂÏÞ§÷ã`W‰CSß×Á¸Æìa6pêýHÓ üRF’ÉÜŽ§JrTÏÚj‰8= 3s|ß×w!3Qo}ˆåó„bÕ¨ 5…‡ÒÂä2O”ü|áNk}çõ£°[ü'ºZ`ö•«Ù&îé¼8¾ú¿›ÀZ¦ëN£Æn’®ˆò`j KÞÔì¯Ýƒ­Àµ—‹¡{÷Ï:}—£-*—Ël—mÓõó/Ùûb" éDDð}Z´sÒ„c05çZ7™ cç´æ¼G‚´óÁâ°Á(Ó mbZþÆA?ú0?ÆËw¹6Õ}”@ÃIMy;Í‹2ûD‰<š”}äÎí¯åH%;yâ[€šÖ®Ë9”°t®p“ÿ¹üb1«EéïˆÚâ>í²Ç3m f˜Ï•Xy¬Ž Äy†æ‘ƒ4Ÿ¡Q&ÉjéÐ|IAfO“æ˜ú+䀃*jÓêc¸´Ú˜Ââ®4GUy­Éo£_ðâMÌxL)}hWÛ›1 E$íõ¯–=à|¯êük6î©uôºNŠCË0w–N’ŒG/—H\#Æ4ÄçôºÐ®#ïŠÚ‡ÓZ5‡U8–X¯¿oíIYÁ_ÓÞ߆žE[»,Þ¦§ÇXìúCÉg=€üOרõûÞŸDq³›3âTÛªäH@_”´ÇG\P¨ó‰éâ­'º~EÑJª·¢Ã ½ðWŠ=ÉJËRkùP#Ü‹áIÂ翟ê¦Q9#i^¦IâÉù¬&TÐ*…Œ8~ŸÂ¸Ö¡~_¡tÚaßÃirŠ5Í“m§<}Y™&;{¢*á'‰­tæ[zl¯'~ñZb¸ÎŒnü³Ýü¤¬\j¦æ¸ógµ*^pÞçx`©é´ÂßûÖd<ç[ž–åÖˇÔC× 3:ü|¢3Äú—`è×Ö<¿=²Øi/U<톨 åCP£ï-;ÿ|4K±X†ŸÏyœ7hú1„¦ÑoѲNl“žŸ(rŸùÊŠ)Rßš0^êGŠƒìve6Ê8k‹*„ïý‡oNJM¹¸pÔ‰´h–2¡F /|.¯_µ‘5–÷½†îBg/ç´ñ­¯Œñd =üŸ?ºÛ/Ò)“Ë}m>pé»Që¶{îsK†ôR6–$×Á€»T—rHøÕ’Þ„® ¨hŽvföêæ£¤Ä¤|¿×xˆ2ÈBQ}³Uïª!ç/ò 2g¤ãk‘#ÿÉÁ /›^˜-<¾ é+ÉMú,]å'x3,]èZ7}B¦ÏiR…ép&×nÎm "¶Ô"Œ Û8Xz‡g±ú¤!wHbÍø³'ÓëÙ÷˜„Â’޹J±ZL¯’Ð[Ú0c²OÃ+ $]ûb3Óà@ßÄ ¥ÇáoÜ¡-­3sx¡õzÇ;{À¸ùÉ·8¼gaGNÜú“Ï“&¾8È’³²Óé*W ºX.Ë|Zu'¿0q“¢„°RÛßÊ{ÖD„‡®G¯—ƒ\çJõP\L£KûÊ{öCRN°i=­Ž®ÉÅK:ŽŸq*h¾Ì£ Q ž~Ç!ýf/gÕtð€ý9]ð‘p/ò)¾÷*?ä—.GJ^Ï Ô;Ûf­ ;¾>ÎÙÍF|póð†ZÌ û «î>®¸w&øm“#dà„ÆßÌ>×0X_ŒSoŸ‰Öš^¡~‹,Q˜Ù×ÙcVT‡êÄ®O)×c/äÊAÍvt‡6®~FσtLÛv–÷-‰N‡NOX9ébî‹gT¶¾x²6;ÛÍbÊNÓTR[–{º.À›c?Ú(»Gû´ðmÕùõ®"ÿ,7¾Døâô¤êyžHAIæyC}¾’%L3c€ŽOç÷ Úqj{é¡™¤\I˜ÚLyƒ0Ï|å÷98(ØßÝzuÏÝæÅ×xò‹ÞgÖ}‹œ’©p¸³z=¡.XaX¯Ãúeϧ%Gž·m‡\þ¨#Pæ–’ZÉ´Ö|oQÂ>ý„ÆnFË=iÆÑûí—Ï[…Är¦›S%„¤­1l3+pŠŠH…DLЂ"ë-ØbwKD<þhÛÚ,{’g¤}ð3³ÃoÖW%ò•(ïÝo]œÙ0%/·´Æ¦’ cÁn&©«b.jPjʦ[Ö¤ÑïƒÖZSÝ0¼\±vëójìhÏTè”^$6:’R_]JJת‹ðQJo¢¬Š§kª(c^ “…H„_ÊXŒ3 ³D2s‹DìBË œ†U¼ô»Ræ°úëéÆ×4%tFðî)2v}ðàK„QKK÷írèæ­æ;ô‚ÖöHàé!>0]‰8ùß@xÐ䬮wÝ)†$ö7Àú¨©‘ ¬ò€-£À8Íq­Ú"?¶Aå +àì ,#Z„ õR©Ÿ›®öêZöVä;Oqˆ×Òã™"Ô~qÒqˆ±û‘NÓg„éàc\¿Px‚5ÆKÊg¤èëÉJÚ½Ÿ!'ñ£ŒM‡ê•˜–êråòûX.r_o(>ÿ ·Î%E0z¢¿ûb¢¼EÚraÍFƒÝFi›Ái4Â;5ÈfÖpGµ,$MÄvx5NáÝ!÷ÄÙ ܹètaÄk<,]‰Çµrå7²?óA±NÀ¢@iòCå̽kæç`}Ñ¥ŒîN$ø ~µ¡Q°#Mu~½Ú§!æ`hŸ×úº„½ð«(HVÝ^é5në{v 1vÁBå&i?¼R"ª¥}Ák!òQî2 ,×5y¸ìç±ú_îŒFHê_化”V“5IƒùŽîáZ6Ö°Œ~!'Ìq2£–R‚nîp¬ƒ†’Év°µ¼oâãGðÞPWðùé>¦o¨ì˜<&QÃö´o_'’‰jû›r)‘û´·°«ahú˜Z=§“=å/wÌùj‡!sè06ñ ïq¸‘¾[Ã(hnÊy\‹uØ¡´ãŒ kǵ»Ó"˜CIy=JcúhE¨†ëu4MÅ{óÑONù,“®pß›<²«÷tíÎ %z¬hµ™%ýôb°¨T±+Ä[æ`]óЦµ:[‚nçã\ØO“™Ý{!}™€«.ƒdUCËón¶ëè¥~äá2"=Kœì‚"Ý$"î›EÜ‘-(‚$êKËóÄ`Â<³]ÌABRìè玴¦ùÉ1càhì‹¢þå"u>×Ã*;ÒüÔÁFö¡Ik©_ñ<ÿ*¯oY¦NìäË Å¯£Q(©®ÑtõA-¨qï[‹±&Õ}&xË‘Ïõµ-°Åç·òè!ƒP0=$€t¹Ï»ÞÜšî÷ .ò…ÖÁ%_Ýhøµ%Ö‰Ù{±Â$Åx!Êu‡!)wfÄlv&lŸ°*¶RÐã”Fv&dZ33j”ëß6ŸKÁ¤qýìH×z+ºI ÜíYèÇoi2‚Mbÿ:(©Î*'ÊI´„ƒáaÅSÝ~ÜÔO‹ì¬åGÍÈBÞ¡ ’‡ß¸ÎøŠ9íÕ%%1š²Š”ÃYøS_ ¡%bÛé–ß#`G¨ŽiŒè´ËÙ9°rijžu5÷mX;É/8Ü-'O˜Mï±Öò–Ü,–ˆ H,µ-ØÞv{\p×råÝw¥Åê²eö· ,ég~f£/*øÞ=æë–…5ŠbgËkÅøSSËmVªE«“†sþQO–ùíÌõÞû+••¦»~Ì‘¾ÃçÁsîií¡]Ñ*B’¬Én¥;¦¸!´ºµ¬0 _‡ïÅ*ÚÏÄûÎk îŒÜ;Ê$óÕǶæYµœÖåÜ3ÂÝ[£ÑuJ²Mç0ú-i(Ó„íÜõ-…óMpÓp?û;ׇÔàØÛJ½ææ×<ëºT%îú¤åïµß´z ×¿N4‹èǼ¹)÷9SŠŽàÕQUM#B¬Y0„·XJíÙ$/22ÚOA°ÆŠ<Ư,ªÔ±„8ó]y­YÒ(˜=ÀŠ$µgyÌ‚=½u³ gI¡ØB~¹—Î5rûÆmÛ%̧cÉóq%±ž.Tléá´©ëÝ@›PÎñÈÇ´*ÔµŸ>÷ LV^·N~½[çêº^+/ùÊ@-ç*|ed÷Œo ò¢­#7J8cË5߯°Úï åóK_ì=Y¯ì÷Ï«öõåf¿r¢eö埑¸„õüÈ ÀR’Q~ øq%–IX-W!>cd9zî–6ËF¸×Áˆ ™‰£õ•ÔBEÅâ¶øŠÐÈ{›ê4&SM"8$ºm‹[’X2kß­ØDmªƒ6Ù²·ì~G…À¹Å×V ¡SW•LšyìEjñŽZæ"EzãôYg¨¥Mò(DkæW v"wX:è8¹ð8íâs˼0Ç%ȃí=ÌÞrhjAßPÄÔIŸ„£3²èì•.#Ó*ë»Mù{>—8gE“{ &™LüÇüÙó—m„´ü:T„ ‚¢|¸Þ“]?n»‹Ø¹mž2¾›ß3þ¢]XÝ Ò ”M’ùåí¶F$…>¦[šh4dT*Ø4Ȫío^ù»y1\n_Âë`TÍ`ˆ„$“ç0‹»E_Ò/£œþ­¤2®M˜ ¹†«<$A”ÕQt l§½Ž”61,~ØuGÖýMùʳ‡l•lΜµŸÇJKãÄÔ'ð‰RnV}u"æ0²•­@çïwC3QcŸZkûu}Ýz>íÆáC‘šn@övt©Ùe&ë-;²Ò˳8nŒe…ì0’ú|(ŽË¸=|]Ý51ë¸ ºÇ3üñ‰1_¼°à>3΢øgOëdFTß9_ÈâmÿFºâ<- ¬:§ÙÑ¡v…I`ÿ´§ô|ðuæzÔÌò²f4¶6–¢Ýæ³b¢öj¸ìâF&µ’)Ôå›lå«…ÖgÜt'zÃýø6‡¢vz£½¥qúÕúÖ'Ê~zŽòT~ò¥á/"ÉÕ*¬$m4˺A Üñ_…°7̈¼|¢¨ >yÀWIñû®W5&ä¾4Äèš&ïq$[æê¢Ѿehy ¦ôhy{ÇÒ™².þðØgTÂ>ñœv#U©j‡—í¯wnˆöª¥oå5ÍDñÆrÅ‘uþåFÄe,<ìÜ4 ºrq´gs°,ëü¬œÐ1»¿|3”¶ÎGŽ~ùn|³A ãC²>…Zõé‚ ðB¯ìDY¿ XKFT%Ä>Úù“h•HpÎëÙåIt]ó;Dðw‘G·¤mµ»™0ï>*dy~ÈUÂvÙ·€|é¶¾ÄÑO™¥.õb r¦Åf_ö|x€žHÚÇ›{IÇ(©N“adUÁ9\G{ÛŸF[¾r%ñB´}¨¦á%»ÐrÙÑ„ç¼F™)¯ºòÅb_Õ,‡xÚ–½ìc–zªudÉß;zèžÄ„“ÆjÉÙªôñÌ*͘í óùÙ*\óŒ’%°hП@1â+'œ÷Ã^Ö`ó§ K‘ü°C²Ün¦YoZ–“C÷âì¢Ò¯^VOk¥XA(À$ÞÉi´»õ79²;'k.èGwDU¦!ÙOO8b} Ï>¦SÎüŒg.bëÀ½ÌÖðBª±ˆ­ôjU|­×iô[@-EŸç/iØk(Mâӆ_±Q÷û°É<õB¸É„˜<”g¾Æq„ľK9ßñ¡§È –™Bk2è,´½+ç·«c¦Hç“"~ÉåEÐ$K®·+šhꉨ`Á‡ßàÂëØö@âr4‚é ¬G üðsî¶e¼@Žñ²Ý‡5QÒ¸oœÍUW‘;¬ÌM_¿ †{ª»§šXXõï7Õ¼ÛèÉ›ˆ¾!/þBK¦¶íG‘²iÕaS×=‚~Ï´|7áè€@Su‹y[Ê[þy¯Vâ|¼8ÐvÛy$TÀ•ÕvŬÙèýš(8+·K˜ýÈ_ƒÝÓêI¼¾…Ÿ#õ!ÍT¾ÛÂEâu\án75%&šJŽ%Y‘NXš~ëÜÊI‰J1ŠàGÐwF.Íqnî/Næºiùº§q|ÒûÊ4†‚ó)—Œñ~–V3do²fžï¤;>-á2Zý]Ö¦Ô‘Šq1c`¯žîèŸ^a—å’­³ÐM-zĵpmõW¾/õ%ÀÖ(êq¥”!0„0ÛµdÌ9ä;-î†èɹÐZúê%;ýn¢Çì¡È}»ñ:™ Ó¢j¨3BC@Ò‰!µK]—ÒéZu½‡tÏ},Ó*–»óaJ†­K%ã"­æ/ƒÂæ2Ø„RYsøAƒh¿¼/fÐ/™VSÄŸŒ¡‰æÇ~\·ß”Îaög¶¦ ÷5àbuœ%ÆÇ^¯¤\ou™¼ˆšÍ¼8@¨ba¾gŒBµ®uÁ I±Ü¯óÁR»¨G}*ÊG9µ›þ>uåeøž´ý†k*¤êãOŒn6p¯YÕm‡2¿om»óñ¿ÌnN“¯nô>ÊÝð7-­•+bå)øn[l>\DЇZ\TT‰+b5ßȳÛþÔ{Ç~,b+Ü|ÅÈ Þ¤Ì~Ô 35‚踸¯Hئ/ïžyDÔÚ‚c°…Äì¼f¦Í’)×cëþõèLÀi&â3œ-]†J×:­šëøgòJ =^lÞ2x䬠'¦J gx39¢’y¼Ý¼n¿;¥.ô6áÉeB`PN˜•veîR¿2ÁDK#qÿePÛ3:õ} ‡t# ¸ÐE–œv˜—+^yÒSÀdØ…±ÿe¤Ú ñOIVX§ß•K~mZ.âç¶רè‹Å©-Ôx¤íj-’ÚQ<Ƹ:·i¥€¹Ó¯ÉøpÝ3³ÑLÁ[ÚŽë£.-iÂòSõÙ쨧 ?gŸOïN™ÐGkž±xIâMø¤o‡ÑßK è%gÛl=Ì\ë`)qÉäš]XŒ7‡7–F,t¯å›GPlÒSO±s¢¯ñº6>/nÌÅÕα]¼Ê^ò¶È؉?ŸÙ×øwDÇ##XÑÝÒÿcÂÒn µ´Ðxnnµ¾ŽÏò¾²gëpSËX0{iã›ÄD82y¸Þq7 µTmn™ç·¹›s”è"–}Á›;b2> DŽ+šE3Çó”! ¥Wp¹ÇÔ”f¨fŠxC¦Tî¨ñ–ùÌÔ0KÐÉá´(»°°ÿbÓ.II潓д’˜o é'Ù‘×9JƒMñwß$Elžá*Ú~Äs쮲 ÎdW¾|ñQÝU:`óYu•{ð‚EIÀÒ‡wƒVÏZÙsª¹ ºªNY,øJûîƒ~²î|d­쯚I*½E›õdô©f¦u›"j…Ä&Ʋ6 "ßInú²1’ûØ[5'3HTö“¸ÖdC7¸ôŸ7øá6‹‰Ÿ§¡0§§°G‘ùËTéÕMᓬ‚6ž¬?Ž S92Qn—Pf0²¦¢âÈìE†Vº_@ïûNžh¤[—>‰ÞxJN»ÇͺÆw¤ÞO”P)¬*0¸zµÇäFm˜Æ‡Zv€c9*[½[A|ÃGãÞšx¯Hü!ÎðîqQÃ^‰c¤º½!râ!ûòôËô>’f€¾Þ$SmÛJèᨗ.]ì©@FĆ|ÛÓº#½V”rÄi ÞnC’“ÅÇrÄ~!º•ó¹móÛ&%‹è«ìBY° !jnÔ&Ñ*Ëã÷ö‡’oæF/R…’´×Qç|4ÎÙ >-HÝ0LñÕòÙüÐÌA¿Û „ìdúÙÞ?柪ó6 ­›ùÍLâ½Rk+Ú àif¿.kPiØáZ)U0ô4ßw§ßÜÌL‘ M ·3œÑ»[¬FˆúQïè[f‡9‰š®ý} ïÇç¸:íW<”TÇÛPúg»í3É3meO'*Ù0K7÷³’±?6vF ö6~9Lµ~ƒ¸ö«¬–½û;Ê(=dFÚï ÔÔ[‹uÕhWó (OªŸ:ùtžæ1êk@1ˆÌÄ ¹Åsû}<;¶íjõÕäÑ{OçÛ¨VAfR¯ëS {ÓñÁ óî¶Ù[ÅÌ…X鬓ä:ăj"ú±Qà:Š/‘Ó“þªš"õ‡XŠÛqk¿9”8ÚۀʦèÌï³2 r¦qá£^KJ¯“?ðIMòI¬uø*ýQ¬qÿt•Ѷ­“í¹)èý"-¨Ð×èö8,r"€¼cÁ½˜ñ}ð&—M"w2¨QxïzºÕqxjZ|¯Ù*ð}uk½e±Ç·£¾eÖáñ°ŒRMª÷„Љ±ï‰MNÌM±´þKÃ+Ò¯S§ÎáõËs®M 4òpåU8ÕbòŒ[\½Ä7n-²®Óè¼ãZ µš†ˆ©åšƒ[?] ͘°0ŒO¦rXwv?§büÌá¨Ób¸AÑer jñD؇jßz0–ÈzïýöžöÊñŸÿ ñ˜­î`Cátˆ›ûŸúêIDø‚܈¹×3å2d‰w3X†£Âአ7}ËzZ÷Nvq»ÞÍzÚßë‘DIQ8’53¨èÉѰkElÖéso1ñÝír)é3ª¥žÆ2ƒ…Ãr”ú?+O—;¼®Šœ—K€´Ÿ%ái¦ ¢ìD^¶™½Cp掬ˆ¼ùöiò Z\¾ú‹ðC³üáW®Å$=î35è­#¡|×@Wå)CM!ȼåc6r»èZ–#~ž_9Ò•ù?Z/ýÊÈó‚ µK_MÆ)FxKÇ,4\¬êÜúŠE;OsΨN±;àë“0_={'•!o¿•êó†zG¸<@ÀØzTN¶·‹#kð}Á¥kî¢9æâ*t·û6‡ºèhZ®Í†ª€6øÕŠC†ˆÉ·ü óU i¢ÁJI’ù!¼Faë•åôN£ñ—#ÒÑ•wýbIm5.¹çÈÑD#{óEÍÃG½e]„l-J©+ñšD<å¢äê,±pVL0qÄQUÉ´_2|`zÑê6W>!¹5‰ÄÁOg–‰Ò X¼ÁZpSÒÓó|¬þân]È£Y¸˜ÇK='{NªÅSã[QÎ. °yh÷ ªF‹=ìxb^ÇÓ¼Iwul É&±Æ½çFCH|†§˜ÅÃ2lhLÊ(¿ëžy›«³$É'ðѹŽ)e†õ«°FG /We-ŒðÎ äQïz/¦n1l–Buè>oÂPMòÉNsx4Da˜ØÓ!OjYݽãû*Q›ñ Gùµ¹Ç(_-OŠB?4 Ç‹íÑM»1X…BV{mqÁÁs{™üT :¯ZHëX ›_¡£åÌVdƒØ žûˆQ¸´øw…™î%*úO‚„ï¶Np–½¬K>?Néšù3î ±Odp¼0O¢N¦³}'Û†3ʶâåií¡ñi)ªBrx!¨Š9Ásªÿ ïê÷a(Dgê½jkì•Ý[ é@fb_éû<ð€±ù*Ší53¤ e¤å\½ÆEš ÑîP êF„»’›PîäÛ%3¿Äõr ÏÆ,Ì.zßݬÙ<±÷ÞŠ©¶'£3óÇ`˜nëdê ;ôê%R;«±*ñ0Ÿ¶>}/²ë«ˆµ„ÇÐ?9vîºÞ }1EÌÉ­+ Tÿx"š¤É½î@ŽñåWçÆí‚L£385&Õ3N¬)ñCÙ¢Åõ"Vt¾¯n#J%ü;á{Œê·7µ"\­Šk£q•§k·`àŸ^ [“ä˜~F¡íl»< hDUü±¿6• ÉYB‹¼ÖD˜R.~¿¿î§b/>¬Q“9© Qðíî> c<(m“ý^eÓßûŽxU,°'èX)èà)$ÉÑJý©<@»¡M~ú2âz¬GJëÐkóçNN‚!Ãó,í{nÓþñІ¤H(ý¬ÛÊ`?ÚP/Ñ‘,!òà~—X]]nŠ^:9ê߯ã°P*kµn·fR!v‰yŃW–›a08f’ôi¢>™”û4ñyöáñ:¥`É``öLÛð0ƒ?òK ±¢ñM‡°869![Wg—!ky½§WCÖ·;ßY€<ù“a¿ úZÊ#jþéhYŸ¬¥m%Ô¯ªÃ–swÒrï=dTšk²ëö°Žð”LÊÕÖ„6Iœ¡Š-Cý» :.8qA’ö±Ÿà Œº‚µ9¦ ò¨€;Õ.ßOüèûµ/t01þ¢òØ­”¾³Ò©}šÙºPšŸÍäY¸‡©Ë(;çìvé“iš¢gÒÑ¿“£$¾åà~¯}w¢¢âÎLuùí$ÿÞÞqŠªÍ5ÌmýgK—5Œê'¨ŸÉÛK{ì˜Ã• òJÝU~̧³ó¼ƒûͬ9m͆R{$×öÄPD¯v„SÀZÉäï5:1·ÑDUÝ\_˜ï¨ð]<ò¨öütÉÀšƒÈ¹_¡›²Ól6’6¨ß±¶HçÙx.ÞÉㇾґhÄæù xè¦ô÷w~èäÖ1·ŽCÃõ‰ð’8+Ñiÿœ4®ß„U=±ÆDØ:ˆÆcоshs¶צ&ÃÈ¥‘˜\'‘{½NO‡ô£1L«T”ØgM,‡8'¹—„ïp\«kžéñô Fs»EOŸòC{mÀ e…û’°ö*ùN8‰ò0š¨¿¼üF^Š*/Dô­Yìe½Öé6ýR¡Í ‡½bô¼w\£ îñKXéž‹~(áb¹ ïæ_žðÜ9*s¹ûÞc¯˜.¯¡l`¹,^ð³9ö'ÊÙ‚‹]¿|àèîò+¶,RšÂ˯×IO{w|D&ÀÎxqñzé6}V»Á@ÿM´ÿí`ý·®7b{‰»'P°ÛPnÑùywÇ÷lÁ÷ Ÿ‡^ªbŒÐtxH¼GS?€qÕ犷¼%ZIžO¸‰÷t®2ÈO68ÐÕwôŸ-W ö-Ÿyl¡|J´ÉóKKk$å彆¢´Ã·…OcEGaMVG€[K–—/”Ü*ä'­Òëqmξ–¨K-ÂtàÎKMÞU® Ú¶E•Zy ò^$ÏÆ0YϦ_UAe§©&{¢{Áç÷Ãoß~o‘0ÖO{Åí ª‚®1BÔs’(fBß`4}”~™ãÕ_ë;TóW­ÝË×z Ôô\p)F‚~áÖF$™½©_ #^h>t>$y l:¾Q|·‰u‘kQ)¡Ã—„Ë‹ÁÇ8ÃIǪ®/,‘ËÍ Ñ±pò»˜žSHþ¤"RÔ0dØ9H¹›šh2¢ñÿ.ÑïὌè¢÷œnÿ&èŠh0Ž*¡¾Ïºÿ vjÿéC‡½67‹¾m‡ÛIÔh%j8M/&ÒC çíl–2¢çªôcS®ñÎ]/ð˜ÎªÂ˻lj,e2 ¼$Þݲ>~âcY%€¢ilÙ><Î}Ó’¹*V?hÁÂð§á/ýk˜àTÒ`öÛÍ–ù¾ÉûÔ$‚nŠš¸¿Äïšž•n0(&'µÌq—#XoÉ,@LmìÕÖaR´y¨Ìù)û¾tЩ[xÂä`AŒ7ÌåTä'!Ë˧@¯lí¼0¥KèãYØY7…Sbâ ûç–;iÆSÇ£e»˜À)ž̵£“‡FРVÒ$“c¨W–Zdq%¸A~õ"Õ“Ñ‚I=fõ5Øo~äeküGZQ?^L$‘“0mþa G¾ÿL%•DwÿÀGºxß;I&¨@£¹¯Ð>‹<ä;¯þÓéßÜÿÐF™ÔþŽˆÕqk³ŠÙ[Z­0{k¤÷”øœ5ÊìN+*§m@É­¡5¥‘OÍG²M“¦§«L]¸#¿j)=ÆÌ~õT ‚'ì?;ÁëBôÞµ;–¤ýÏÏC"­´.N×Ј^ Þ?%T 33‰œ@·jv–* ÕCh,ZPíœÇ“tØ>\¦Î’¥ä§_ØÙ„®œ»N¬¯X‚w'{Øð<-LÊQ•œ5ºéZñnsù©0F4ð`_åì›7"Év¹¸Ëé8Ä—‡¹‚Fò€Ý¬/8=ÕqÝ,–¥Ò¯Xzðõ nnk ï»jé‡b"n«Vbò£צ©¡ƒr&'‡·çøtí"øÓÅïÔWШ"»­z¨—GêóCIö%’ ®ºdÕç"€0GîsügI¡*Ûƒ»¼R ¬¿½÷ƒhûeBȶ7Õ`›ƒ qÛ6˜ò¨Œà%ŒÀAÚ)J½AQ†©&UˆÒÇ‘ÉÇñjåÊHB6@¯@b1NôQå>ØGO=;F“KsŒ…{EB`LŠ×il=2ÆÐ!9˜¸`Õ寮ybƒ…fèPy~qe%‘¤9€{c¾ÎÐì¹»ìèßì»ï2;æö ‰NÄ~óÄôf¦‹¼.Û´[fGÛQÉŠ |5k—WeÇR¶_92ü*vÒ‹é®Ð„ì—ø…!c¦MŠéafjNh qKJ½7C°€Ì“¢á(¸à)á¼DµGAQ¢J½«ðŸœ:`·Ñ´RñbjƒêTù]Mþ¡8+=>:ÚÀ¼\ÚOÓRmdùøw"€_¢!.~J ˜èf±îbûO¹ø:y™›è]‰"ÙJ3}œÔN8‘iHvvÞ÷DkmçS½,¿ÞÙŠøi¼ dsZ©Öî0©ìC¿Zk×÷Af²ž§-Ù„H¡»Î)éb×¢?ùÈ»Ãã鼑ΩÁúV»¥#ŽëU·×ëgŸñ)å|>V†Š|¶ÎÒðGÒ°|p?3%IC©ÂîI3?ÃCK1<ßDddmÒ¶“ØYúÓŽ_³N‰-´>‘O1$F‰%Ñ Ö‡ÊxÕ<´ ²_EYTC0fŒgOÀǘƒ¾¥3µ®v\V®ÛA`.îæA(é—ª¡sÈí©3C2ñ—vüú?¹Í S×ìòoEô-¤º ±šE¨yµ ?i«øÞ§éjIêo»ŒŽ’o) .ðBjÌ$kb~þŒ±çJêcØÏ$¬Èä3Þô ‡IäHïÙ?:‡È:SŘÎxå¦ZNø†qo)™>Þµ¦5³@KÍÕÕ Úhôò<{}ìgN=2À$L5ß×”´rëÖ‹FxY¯û‡&ÐàƒávEyÏ4V°Çæ\+X0„ˆŸîêî‡w¦±†Èý“<Æóyf–ml©à¬òc3M"¸bDª|æ{«A“©&®øvzBÚæùÎ×¼³„a7úEòÞÜ®˜UmõÜúÒÜãZ YýŸVIaçeQà%‡ñ  äï¨Å+´Û`£W¹ðþ¬â{· iv_J¿nh e˜²Q5îÎøZnÛ£ØAûBZ㇚'-óèëxPÄ1âÕ½&#.z²A.[2J/>™®ÎS&øÕ$*Awõ1ÕC°‡ëÜÛµ'6ùH…¼f%5Oc~Í2+kÃFzÐñV97î§Ê±å÷ƒªg‰%Lõ|rà1(ÄHýGÙS;ÀÌÈëÎI¸~©#%"ðÁ@>)C*æ]—½1B]ÚÌ÷UvÀ¶¨© 5…f;¿c‰¾!Ú¡êæ„Bâ,…ð•udxÀßãÜíá9ƒ=rÅ÷S;צÛJr©Q§HŸšëO=SèÅ2m`ýìòË<ümLxã8 ¾@¹ °±!‘Qâóp›UGb6 îèøp.´\ü4;I©v»~üÇmt²F™2‹¶ ›§b:sÈ=6Kƒí–+g¼Üjb@¹’¡sI¶øXÅ*˜^·:¨/»VjõCÉÓ_Ž8.Wv«ÄNX î@ÇkW•­M¶Ökb³^±»m¯ˆ S‡QØÙy ›,ÇÛôú'>ŹðD ÝRº™v§Sìƒ@‚_È{`¦„à @èøä÷æßs8`zÓ±€h ˜CD†—2¿Rë¨rÓÿ˜‰#¤­"QÁÑd礄(¸\OYPwÇuf×1µ +‘v„âÑ UðÂí’z,óÔ] ©’ü$!’ebý`iêÛNÑq®ýüh>oó·OÂÿm0>IñâN ,=¬nÜÝý )d⮂£ªø@ÖnÁókHV/<—¦BHëm5´î˜yˆ/O¾G^9@ØU_a<)1S£hï;ÛMùD¾¤M—Cô „XTÔÌyÌ㲤O`oöŒíüôµ`sÙ┥P= ›±9»Tv)'8Ÿ° Eä!ÕžÊÌ,K¯Èféh× £¾^4ß1ïäRÏàOmñÀ¨4°:×° V÷èžSF ÀÍð9édRžÇwdš— IOfÃ+õfÿo–™z9Úv½ÓxÝœV¸æÝuzà{7øÀÆ(,֍ީøH\³©š§nh³·„]/Òƒ}Ú&¥¹AíÖÒ"ÛST>a¯‘Àc5º'†ïJ»o„-M˜6§N…Ö)Üö•€›Áµ ¡[j ·AüV,ÂZîÏ5ðå_4ïïîŶˆ±©»}ALpSµš•ËnŽw„7)ŽûÐa aí¢àÄF|D0’x„/\Jet p»ÔUpò͹鲞¶¥©¸Fýlq”rÂ9Ní2Ú¡Ò°é¨ûaí‹n˜´qNë’ «éúä&7;4®ˆy±:[€Ó-9£ØñÝê*|Œ "³ ûÚw·ÑÆ­\J?²s%p‰«ÿ¸Æ¤K×Ñ?Ú©ã®0Šœ§.Q<ÎEõùþ¼à†mƒN~û2È?¶¡ÜI‚ëQùªž{ʘûÚÿÔ#Sl<lµë/•2TúתD:S3€Ýü¨“Q¹çRò±©PA ÜKˆ…â¦4^£beR [£&é¶Yj–é~iÛÍîS‰¯¾N«ü÷Äf~Ç>¡|ÏMØ4—àý<€ñÕ°Ùh¸<«‰‡úé¹­ºrõ\¢ mÀnÜÚ« †É_~­öUâ5°lûR^Ôs)Wñ«¶ î? e˵Õó±{u¡Ò²ÕŸ³;Þ †}¤¥†%êüòÇclö^3™ ~3ÎÖmf^ž°ý±ÓÙÅu”Ê'ªN÷>Rp¬Ç $’ÊWúÜl‚̶¦g®çÔ À ûØÏ„e o£wÌ`«yBŠ/$a–ž¦œäAwt¬¸DAms¨ïάåtZ ‹ÑäÙ_$…¤!Õ<ã8CáÏY)ÿ[–xÕ¡"éiš+¬qó¤i2­¹¾ÿ5™gà?%zu-¸rW.µg\p3U©ÁºPâ½²™À8¸þ\¥:Ää .¨ùrû÷¯‰‰KNsC•8ÿåKŠV¨Uð½ßâWäš ø¤=¼yÛn#‘@Œ–Î;•…9^¼„³«®¢w ÇiV³S€á™ãÜG¬Q6iW\¾q´„ßHQŸëWgk^IáéËc+B‰SÅœÉÈP‰)ðæy牽IáÖwžç-¶AMÎÁÔ_øª“£NÇQr0¥5iœþ·c¦%&$aÌwØ»n’81ªœüýëP"ÛÚe»^}u 0—J@‡.ºÓ>MëN¶_À +¿«Lkà lGŽt¾æ1¿7DÎÀ™—ީ츥rŒ¥Ý™fz&S¨Ú`éfc¾ÉC3YV"‡ÈVX WoçÑ·û¾ŠˆÕÅ…Aš½|Ænþ3…݃üú‚ƒ7¯iÙ24æÙ²ŒñZ\빓:àéŠ k•%\ë%ö 3ä[ùÁs C>õ¨_¯æ¼] r@ç oƒà|PñÓy*ôÆdã§ÃUc1ä~¦:%&ýo¸„0®*(aåq‘$Ì:wøµ¹˜yŠ¡)÷à8|Œ Š3ª¹ Ï[Nq壒ÂrÒè™Õè¶Z¨èê‚ÐH)ø®¶ÄQ^=·÷èÆ+YBç_ÖìZœ;oåfðJ Êùm›ög^l•¹¨„õÊçßüΜGµ·¥ÉŒÊ}¸2pÈèµm}²™…§º•qg®b£ýé…?1RÙ‰`¾ÀÄå~TÀ b¶J²|ç Q|Å\b¯ yaŠ,¤D^è,ú^f ïñQÇø0$â&çæØzˆT¥ky[aÿbZ®ÜÜ5²Û%©wÜvµ­5ß(ÄkA1m]Ù®ˆ—ó3,ñÒ‚ K‘¢ Ô°vöc¶[Uß4lÈ»yÈyËV™´ì¿S×_<ϱc…nåÚôUÆ,ÿÊ÷ÖºÝJ×Á]ÂðÁD„á㛬y:&ÿæ'üwLUÅçÍFq•C쵘Pa2"õ_òµØ×ÏP!íz•é=ztù>n¸Ó/®7º1û5åf;]†út¡n µôR÷’ü|ˆ Í—†âÖy­·gI;]H.,¨„T.@‹2ÆÕIÏ@•×AêÑ-/ïžÕF$§½Ì-éžéëF²¸š/½›*ö´JËPéFƒ±íŠ£%w®eûMá(T"-³¸ÕÓæ£kœ€c ÷#¶>΃tO{ÈuþSRq~XðZ>S àù¤ú°à7Ì’ݪL+IG%ðxh‡@ø#ªáÈìdY¨rn,Ãɰ©Aulüê?zN”kÀBˆ™•{{—h×¢à å´OB` †Žÿ£Ì1G϶Ûÿ³JŒúY¾MÓuŽ5¦~™_UKjyw"Ae”ËIðaÑóÿP–àld‚XN颰]C endstream endobj 411 0 obj << /Length1 1631 /Length2 3636 /Length3 0 /Length 4656 /Filter /FlateDecode >> stream xÚt 8”oÔ>²5…›ìÛÌK¶kBd‰$Œ™×ÆÌ˜kQö­D‘%²µH…%kJ$DJY¢ìŠ¡Pú^Úÿÿu}ß5×53÷9÷9ç9ç¹Ï#±×ÒZ#»‚Fd]©ˆÐôÍmlJRD ”`6:üe‡I©4™¤ñCŸ bèÍC‡ˆædpȇ QRU©¦@J„ú/"™ª`| 8À\8D&4˜„>™@%àÝéP_i¬ €TWW“ßÐ^ •€Ås Ýô‚*b1DÀšŒ%€ô€RHk¹Óé 8ÜÏÏOãES$Sñdä?ݰi ÕÄë-‡1^àÏÖa€;öÃaMv£ûa¨ ˆ,H¢A!>$H ê€µ‰`AI?Èf?òÀÏáHEäït?£×HÁ,–ìEÁ$<àF ‚€…‘™"ÝŸ.`H¸u"†H#Cñ_ ˆq…GÇFè#êðg4,•@¡Óiâzðõ4И I8}²—H¢Ó`ëç3 PA,4÷øÏËõ$‘ýH'!7 ç¶Þ··%¼}@ƒŸÈûcÃt@@ìG¡Ðý±îðõ6pÉ\7C=¤)€ÔDp¡ØIÆèT0èäߎ ‰p,pñìOvÈ ºýÀÐýS þÀq$?$€XÿüþwRŽL"ü¡o\1ü ÚÚÒÒLîgË¿zzdà¤PPB)*JÊ€ªº ôoK áç)"MHnd@ýÇa¡)ý:°ïOHÿ\àß\‡ÉnA@úÌ*,ô…ü?‹}#äÿ§ñõ,ÿ«Ìÿ{"#"qÃ/ýƒðÿø1^bÀO¤[:´ædhHÿ¥Ú?×Ä|¼þë5¡c ]@“ðÄ߃$ÐŒþ Î’@Ǻohã‡Ùv}ψhI¦Ö_@‰@üÇ-Öz=h$7\ ´;ÿV4$aɸõ%SRQ0T*&†€”¤¤¢œDBÛˆý7D ÀId:@Ýnd*lýJÕÕ8fÝ´T•!Dÿ Õ÷p×ß éþQÿ„bÝCePÜ¡çã²þ‚PvâˆDð¿ÈÐ’ÀÉÒ©CˆôWqHàpÊ·*„ 5‘q1 óPÿ‚PqÚ_Š ÿ¡1ølÀ¦‹õ¡R¡'fc ÑÿÂïúƒXØë2V3Ü£$¼æK1ZÈOa¬CI™ëñ|,ƒÓnÔPÀ÷ÑP}­åT^\/ºáÅû¸å¡íSJùß+<íw"<O¥Åiì|]VÃææúNþTçví•)š™Ò{Óúz ‡ß9WiÕâÇÐí–Ù%ïýiìeÆ„±–deáç;îsRåÓŠ[Y:ÎÅqìÞ¿µ•%¼Q[¨wÝý¢ÎDœ6¯Û1sQØhb9­é©’ÊÈã¾yfÂpšÐä$Å”‘1y u¼QUÐÔ¥è–m4ܽš ʨ ‘v¥µY&\St³™¯˜ºæc!B­œ)=øìÖm¥wÏu6VÓjá²øã‰cŠ<}fzœ…÷G¨Jåœ –Ò5ZÇ £;ƒõð…íK×tö£éf›œ´¯ÿ$%ÒÑóʶSZ„ Ù¡â9cõ+MÈ»ð‰1›[Ì}vx~¥÷ÔJE7óqiù»VžhÅçç÷5´g¯¾•~î?Âæz,á6'zÞþsnnÜA¶xúº}™c÷r„o¬ÿn£Ž=Ó’¸äÌžPoª˜lª…ŸöYg­Ø"+>ä£-?ú5é%§¯\]%/tsìˆiHÏôSN|óéeÐ-õ©ó@e¤Óín‰Ê;\UýÉŒM¥ô†Ö¸ñͤø¥#ÁòÚ MG÷2ê·ö Þ­:4ÉØV=·i¯oùJæHñeû"¡¨g»ßlöŽºäèíàqmG–c©¾O!‹EWî»ø w¾ÇŽC¼d¼e™¡éÆ%ëX,檛*õ~6¥g­ë@ñ>´¸)Ò’™~ºî–î½åÌ+lt®õ[õq ‡%©ËU7º¹»°ƒ|›?ԙϿ¿÷qã(u±̇³GÐ,KýxˆOÐméÍ’ñÔŠ3fçCe¾šß†¯VaäBH~!6Ö0¦Ü®Yø•7¿J¾2,3X‹š0¹îÈ’OÍ}S¤éïý8eqåPïaóóœ®N’S0+×â/\޶H/?¦4d‡8Š6¡›’OÏ¥^xZ—Yí&9¨a¦rõnÓû™Z½T£ ý‡“9)V4¾o¡ ÷µe¿à2ÆàðžP­½Rõ™ æzßÏhÝ5|Z”G ye••dRçz~¼}ãNX‰Tûb@«]Ò!±ÚÛ¢~L¹@–®jãÀ>šÁX2л÷“ÄÀeýKóK:☠´:TE„X½[Ù.zy€µb2–©äÚƒóM¼šðÞ©VK¸’úQ8,¹4ê#)žù­ûÓâ¬Wr6µŸ'w¾eOàÅ鬇ÕÇûT&XíX"‹t“œ{=ZO¥NŽŽnН¨¸ªâ†Îà·-¹%p†h«ª~j•ÙªûMš‹BCŒDí}Óù¬ä“‘ ãÒduýý’Eé¶™°b#‰Ìš™´UxóÒ÷À1ª w!‡~·»hæÓ€ü72Î<‰\+uBmž›R´YŒ÷ ¥J%÷‹"ª½ÂLÅIÁk'çO} $gŠÄRn_Ȉs‹|5†ª‡·Š$Ø]›Ër€‰³gæþÝn¹¨†y‰ÅÕÞs ÿLÃvoZ¹îÙ0«'H5»³G½Ÿ£”¢,…øDM6KÎWQ3C“‡§yo¼ð¿5),K‚éTéÈ’-kOÊ¥·U“ÒY÷î´tÛ•‚ˆ Qn\ÈiÛ¾? zÓ-¦DãO¡/%¤Ë+¥ ÞÏÆKÆ[‡ÀUƒV $ômgͳV¸3Âyñ™é±Ã¿½æGz¹Î®^ÂÈ.¬<¯ÛzKýë4í‹«s~öi(x¹“hûéàò™;,¡ñ$o5/g4"dTË÷ËèÜ× R½”×ÇnÇ,1¸ëøsTK·f˜<1}4þÂz.>Z˜a0ù&²ÂHæqï@2ëRÔ]‘Á1öMéåΛS‹:¸ÎšòHOS®Ùï`ÇT¡B¯ÄŸù*CâY™"ÃvûjI“¯%5’|Ðï%~Ñ”TålÏ×mίÉ._rM¦+¾µÚWª|yßJFj©ÆWA`øCñ¢Ñ©Ûl5 q¹qÁ7Ådžˆ1X)y]T–+r¼Rù¯’£ÞÃ<#,[oÁ»³Ê½Éév\çªlœN ð…g¾žrãåȱhÌÆ£hßÌü/uDæ<…k‰îá«’õÌÀW»–¬uöñõмŸoÙ‘Q§ÿ}IãvãÝópvƒŽDÂtÇ7œõ2¼ ÊÖRŒlKìÞ)„Tbû>¬2«hW9«ñM±ŠmùEÙ¹ lÛùüꙇzö’µ:F•{Ê…-"ì=­AÛ[»q•qžíõ/m´(÷¯Äú±£²—?ëˆ_Lkík·9-ÖÍÁú]7ž©µ¹MÛzöЊNÓÛ".^¹¥;ƒœ 4[zû©F»;RÛç_ šµŽ¶'}‹òw¾<Áu÷|ô£4~dæù½jXó}Ÿ‹‡8Ÿüd¬%!Çzºgëg*5Š?ókò¦ó5Ø| Pï &hbû£Qß‹aS”1¤nʇ¬Žæsª¾»^(–ñŠ;¬¶Ës§MyuM2©¹ ž½™Ü,HX8ÞIM>>ª¬zMÈÃÐüo=Bæã’èÚŸJ'¥YÞ¾A%{ œ dM¿¯& ÒÆæc–riËñ§<¾„#~rÕeçµÄS—ë2öÚX±ŸQ/ Fï¹ ŠuÕ¶©g‘ãÖž~æ~ÙâjñL±ê`lˉ»JØëMµFæA"ßx|nh€¹W>zñ|JÆû$nNÙíÙÆ†=±xÌTº`jÍÇžºë0ÂæÆ&»g®9Šù{ÅÉÖke1&U5Êñȇ³í´èå¶vöúFá¼[G˜SÞÉq´_æS‹Î4z.*9‘s\3Ê8ÓåBÖõ4‘çÔ¾V€ÀÕ3+³v[òº˜pI„e¢jîË¡ô»¬ŠrÃâ t›/Ä\'‘¯‹»[²eUÙ'¥²»},u#ñiŸer袭-R l8P!ød/p4o0fª§õ•»Ç®£› oÑ‘F‡~Ñí€é7™‰,º¦l–•ãün ²³­-Ñ×vîÞ#õmo÷—.ôŠ¥ ›ÿÖ×9Lmz2Wß}â5T@ïJŸ:mÍvYýXøûPÞÒ¶e¹Ñûo@V©»Å4^¿;O*)ß_çµï2Í0‰ßÛö0áÕŒ¾Á1£1Qœz VÀkEnhÚlë6<˜;,¢g£tÆAB‹Ü hrhÿR¢ÔC‚ÉHÅE¾3KbÁ¢¡¶Lå_’®¡?²ENÀ½{†ø\¾f¿º¡§s’J=@¹²Æ¯ÍÁs¨…äËò‹ ¼Ø±ˆz9a-x™›ÕI3XéFVõçSÕý>NÍQg®ªé?ŠÄâ]JU ÏàVU_†g4¸–W„¸¸Zo+š4GÎö¤WØV±0o‹´ßäÈÞ*~t ågñaºž]©X»¨€Ç×-"¯ïÒ„›І_B]W`Tw‚d£ƒlE¸[Ë©3@Ç)¡—vå#XTaåKÄ…ÏŶ¸ÕrDÞbå[1*s§Ã3L¼ôø^úc G>ö£A}zóï= âuW‡n’ªVéCˆ°èÀ)?¹…«¤c‰GmŽìÚuPØvÏ]V.Ƙ'ñw¢ßìª>^.ÚÑÐáÞ÷æ±1OKè ˆ±Üyæ±ÐuÝÛWnÈKU»·òñ¢÷iãf; ²`Ló3’]ò¹Õ't(·`×8³¨úâÜ­áæ38ĶR)Õ¾Î}ý)-L}‹ÅæpÚ“—2c%GKc»‚5lPThËþ±ÌÉšŠõî‚ÐÚMíQ:Žƒ"ÕqŸ¹¯Îçå±×$î:åþáÌ•ë <Û׸@ÄÎÏ&wîæ×— te öœx^bëz-¹~çi¦ù’ε¾¸àÃ!Jõ¹Ù›ð¢é;m‹#yè,®oL&›—4 Á¿§Œ×DŸ×h 4,˜+EO:ËHKDñoÓ¶<¢_/+¶—½3/×P¨Å×òN_˜ETy{J5¯k÷ÿâ* endstream endobj 413 0 obj << /Length1 2172 /Length2 13007 /Length3 0 /Length 14309 /Filter /FlateDecode >> stream xÚ·Pœë-Š[€`Áepw·ww ΃ îî„à®Á%h°àÁ-¸» NpçΖ³³Ïy¯êÞšª™µ®î¯ûûk¨ÉUÔ™EÍíMRö`fv6€¸¢†?€“……šZäb ü[ŒB­trÙƒþe î4qÈ$L\ vŠö`€œ«-€ÀÎ#ÀÎ+ÀÆà`cãÿ¡½“@ÂÄ dPdÈÙƒÎ(ÔâöžN K+Hšÿ<èÌèìüü¼LºDí€N 30@ÑÄÅ hÉhfb P·7]<ÿ+•‹‹ƒ+«»»;‹‰3‹½“å[z&€;ÈÅ  t:¹Í P2±þU 5@à äü—\ÝÞÂÅÝÄ €lAf@°3ÄÃlt@’ÔeÊ@ð_Æ 0þî €…ýŸp{ÿþÓÙÄÌÌÞÎÁì [,@¶@€²”‹‹‡ Àlþ‡¡‰­³=ÄßÄÍdkb 1ø“¹ @JT`)ðïòœÍœ@.Î,Î Û?Jdý# ¤Ë’`sq{;; ØÅå~ ' ¤íž¬¬ ØÞìý7°Í-þ(ÂÜÕU rtÊJüm¡ü–Y]Ülll|œì #èafÅúGx OàŸÊ?Å |½ì"€¾ äÅÛÙÄ pqrúzÿ[ñß…`2s˜-A`”ßÑ!b Å_røN €>döØl|þy2€Œ—¹=ØÖó·ùŸç˪$ª¦-§ÌøWÅÿèÄÄì=ÞÌ<fNN7€‡ŸàûßATL@“`ûí) ¶°ðÿÅÒ¤ÿðuûûøéþ^ zÀÇR²‡Ì,@÷{Äß³q³™A¾ØÿŸýO—ÿ¿ùþ#ÊÿmÄÿ—”«­íŸjº?õÿµ‰ÈÖóoÈȺº@Æ_Ѳàÿ5Õþµ²Š@s«Ýÿje]L k ¶´ý§ g)Ð\äbfõç`ü%ÖücÅlA` Š½3è;ÀÌÎÆö?:È^™Ù@î gÈ<þ©BÖæ¿3J‚ÍìÍÿØ/n€‰““‰' dŒ8¸¹ÞìE4zü9ÁV°½ Ä©Î`aï„òÇòpXEÿý…x¬b¿/€Uü7â°JüFüVÉ/€Uê7b°JÿFœVÙß’Aá7‚ÄTúñA¢¨üF?õ߈ ÀªñAXkþF˜Zÿ ~k“ß’Áô7‚°6ûqAbB.(»ßÖœ«ù¿ ¤à¿ €Õâ_ÂÐò_ÎêwpE+O+ÈÕùÛ"ý Bx[ÿ BˆÛü B˜Ûþ B¨Ûý†ì¢ÿŠ ¹OXíç†ØB^7ÿRCˆ;üVC| W>Øháò[Êþ·ô¯…ýG !éYSûßmᇈ]í]€ÿåÏÉÿ·ô¿ýÙÙ!mqú„ôÀùÈ qrÚÌìmí—Ã鄳­‰³Õ¿Ü 9…\#¬.VNÀß%BöƒÕÅÝþ_®¿)C²þùRs6³wúwc Mvû„Ðqÿ 9 A=þ!Y=ÿ„ÿµ‚f®N®¹üyGBöó?øÏ÷è4CYœ³7 ±® i»ý"Jäμ3&‚ 3 Ö™Ç뙫ëi¬œñ2¹xFߣhÎ"o½ Ž˜»Y¯Õ çN*=|Ø+¬‘Io±Ÿ)rxóÞ¥ÅQëÂóŸØèY À]ùgbæ†×¬EäÌÒóŒ~çŦ“P¼u¥[Ûàgs(g˜«´Mj{îÆ3N¥¦‡Ñ 8•3þM¦$ÝÚ ¶7ð µ×{5ß•E»Ì…šU²-‚ÈAï?Y­{ Š1>6è4Ó¬äÐûÛצc¡H©íªQí¬Wg€3RóÜÖùnÉÐNN)&(eŽãyÏæ&ÅÒâÑM£½€7¾7eöA^jÿ[å½õe%JðÊ/´Úu,f+릴¸Î$¹ÚƒS³¾é|¢;¿ KR|86ÿ ýƒ±Òzš(NN˨_œ»îv7p1bQY²#ðèüb+¤Ð7öƒ>¸ ­âCÉJ 3LÊM°T깇M™ÀqbÎñéÖ̱°cXË‹:G 6õ¶ÆÜ©Îx’‰«r!y¶FĬ ¢ï ~ ñ&p=Sµ”B™ (r³­UÉ;múü%¤«å;p¯WXÚÓÖÅÃÀ­°3¡€æ¾Ӟߢq ¤ÚæPßÝ·6é‰h§:ãBµŽ–‚]~?Ú©‰ˆ%åZ†,༿G^™2àÉ{¸Ø›­F»£ÑŽø¡5tfÂÛ,Ð)‹õÌô(ÒËÂuÄóªi­ŸÙHþÉjÉïÀ÷:¾ ¢iºò­ ]ªWrÊG /rʧâP·U=×¶u(½] ­MÉ¡œ{÷ÊÛ'æKhb(‘V„-À> î×E`ûÁD–1í•ÚÆHGJÊKñ7A6q°ý$³“ñÄúpþ»~C'ï/¼kfCëèüú§8K(„–b¾ðÄøÀY‰ºÐÚ'ñ¹‹0á.â²5jMÓBú²gµœ¸ðg/øƒ¤c<Ì)}€[zzÒ÷Ïoƒ´vû8KíÒ_ªøñº‚β…µŠ#·lçb»Àóádœ–¹¥”¼ýßUñ»DTü¦˜\E¦k$NµÞ9«N|öD –«ªG«¢uˆM…>Giñ|7òk(>t…u~'‹ö•*NFZ7×eÚ˜-éõþûe<…,kê'‹Š¬1Xý#u„LÄ¥(§£Õ•o¥8lςŸl¿l÷ä*Nʾµˆï7P  Ûõ¯ÕŶ^–É& |£ìÓáÊbøcR sÏõ‚0ËÝÔøh’¿…ûmmáí’¹œ\(ê—Þ3¶ãË ¸â³!‡ë8ý1—‹Õ lRø!ןd†Ô ÅçÆ$´W(lþy¨p²ÞÈd¡<ÖÂy÷0#î‘ ÈCíEKZ‡ûxÃnÓž¾!Œ/a÷Ý- xßã|~}•ÓþÎV¦¾-þÝMîí˜4š$‘:7»†zè@SÄæ„Æ4hzE^$ñ``õÓVß—v’iÑñºiŸ$Ǧ¸,ü'n²_}íRÐ ÎçÑ·Øò†g?ý/×ÒGˆ¤CɇÅÒ#Ñ ±¡±…ÓúÕ$r}ò‰ij`VC†R…ðÏÌ_ÿl^„ã°–ØyqÛL©¼XaGé?4¹EP{”(9—$ à#Dbïzéœã@)”Û#s1ðk¶Á–Zq­k‡îÍ Ã¶’“q…öËï„+m9N,NŠÞžÊWÍýt¼‰ø…yÜ)kB:—¾œ‘¼ù è|ä- ì°Ç^sÕòˆ\“nlÙü;_¦·èÓN/ÉÏOÅSz\Tr¯ô¢×)¯wPPèv œYY¾~ç2øÓi¹Ã?—#àZ¡gCbá4ÃØºÑ-¢L»|Vý“ôM%BN@ í2`ý€et¸+"· ­î–}v‘³¬²Ë+ñ±¶”¾ùTŒbñc3ťɦãH¯–·á|7P'ŠJRºn•ȃo¤R‚$оy¼õŠÕªÚà5ËÒëfËŠæ&§Ïú «‘vßî±?Q­Ç›{m˜Tkã­º‰H.¸CâK²ÉÅ k³¬„¯n dz¤„ц:Û¼C䟖cM¿SU™¤ ~]_(ãÿ†¤ïƒ-ˆó¾ÅÏ^Û`;m8×WØAPEF™ñ¦VCÐ T»NÛž •zÑ;Ê=ÐÓªú¥UuË« '˜…zµt¬ØÚâ´'Y–èb*m_† Ô7ú’Ñ{® O·v‡.Ô±H˜ˆiÃ"„ð×L￳½¬ÝmSŸ)Y¿ûµ>/Цµ/âïS*ß©r‡Á%ÊqPì½9–œ}œ1u‚e˜ºŠ£·-ËÌ_0׫Rí‡M IL=ÓÝúáDVŽ®¬XÃ=ŠáôRNn›c9º9àÁäÂt³Œ{œŸ!%–l'mÌÐ!• ¸›F7È …~²¥¢AÃÚ˜wkgÑ}눕[cªù ‹¯î>ÄÁ»$ü öóÔ"ª”X¦MÈ-Jñ^ –Å¢wÐÿrÛ%çXß‹™Síáuäîb£Þ¨~jj|"ÍÔÖ•ÄóÏQÕuiq€À{ÚÈ&c“èÉà-ŽækoaûÜ·ð®p41lOÍë­I‚À°*6v­1¤>³ÒÛ¬˜:ãŒÜ°Dñ^9ö@,ÖœI…jíg´4]3›¡ÚÂÂHð$ÈW=¾f%|KÐ â>¥5}–ÁÔmºådü,Qñç ï2/ð3 [j'‚fÑ{T¦¯Oe¹˜|)s=¡$ÂÓ¯ ¨5FÞŽ<Ÿ-aù2u©#’û3øw±\¢"'¦¹¥¹ìLð†Ý\àé(7t“Õ¨ÁÝ–ë~ ÇB8ºJQÏRŸ)ãžýdËø}4¦ ª¦Éö5OõŽf•nËégÚÊÒ;£|j8ÄSá/†6€>|ÓxΩZ7W˜÷ÏÁ±±©6äaU{àìû+Ž‘Á"ªñ PxØn“¾3Ü^œv ç¬ýW¥Õu9õF¯?\øuìOH[œAáI•Å'r%1U~<.æ~¸¥Î[j6Ø–Ì–‰´-x|ìW#®?¿ÏQ`%£mð"±d5nýÂߌ·—„ÄU‡‡™LIûî„âÿì~íT›‡âwCZn D• VÍáÚPH$ôä&t>¯¤‚í“/:ø(MhS8òŠQE·²ršTY°´µ]L-‹˜¾ò³}žÖÁ—ž3õç]¡Þ 4A“>URö(W/¶ù^jµ!7h°¥`¼w•Û•MyÑÉĶßÂð°a(â‡N>‘µÖ2ÝëÆÙ&ºÂ*³Åd:—2ÝsæÖJ^†r¢s¶SDúÉñwAK vî^}‹:[äŸzÑ»…#²¦1–¸q³ÎîÑ4埋õFšžè%Be* Â\Ê€¨_Gxò›Ðüº¹o濾Ë"\¨Ê­€ØìêF\·‰Ø& %vb¡ÿšl[—<èaT‹Gú.BµR{’“#1ƒÎ¶të$rwÒ'PyÞ”Y*eoÒ€%…¸J-[EâM’ÐL͖ăò†|S¦DwU·<™0ëNú`~'úU—ü ÆÀUå—Bã¹!©`KU£ï²(?ÞÀƒUª[[ËèÒ,¤‰äiìz[\š¼º÷+ Ëì_Ís•xq2Gó"±Ûœš¿vNŽs/}聯“À[¶ïù>=Cí+ QþúÔÑÙ¸-ÔˆÈ iÀrfèÅÊnwC=\iõÙ(åÇ!¢nÚFï™ 8P¶Ÿ¼­õ䎖ØÉ¯“D/ÍzVvTõ¼mGá¦g+^׋r8éK­ÒŸH¢F3]œ½Šw?6ýº C3]vaØÂka`¤i„fæ“}§ðÏn­Öz>nß³… š-N}9ŒM~û:êëe¼=OD;ýº·ªXR…Ž>åšx¯,§uð3ð"!‚U)6§ES“±ðjÎ8üg¸&.xèíÈѸB°?ÙÝDòÖ¼1%§*ʇ_£¡fàäw±fHñ2¾C'2n˜aäíÖ ™OŠ`ÍÏñ+àHÈ—îDE6Êf^pÓ«Waê,’¹)EÖƒ³C‘Ŧª:ì<»?ô±Ïq¹<öý:ν™±MesOyAá”wDÑøq·2U9Òó¾zºÍë4&Á–¸,Ü€Ú´ÎáÉ2{…ŒW‰ˆ¾ÝåÇý ­“Jyßžý” ‹ÃÓö¢fÐH`ÜŒ#ËÝŒ'Ãí^£ôEèäZ5•>¥¾u­é汫_*‰mP™í.ÜR£~x=‚sEEÖ]̤‘§ˆÀ9.®¼ú¨•ÌN¾P‡áÝt-L6Š A÷öÈBK^¢: Ô;}cÿ^f›õÊ­ç«¡êç¼/ ãf42àú$äñÒïwƒ>V@üüU´Nß_虲·-Šã—HùÉÚ³g ¯™õ*×™Ì×Ê<-òJíÜf2 \ŸáHˆŒ—0íë ’"µe*°¾oè®úâѪ(·¨»ŠYàR1eŸÎ&O+\Ïl_4 ß»¿¶«c³#ÒB˜ÙAN± L¡¡ v!(à™W¤ÐÞ"¾tlÛ‘ˆ±`ûnçÌÿޤ÷S†QFì®XÆxK4TtÓn*£…en¥2Ñ$á4?êgÔ‰µxDsa9=ªGüSf³IK#kÔÊ^ïn;Ô¹ÛòÊüú’Š#±$•’Š¡ÑbhùÝO·š¦ëŠ×9Pâú€çŸÒvôb÷©@v^¬ËT1êé—¯?-‚È ð´+£)Ì;7yTeMÚo¦²ÃÐû$Y6…¾©gƒ²îºR±gÓé±g>½¡žèƒÓ5DŽM¬â&—·WPoMUš%M¸¶R±Ú–8[úªŸŽÏü-¤ª™Pý|÷cÈ^ë;äÀóâÙBu¾8²Hò²T¦ï㸯BÊÝÆ•ðˆkõaÛÆCbˆ&» ÝÜsdÝ”1æî-ˆûÚÔº¶¾ùáâ °Ö½­Ò+ÎHuy+QæzOû~Çëyk‰‚fE Þšºaì¢WLÊ@€ûSUœFÞÁÕöûŒ\c†Ï< hÊ)BrNJÇÒrìÛ:Û÷A#ÙòbúºU5üM†˜¢FxÕnË!j(× -¦‰Š2j£¸Ï$q c!…\n+ÍEÝ‹ŸÝzZõ®ÈáQvfGNÖuEn"?àxû¸­·Ä3"~SbÐÅMftÜ"°*Ðo‘FÖG’$Ùy®³ _D„Ë4`Ç ¥Wûyƒ\¼§ÀKïhÃÂ9jÍ ™¶Û3Ç0'œ"N\â×ë†n’®™Û¤VB+‹±" "¤l ^) {~€µèß•z§ø3À(?h•Á¤ 3%Š”¨y¦·‹{¶e{º=¹;мµâCy úÇ­±LtÐ}©;+Ÿ £…ö9ELª!RÕ¦¥}Èiµ‰öEžÛËãh¾Ør'«™È'osŠÑûF|·ñ[_qÄ3Dï‚—y6<+aSèCÁ0Ô-³h†:“ Q–y ·D¡#ZvÕ•ÐÅŠV7Û9*4§tÞ9D»çA–ù†sxƒOȽ…3 Ã>Ç5-tGæ6ƒ;„G¬yc+-Ñ23I°Žãr´îb'.UíD%©þŸ,•W•kr‹ÖÍf.›Q«ÞgÉ3\°¦b>ÔcT5!¥·YÆÕòë] ±¹m‹Å7^’jË §úo«Æ˜ðcwj 1W*M }Ö ‰ :)z ÇGæil±s}öc,A/“ªÂ_É:±0÷¯œ¦ávvúP$SÐN tÓM¡!&:ÝY=²¶ åÀÈÛé§÷þvÜIØwzUJvAâšþaõ÷ hñs±É‚¶fp‚†Â%e7m¬Pß%)7B©Ôf‰‰4:Ïð¨¬,Žò¢’£¯HwyRb_ÿª,>è1U•À/› ¡óÀ!*—>IOmQm"IŒ&\’é«¶îñ9 )Ið¤Y T+%—úÆòÅŽ¶»&ú˜ !më6éš=“祠’»ðßu`.¹¶SS¨ô´¸¢D8Àó‰mãË}ÁŽÒ¼ŠÙ)·Ë(äÌ:‹¦ÏÒì3Ùë,p.¿0΋-îOµq­oô,%‚3Ê ~ôl7>©µç­´#è>{µv{ÈÔðkyO¨ó'Ü sVy}Gl ãÑÛ¡«KüÔÏd‚Ý:6Ÿ×£KÎCAØ#rÅMŸÿ0F”ì˜lLåu{äöê5ü°R%"kZȱg‰ùT;yÔ}ÔöäKA³Ø–é™’}ǰÉòÉÕ7ÛÔ×Ë‚úos5[ÕDT‚^ó¬Vvh½ôqSó–r¦Rç &#»ö_zl˜J50.Î÷÷ïO ªÓ=Ä,æFðog©¤Òóò0o”cº•S†AVT]ÒÓJó’6Ñu‡ü×»wØøÈ\¢aBÃf™}sqÍ.Ÿ¯{Eu{i¹>Y^ª—š¿á'4ÎðsiP€÷-ŽŒcœ“š#è£sjhsŒ#xh•„žXxuÖ?…eå“öÄ€dWµÂZSðîì¬àñr1߆] lv¶¡?rÿ`9:‘,'Ù ýF]8~“JÑ‹²tnVëGý£¢dn97YR@…~Ü“µ{Ü_ç±pÎät¿6>x;Ý;Yd:Ö`ßÑNÝž×"ÃJ¨ý\ìÜÎÜÒ·\šÏ´'‡«é~ÓûÊìΓ0ô¨y×€÷ÚïÀitóâ.ok¼¤FºøùWágÝðK6ëÌwÙ«mŸçÏåvQ€Wà°ÞùúO,Mßý¹†bYŠG•É‚úŠo,‡‡Ä„SìŽëXsÄø9ÈG’BÊ0»PÑ¿M;^$ÖŽ…6a_ed¸Æ>®ÐŒ^ÂÓ&tj tYÜa¢ÎÏÚi<Žo±1¥¾ÔÞn¦¡Ç³NùÅYë^«QR,ú{æ3G«½âµ¿ÅÖ;R-•ŸÉCûX³v|MLôNÁ>y®B=P6ïŽVËKñcŽœ@&ž“-î%¾ÂT¡Õnd‘~@§:ßrdÚÀPØ!¹kËŽ9Æz£%!&¬Ý-,õiÃöî×¹ŠéSA¹u Óîâ…ƒ:=Noù®‚¹­yàš‡Eê©&®Ì¥Î{E˜‡xÚ+÷Óê˜*Gžèè¯ÖñÝÝ2ìo¤÷²O‡ùqòÉmáqÞ2cÒ÷)R¾þuøk ÂÉÃÃ_‚Ôëîq ÃBMè>â+÷ø1˜Hk²¿»òHaÀsÆ]°tvÞvªæ),Æ z–½~jñ$¯ÒÔrå/šŽ¡ø6ôB³¾g”ÕÞ4dCÊõüÍñ½vŒŸöÍ-ÿv¥žlO^¦ÂÚ|ô*‘áNb—yg GªÒ._ ÄHð¥L.¡Jj)©ê«ËÛ”'„h!6ÃkUg”ªo6ÒNÏžë"aÙ÷œr&GxÝóÞæ-¼ö"+-]Aï À!gíO :ÌK®ýJ Um7Z z»q‘.ïÓi¯©ª´‚Wá=ÉOD¢5¢eq^i>PçĬu’æ—fUdÕÇ–;ŒÓüáÓóh;LFî¹±ˆŽç³ÚyåRXÒiß>ÓšÌØLåÄ0šfâ'n÷jÒWþ­ŒƒûeP8Î×´ÚÎoiuè„ÓŹgH¨Ö6Û&hžŠÜ§» R}}Rµìˆöp3“À‘Ç”]-ì.7øÞQgÍŸd *:†ûžL<‘B$€ÒdŽ51|ÚŠ°êq Ók-öýƒQ07jʶ­þûü+UCVh8’ÔK³³%kL21ìÉ Áކ…É«;Ö®Üaý©õ8§VŒèe¼¨'Á¨|NŸÎœÏ¢Ÿ@ð_¨ˆo<݇”»›Ú~v¾.lÚF3*f%,ºóÊ«‘£¹ƒ©0É^¶ì°E´ ++ög§Ì”Ù2d4§´;È—º1ö¯|8=<´Å‚Vô\*Ï0¬¾±üdôk]ⵋ•:—§‹ÿǘ–Àè€ 3 ³]µáÙÒq¸é+¼ýzW,¹xdš… ØF«·ôRú—Ô%¼P#ŠJÈ»õ^˜@ì~Zù‡ª¤¶Š86ÍYNìåI Íë pNÏdï“T®N»xþì\rÇHw™kï¤ Ž¿„ÔÄhÆáµfW8~ç½4êö@)]u¨t±ÉÂÊÜ‚8êÚÛ1Ì®YÉf¸U )=HDüª‚S‡úLÌNX2Q#꓎üñ™Ë_ PÊSy?­©ò,$>-Ð1Ú±èÙ½×ë6Œ‚P“ñ—¡Ý’£/d3XV~]¥±à¼|ƒ¿õ³ñ,ò¼Œ‚C1x“dô¾!6Î\ðòðu/ñ+"ú u|Tª b¥ÂFºews­­TJFí`'Œ¢0ÚêNG\Wùªc­hçž›ø +:2WŠxzýK1°å Q~ž3GòÆÆvŒó‘'(ÏØ R,•Å£?CAÆ#”7`ªRLÌŸñ£Ö½I.›Dâ/,ïäÞšoi¤RçD]Lùá«ï¢‰Žx¢ü„-÷í—¹à;ÛQJåXÞ•ýCôu_gü¦ír)4•28Q —¦ÊÔ aõ°é8NÜ.ÖÖ-n®—n2:#ŠÂ»§[ÒwA?Á®¤å?–]êÍHû¬ª"žòð¾É_KH’ß]8Üÿ¡ððF×uÝWk³ü„´‚}N¯XŠƒùƒÞ÷’ù®\W1QhGÞ<ªfy­jê®.D÷UXî-p§Ö¾ù%¥üË€AÜ`¯ÚšÈØÍ& ]‡ÙGà†ëj0MñvWúcF+ÍÉÖg·÷úYÂpITÜ:ÛME¦/µÞÔÚô0Eu†Í§ÎºgÖ ¨/ûD&ÉãÈ‚ýÝ8øw<3懕 -/ãì<µ–ðõ–þž{õ5C7‹dÀŽ0Š· ?ÞZñAà—ëÞCG1m|qQÍ"F­Ümµ×qJO†F$ ‚.ÁH ¢ì’Ô"]aFÆä y«<®ìc,¬ªó¹¦J'xÝ躗 ø‚_6òƒô³Å®Ö è »ë=C­r/Tr•{´’ežè^ŒÊ]úו`¬ã7k–äÛg[6ÞjZ~IõýÀ˜ÏªSј­–ìú,ü‰¯Z½óM†øQX°:nÁþ4¢ûj´Ð¨*ü€,[/í1šáŽSbŸÚ£då$4¹ñP!µºŠW4ÂKx6ûõþÏ1SΦ)ʵI¾µzáç0þ„jH©Á°‚95Õh¢%×]Ÿ¿ò§× iQè`eއ„ñÞÐsº˜ÔH:)Ó‹Ç?ÜÜKûŠîß/Þ§oì `{FEÍe¼R&‘§VÖM·&Enz£È^&Icz½ÄËŸ,ú‹PXpÂ÷ú +{"•ŒTÛU@%[^5Ž\!ó• í0F‡eŸ—>iK5ÑØ ò¥´ ÍY[Ý=]BJT»YênX•£´”q 2d*ÞMä,7„ádAä ¾nO˜ïWhMíøú?†ÀQØ#Û´ k¢#×Mޱ“Kv)ùù4‡™e¥,3N †ÃWM·ˆHl®:‹¡øæè³¯¶®Ï£ nBEC x"@´?«Ôë2Æ ÝåJ¡uHOVmcX¦˜fbi$d´óÆmÕboµsoåÑu3‡û2VÜa ßr[}ó•xJ¡fÚ*ލ!lðÓYs“°Õ¼ÆúyŽÀ¿}Ó%-\dêCøNpæËKwå'š.­â+&é†Ño-’žÚx±û3ˆ®ñz¡áÔ*¤|êx½ƒ…žfú",zÉ%M™>bÔvµuÙ(z¹ÉCxxs¾Ì:ð˜o² ?««¸yýÿ¸ÿ˜¥(x8iwVÿ²ŒxÐÐúð>åãñ÷Qé1 ×Ð<ÊÒ ˜½¥¸hÌǨ]Rs/ë-.4ý1¤ëòwÆbµøº˜ø—W} q¤û:<É[?2›nÂB‹­æFÚ’)òpà–¿`Ó[}áÑÀ/°\% Òî·€Á Õ¹iÞ'XU¬çZݯ$žJ¢eàŽiGˆÞXÝct“zZ$–4ޒȳEžÒe«V¨F¡—ƒÞ e´1Î;ÿ¡1n@Ó~ÆŸ¬­Jp=Ü8‘¤ŽyCa}Î\è»”ØÃA]BræÂu!vïùæì VlІ…¹tPiDxƉJ¨“e†~Ÿ“M󦾅ó™åºàz‰¼¬judJ+S]’¾ÇyÂ9“ƒ™;_É™”âõê¢Ì—^œyÌÊÅ`«xæ_@Ç0¿.Ü ]Ã.×Ý'‡‰–⬳{ô13^lÅ™ÍP n0°b¸ÒCv¦U¨8›þY¦+Z“á´vxFø^ÓÇhÔÜÅmM"ÒNˆ®2ÆÚ7K4¼Ž©¡×?ÌÝ/ ©»ëyÈXØ c‘Ëíg1*é±I!Eʼö¾×Ìý¨„̶^`ÕvÓYñ4Ÿæü9Pý×R§u®™U‹”hd „3Ç@vÌÆ4Ùë¸!? Gy[B¢\,šº»_ϱµUƒ+g‚ïJwy6Žø-~ÚîÕ®N¤S­›È/t°}û H†Š4kïµhHÚŸ;ñøæ^k×Þ/è³y—¸•}k³—NŸm÷Þ1aÐÊÌçEi¨?P ÿÁ<$,k#Ja[õuÙÕÜ¡ŠE’ÿ•>x´Z×Ù_]é®5ågø¨ò%•£$v_°¬˜:ç´Ý¹^xf½%SkLÛýV ã–÷nèeûm\ôJQAi3+WFG¨wàrþ!s²óުʓó_º: ]³|ç.l:¡æ¾Ñ…/”±«½ñl¾lºØXï ” {âÂßÖàð¾§üH%ͺ/6@Ò ²›Åe´Èµ®)õο½,ž+3¿§3»ùãI£³œ0‘Ï][FÇJ/t³m™¾¼‘Ë´¤þ¾;Š}̦Ûàt•ÜòÝ/-td"%Ëâ÷ŠÂ‡<2Q¦YT÷òíßüu§u»"nƈP‘ ‘’>˜µ¯  aÝ)”Ñš@÷éÇc8o ›ÒM>^9qžáªâ(yc\%³gž¨;ÅEÈ*òeŸ•³yx{Ü9%¬n/seZ±ùs8$|)—ú¹B©éþ5¶gäÌòe~ý¶45÷¡£DÜuÌ vŠù#vhûâ`´Ž¹Ê[Šp6Ò£gÖ0)®³Tž.3¬M5æ‰mÇ\Œdž¸ɉiëÅ3Þt8`÷˳æÓT§Æ§®ié:j±×âq T”†¹LýaÞW4—&äÜT˶ÁYûÞ30ÑŒb|¡³£‘zmØŸ›%âFaQ)ei¼Îcfê€ÙpD 5[~ÿ²c–ò‚Ó¹0Í‚Pç±€*ýkwÝê¬ÈxÂmE”¯I0u¡w¼êêb:‰­8³›0Ñ–ªMWB3yøÙøÂòûí:“¯r/¾eÐGZG厵ŸÜ:š¬ÉÖâQ_µÁ5¦]P×ÔoäÄæZÞ%TÆC‡º?aû¨nç÷ɘٳ2e¿ÐÜ} ù!ïeâùr¯‚æªieAŽl»e@í,¾Ø¹JÔÁ Ñ›|û­Î]ú4ܧ"àô²ÛžF£1' §…þýeXÉ.ç¹ê²¶À•âÍJõLè@ð]Éý€1h/W@iVEcáJp~ë­ ‚ÿ ‘ÀÒ®b—LXþ{ìµ*èÜK=Û7LÊ-3Þt]´/ŸXaŠ²Ê»; Ö^).s#âyåì¦5M-~’î«Dª?^ºíW÷òëYÀ§’újõ_><”rdŠ'ÝzS X¿+PÓƒâîÛC}ÛÃØ5½âmoZÿåµ*¾VŠÃ|ÿ´Ú{jÿUŸdU£FZ77>2 >RŽ˜qÒÔSÑÏõÊoöV·#¼lÑðRlálZò1Â#GLD]?¿³|¢¥æO£W¤Ì]§ŠgR@kØûcN ~KCa3ŸÍô <„ÿ9Æí|°†u‰†H~JE…£Ò(ˆŠ•;Oqìø±zZý¸ŽM¦þ"¹Ãž µ¼rÅígxIþIK©{©¼“Wn¯ô=œ1ÿ¤º›W¼àS©Ñcb–9®nF«tåîW¤5vÞÉc1êNçšÛäM-P9qm÷^ÈoÄ,çcË%ÇÂNk§aô mÖù˜ÖxQð(ˆG~Å.»¡‹ÿ2'°|;O¨r‰!Íû†²H±;Pop¦¹ï´‘ûÚ¡—q_—ªCÂê¿WÌE折°ÊIäüœÒ*TsèWd¿ªéð-ÂßnP‚Æ(Á­AË»…[­4ŒÓç:—?l—õ'QÁ,¡a¸Ú8;dž€„t¬®È#…›Ïµ_ÈbGÇàP*ù0ìHÍ-AŽ:»{«Ññâíq§¢Óm¼A@ MKÕ>¸#ã¡h²òTÁAFc¨~Ÿï£å™#_ZŠxÄhij˜„žÑ°í#|¸ö`ïÏõ¸° :¥##6›Ø"ã?Wu7uÌ3œ&{WtˆÝúÅ¢ï”ÉaȽîÛ×LípÃeª0߈þJ5sìAAÃÀe~ÀáҪǂò‰¯ßÝSËÌ´~1x qè«]xrŽºZ¯Ñ£.s†™\œ…ž ˜Õ¶jíØ›k犜è¾zÜûêñXwL*"³'ÞÈ)tjÂGV*ëÊGÜ;èïŠ Šô¸è÷=ìxû8ÊÇsËyÆÙ¯­Z؃¹ó2“`Y—鞆sÈøõ×’ѨA½D˱塽ÙVVaäœV»LWJbÎÇ© t8©œê¤/ZqöŸW—ØcÎLUprD±aZT Jœäío™ãÉößS\íÞi 芈þ$i â`¼gØaûJ("ÇÿTëüu.˜¾7ß5: ¤úR©”2N 0@“£ŸV¡kÛ”g e9—¸Gçor!HsÝn²©2ƒKÝêäoˆM íEÕ@ÔÎr·m¤º+îE&oë=‘±F¥O¡—ßÅbqkÓMNs×1U?þ`A¥TÅÂwVlxC×ÔÆÌõz7“SÖ´…Âvå…%Ý÷zK± }:mxÈÕÎ)9y¡Ø$UùýËá>Ôå%"ýo´¹]Ñ¥…Ë ÔM /kÔ_L†Le)Z L0HuñÞÆUnë)íCçôSεWs“wŠ:[¾Ú‰'þâ³ZÀ[Ùªr²M}ÕáÌЃ_ýDŠ˜‰ôzTZ˜ö[5´öp†+?×ëVUèù\>_³¸öä+ Ž^¼Y”gµO4!7<¼Òk£47X¸AtU#Ÿðç)¾¬;ךíʇØ\fqDå,\#]ÔêLÃf‹}ׇ.¿íŸ+q‡F½„nËbú·5ÿØ•Lê®Êü1°ëÑqkjó:¼KEöúé|Ò©P@íŽäÕo=_H&Ð4{œd•¦¡ùÝÁQø€¥%_îrTÚX‰Òîý¥?GUÕAŠ ëVŸ¬×Œ2HèeØcÞ:z{Eí†8ŽoPQÐL #Üp”þÒA¨!]ØŸòÎòð B™Îàs>~JV§š‰_ µ›n¼›Ð@Œ¢Q¹¹ìtàaÃkÛãC´SøÕ©Ñ êYEMÙ°Lèt©ß1ó'SITªúµ&ÈuNÃÜjsÄ8;‰=õ¤„}Y4ó[¡ublþƒ:1ÇÃ[ïKv†–qšZzÊÇ&aúUknœîó’‘Äk£rÌzãËF5'àA]=ò‘ê€õ/x¯èâÍÇà4éŽ%—v©÷©É©/ñeŸðA¯TÇÖBJµ…½ýN˜ôB¥™Þ2úÌÒ’éÝ™g{'¹Ç«mlÕPzeÔ‘ Ä-ŽÕIbÒf‰ßJi`¾SvßÅ×À3˜V·Fú!X%”çË¿m3êôY³~¸iñ[¤T‡mõÛ*h¸m ƒÅ›…¶ò WÝ8’êr¤ªWŒ¢ÚÛJ´ßKâ§Ê˜zJ‰ú˜\8,. æÙ^hÚŒ¡uŠ[§ŠvÒ`þ倳5é‰4úR6àdœ6yUrÆbU!pÏÅßc¬ÊÖßB{5ÿ*¹¸Im[ q7Ë‹?XÁp.Ьaû]ÓÍ;#¢ï>a©7ªßYe±Â} ĈéÄ<„:Nç“$­ diný©)ñ~™V%tŸ*5áJ#øÉäÚG*šÇÕs3|¿úͧêh¢R&á羪Ñùz‹³åtx 2ª¦‰€šÈ¿@«ú&¿u"\lÚüÏü#CI i‰@Û¨»*G› A–-ÀuÌDm=Êkû¤Ĩ¬)Õ: ýä4ÿº¯¾†™»Ô½Åš!]º§™¤k¿„¥1ûD‚&‹-ÀohSks`¯Í¡Ò”]ê hG>~Ê3ùõ´m>{ÎZ]N/¦ŠÈÛütÔZvq"¿®oŸPOm«;Š~Å"+‘ÒØ|õ8øz0ÕØ ¸ÚqxUwˆŒBŠðÅÞ/1D×bÓœÇó3ÚGݽOØBK°yâ8,¥Ûgcy  U½3IšÔ2¡§9Œ¡˜Ûô¡˜˜¸8Tî×±ìÑ7ÑJ¹)–'ž©ÞdyA«'°VH± ©(¨“”DXéýg¼«èïv?ßksJ;³áœYl<¨5 …ÄCÉ ˆÄ¡¡[ÇèM퇄/2-Ùv[¾Y¥B7صŽt`ûNš6]U Ð¯*T”šW±µ“,e&ó£ÒûÁÍ¥üæ&Q—¡Ò`­Ü©'mŽ•ù%¬#™ë#å)ÐÿU®¡ß'±{™™ŠL5Iï² Ç{t|–Á>¥+ÜTú¢+7ø‹½æ]ÙGÊkIÿ¤œ·þt$&zx®Ã'¥óBЇ07?ÛOû4iåg‰E(Íä•ùÚOln$%—:8Ò}n;ÿ«¡© endstream endobj 439 0 obj << /Producer (pdfTeX-1.40.20) /Creator (TeX) /CreationDate (D:20200201232113+01'00') /ModDate (D:20200201232113+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) kpathsea version 6.3.1) >> endobj 385 0 obj << /Type /ObjStm /N 81 /First 724 /Length 3694 /Filter /FlateDecode >> stream xÚ½[kSܸýίðGR·‚­·UµµU„Ç’„Èn²¹©)3cÀ›a<ñx쯿ݒì‘_C¨[lÉju÷9ÝjɆ°˜QÀbH"à„2hè( "âР‰>á$6d@©ÂFPóy"CƒŒ µÅq¦äžH#8?„i¸Dg’B~4rÂAØQ*‚‘ „T0Àã\Íù£*‘Š Îjp€‚׌Ëàä1¸¬à‰¤< D <Є„«@E`Ì+³€(иn(Ž’BJH j%%¢ÔRØ€acCƒ dÅ‘iÈ ¦ÄÓ }1Ud‹ v ø3Ð Ô±a¡2êס =@8FIÂ1¥AV0P #&¶4 4^cwÉAu )àU:ÐŒã0Y7<ÀT œ„çä’O`@£8ÖqLà iÍ€q´OÀ N ´(Rô ðr€A"~që0F“<A¢pˆ !Tã3…#¶Å)"Tc Ñ`s6(Åü¢ 4ƒûÀxÌØ Zc l0P -°Á0=! Å0Ø`œ L¶¾Š˜íN!v¤»Æ ŸØ+Uj'†„5£±ý£ šœón{”î§föuD¡ä°íSïŠ"Ö̪åKÁ ƒyöjÔûcž{}Ž ýÐŽV+W躽Ú'ME1údaID!㨩˜ï(#Ç$Ù!°0W8%Ä2λgf®ÓÎ$Î0„;ýÂÒ T›‡IPõ h»åQ`”¹hxm/zæi#¦t¥Ã…B4¥­Ô%€u õÙ€x£€mÛë*'`aDß¶¾"†¦vª+#¯œj!±=t¹Æ6:¥8Л™±ªÆ!Åb¼ÐeŸWº): ËÕZ´Ò¶½’â¦Ï= OCÝZïác®N£ç™AÀÒn®Ø·X•Ö‹fC²(U‘ªcÈ<”Öd(Dˆ !æ˜;X¸¥BšŒ@ ±€´”±!ÛP`aáb J¡ª9m8„ e›ö*ãU¬ÐŽÏ†Hp‰ëƒÚ8™;Á„òã‹OQ×xµOlT̼ZÖŽs~p˜»(­Æ,C¶m®ß¶~ûm+<¿Ÿ§Ax˜ÏÊýt1.²y™[¦’ÜÀÈñÞÑÛ³÷ÿÙ{÷ŠDð|š\-n^½Ê/…—Ô,GÜüäp¸»§³öHÜKæGivu ÝXn…hÇ^|]&Ól¼;»š¦¨?+Ó›?AQ¼~v“`}€Žë¤8KË`;Ü _…{á~xþ…¯Ããð]x¾?†gáyø)ü&á8çÓ|NÂ4¼ ³pÞ„³°a.Ã_Xï3°É`»‹‚[¿ÿþ(2ööwÿF2>Úφ`Èl=¸u?z –‹CÇÆÇÇiÍG^4ø0jÂËð2ƒ·ix™/ éhú'üî¨ÊÃ|–†ópžélš^–¶U˜¹ó´Èò‰£³¼.Ò4,æ@ìmø3¼ ï›ôêMèÝûôæèdè}÷z(ÙXl<~€^¶ŽÞ—„W+êñˈϯÅÚ@ç¤ ýqº{rþÙ"H8¦8DT>")6BÄ6Atúáõñù‘A¤ûÁYÌ‚ýL!â›:ýæí&ÝÇ¡œãQ(Ò¿¨^ÒRÂYÕ·Õš~[W¹ÓðC½²ÿ ÿ ?C½ûÖx²(†ÅwXìE2þž–fÕº¶]·Uç77 Ô‚I>&E]Ò›I²¸ÓËd¦wãirƒe«ÓU±¸¾Ÿ_§³F͘eP2S8~„?–é¢ÌÀ•˼L'S#Yu¬°é­žÛ‡XséMf,Ò[ða‘Ý…‹)ºÞ[ÂÃÓ"oæÇF5ÿho÷ËÉÌ|gu¾3ù,é±&ÛmÁ·©Q•ú3¯ÌÛЮ-ó}áZ•ô©m:ï{ˆÜ¨ºÿ±wüçÁyvüàQßi¥tèšËá¥f!N`15‘O¥%qZo’Í-òG}®¸µéæÄ£6‹³wûoÞ0ŸQD±Ák¬„÷l©¥Ç! †°[3D)bH>ÄeI±t´‰ðIXÎ&i±çEÚÏÇF[Íáá—·Ÿ±2Ÿ &ŒÛ<µÆÊ¬‡ó»YzÃ'ϾšÖ·Ñ¶³ûáüpï‚û2j(,Zâj ø2,Vè`iõ™ö_y– Üd£ ²ûñ¯7ï îÄt‹‚S€ÿ2ìµG QØmð´^Ig8÷=êÈ÷ˆÃÜ£’®IýÀfØ—¥éâCý*Y¤8ÒùšÑ”ù=j ³bQ"S€ýà8q‚4ÿ•MÊë…ùÚedÏóO3À0I²¹;íï -tÔö¥<ÈÊŸX>ƒ?íð¶?t-?ة݉6·Þ~Yn[ç·þì­Û¶qùhãŠnn¼õÚ6ÞÉK\þ^p:†áàa‘¡ý|¼D‰¤ÒyœÓÙ52—/¯ge‘O–cK¢èäîC(› :$½žÝæßݬd1#{ùÄðëÞ:ãû鸒ˆû% /ÒÆ€ãì¢p™t’—)¸äÞY¶Á£Éý·Ï²›ùÔð2v¨“C÷Ìî€ýTfÓ¬ÌÐ÷ž´*FIQ$÷´„ àrfÞÈEVŽ&ˆ†VémÃ*ݦ`£B•ðaŒfðÊ›Eä˜ßÒiŠ1Ç}…´ÑyöÎé@2B J:ZFÆ_÷òÜ'`ј¦ ×ü¸Ñz)â8_3NQ@4ŠQ•7Ô¾ ø¨‡@t&Á/ìl«_´-Wc¸{‹h`p… 9$³(“¢<˜MP¨Aßr^GœxÏ¡:tyàû †¦÷ÞÍañ’Ù=]›òdtq9@}_¬P>.ÓCeÉ’~¶ÃÔI…Cñö@ÞÑe‘ߌòl‚)ì‹]æÕŠ©¶ÎzhšÎ®Êk—ŸöR‡†(½JúÉð„ÜÊ•-?ò‹Òq9Ê&•£q[ÀpäYk°L®ª!?Ô “Ô'~¶¼oGùe•b¸÷Øwªü¶óƒú±·‘Q™ŠúÙ;7›š*®©¸;æj£òɘ§¸õ`5&@b•R¡û#Ýòµv?L¨‰6OG·Ét‰ÙJýP˜a>ÚÏ«„ôŽŒðË,ûIþÔXý¤þYdåʇ¨gÇÙîÜ¥ýVÆíד€» ·_5ÌÒ±wâî´÷íãq§EgË~?0ÿ±ÇÞ…»Kww¾Ðxã#ÚC5¬òÀ¡s'î>Ÿrö„ ±ŽU÷VÅÝNλûaoXÏ~º1î¾ 6¾PîÁyqš_mÙÏŸ«/ªÕ—Kï}Ô$2_}‹¼JßáçùðÓ"­¿s‚îÿÊ. endstream endobj 440 0 obj << /Type /XRef /Index [0 441] /Size 441 /W [1 3 1] /Root 438 0 R /Info 439 0 R /ID [ ] /Length 1065 /Filter /FlateDecode >> stream xÚ%•IlVUÇïy¯ó÷µÚÒ[:ÑèL t`¦-SK µ”R@ŠÆlŒ&æ&&ºQ×.Œ sb4ÆMŒº4nd…W˜Ø…;IL¾ßßÍ/çýßyï{îÿžBÿZõÁBöi åK! ¡` %­ò³’fi'hmÆ“ÖAJÈ-T/m— TjP  jA¨;ÀN° 4€FÐvƒfA ЇÚ@¹…â?*¼• €Þr\+ภî–àéÀ~»ôXÌ@x޼vpž÷Mi½`mŠh/èKhG‰ºA¸‚v„¨ìëh‡‰öƒà:Ú$Qèh‡ˆÀ ¸…6A4¨¾@áiœhÏ£"×öèRɼÅ+Ñô„>D^…¦W©Hª÷𾦲rESjÎ šjV¥³àšjÑŽƒt7GÓ*O‚ShehZþip­M: æÐÖÐÔºyp,Xh²ÀepÑBìÐz[¹¼ –-´¿¤mí¸V-ô¼©d¶Ö×V~lZè…Ç\§bËÂÈDéTü²! ó{faº Ë`o/yr扴jÞÜšA¸Ý9ŽÑ½ÖÂÜËJæ@8•Âp¬ì¸Ý-,¾«¾…c ”ƒ’s~}=˜Íþá"G-VXØ~U—œÆÈQ‹Õž½ ­Ô¢Yöž´ZÀ@ŽõfÅÿ_µƒ2zˆvƒF°Ë¬ùCÝe&F¬›ÌºJÃŽ‘‰[Ì’¶‡·´  ì] èC½`Ø€Ðf6¶¤E-Iµ a0&Hã`“à0À*ñ(˜Ó`Ì‚cà8ÐT9 4KNM³@sc,€s€±/€‹à`¬Gæx¼ –Á `ŽÇ«`\ƒf“ê=2Â#ó/ÞØ"ÞÌ쨿 “0Þ²Å]š,ß~ª^™Ùü—Š2³û›Šr³o»•™=^UTnöÇÛŠ*,«y ¨Ò²{ß)ª²ì‹EÕ–=}¦¨Æò¦NEËGÿTT´|q^Q­å=VTgùWo(ªìobOt<ÑñDÇOt<ÑñDÇOt<ÑñDÇOt<éGJÇOt<éGª?'OË–ÿþ¤Ô’¿~ÿíù8 endstream endobj startxref 260804 %%EOF libtasn1-4.16.0/doc/libtasn1.html0000644000000000000000000035541013615374730013377 00000000000000 GNU Libtasn1 4.16.0

GNU Libtasn1 4.16.0

Table of Contents

Libtasn1

This manual is for GNU Libtasn1 (version 4.16.0, 3 January 2020), which is a library for Abstract Syntax Notation One (ASN.1) and Distinguished Encoding Rules (DER) manipulation.

Copyright © 2001-2020 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.


Next: , Previous: , Up: Top   [Contents][Index]

1 Introduction

This document describes the Libtasn1 library that provides Abstract Syntax Notation One (ASN.1, as specified by the X.680 ITU-T recommendation) parsing and structures management, and Distinguished Encoding Rules (DER, as per X.690) encoding and decoding functions.

The main features of this library are:

  • On-line ASN.1 structure management that doesn’t require any C code file generation.
  • Off-line ASN.1 structure management with C code file generation containing an array.
  • Distinguished Encoding Rules (DER) encoding support.
  • No limits for INTEGER and ENUMERATED values.
  • It’s Free Software. Anybody can use, modify, and redistribute the library under the terms of the GNU Lesser General Public License version 2.1 or later. The command line tools, self-tests and build infrastructure are licensed under the GNU General Public License version 3.0 or later.
  • Thread-safety. No global variables are used and multiple library handles and session handles may be used in parallel.
  • Portability. The code should work on all Unix like operating systems, and Windows. The library itself should be portable to any C89 system, not even POSIX is required.

Next: , Previous: , Up: Top   [Contents][Index]

2 ASN.1 structure handling


2.1 ASN.1 syntax

The parser is case sensitive. The comments begin with -- and end either with another --, or at the end of the respective line, whichever comes first. The C-style /*, */ comments are not supported.

For an example of the syntax, check the pkix.asn file distributed with the library.

ASN.1 definitions must follow the syntax below:

      definitions_name {<object definition>}

      DEFINITIONS <EXPLICIT or IMPLICIT> TAGS ::=

      BEGIN

      <type and constants definitions>

      END

The ::= token must be separate from other elements, so the following declaration is invalid:

   -- INCORRECT
   Version ::=INTEGER

The correct form is:

   Version ::= INTEGER

Here is the list of types that the parser can manage:

  • INTEGER;
  • ENUMERATED;
  • BOOLEAN;
  • OBJECT IDENTIFIER;
  • NULL;
  • BIT STRING;
  • OCTET STRING;
  • UTCTime;
  • GeneralizedTime;
  • GeneralString;
  • NumericString;
  • IA5String;
  • TeletexString;
  • PrintableString;
  • UniversalString;
  • BMPString;
  • UTF8String;
  • VisibleString;
  • SEQUENCE;
  • SEQUENCE OF;
  • SET;
  • SET OF;
  • CHOICE;
  • ANY;
  • ANY DEFINED BY.

This version doesn’t handle the REAL type. It doesn’t support the AUTOMATIC TAGS option, and the EXPORT and IMPORT sections, either.

The SIZE constraints are allowed, but no check is done on them.


2.2 Naming

Consider this definition:

      Example { 1 2 3 4 }

      DEFINITIONS EXPLICIT TAGS ::=

      BEGIN

      Group ::= SEQUENCE {
         id   OBJECT IDENTIFIER,
         value  Value
      }

      Value ::= SEQUENCE {
         value1  INTEGER,
         value2  BOOLEAN
      }

      END

The notation to access the ‘Group’ type of the ‘Example’ definition above is ‘Example.Group’ (as a NUL-terminated string.) Such strings are used in the functions described below.

Others examples:

  • field ‘id’ of the ‘Group’ type: ‘Example.Group.id’;
  • field ‘value1’ of the ‘value’ field of the ‘Group’ type: ‘Example.Group.value.value1’.

Elements of structured types unnamed by the respective definition receive the names ?1, ?2, and so on.

The ?LAST name indicates the last element of a SET OF or SEQUENCE OF.


2.3 Simple parsing

For simple types like OCTET STRING the simple parsing functions listed below may be used instead.


2.4 Library Notes

The header file of this library is libtasn1.h.

The main type used in it is asn1_node, and it’s used to store the ASN.1 definitions and structures (instances).

The NULL constant can be used for the variable initialization. For example:

 asn1_node definitions = NULL;

Some functions require an errorDescription argument of type char *, pointing to a pre-allocated buffer of at least ASN1_MAX_ERROR_DESCRIPTION_SIZE bytes size (e.g., as in ‘char description[ASN1_MAX_ERROR_DESCRIPTION_SIZE];’).

ASN1_MAX_NAME_SIZE is the maximum number of characters allowed for an ASN.1 identifier.


2.5 Future developments

  • Add functions for a C code file generation containing equivalent data structures (not a single array like now).
  • The REAL type.

3 Utilities


3.1 Invoking asn1Parser

asn1Parser reads a single file with ASN.1 definitions and generates a file with an array to use with libtasn1 functions.

Usage:  asn1Parser [options] file

Options:
 -h : shows the help message.
 -v : shows version information and exit.
 -c : checks the syntax only.
 -o file : output file.
 -n name : array name.

3.2 Invoking asn1Coding

asn1Coding generates a DER encoding from a file with ASN.1 definitions and another one with assignments.

The file with assignments must have this syntax:

InstanceName  Asn1Definition

nameString  value

nameString  value
...

To specify the field of a CHOICE to be used, specify its name as a value to the CHOICE element itself. Use '' to denote the root element itself. (as in the example below.)

The output file is a binary file with the DER encoding.

Usage:  asn1Coding [options] file1 file2
 file1 : file with ASN1 definitions.
 file2 : file with assignments.
Options:
 -h : shows the help message.
 -v : shows version information and exit.
 -c : checks the syntax only.
 -o file : output file.

For example, consider an ASN.1 definitions file as follows:

MYPKIX1 { }

DEFINITIONS IMPLICIT TAGS ::=

BEGIN

OtherStruct := SEQUENCE {
     x       INTEGER,
     y       CHOICE {
         y1 INTEGER,
         y2 OCTET STRING },
}

Dss-Sig-Value ::= SEQUENCE {
     r       INTEGER,
     s       INTEGER,
     other   OtherStruct
     z       INTEGER OPTIONAL,
}

END

And a assignments file as follows:

dp MYPKIX1.Dss-Sig-Value

r 42
s 47
other.x 66
other.y y1
other.y.y1 15
z (NULL)

Running the command below will generate a assign.out file, containing the DER encoding of PKIX1.Dss-Sig-Value.

$ asn1Coding pkix.asn assign.asn1

If the root element is of the CHOICE type, the assignment file may be like (using the types defined in pkix.asn):

elt PKIX1Implicit88.GeneralName

''      dNSName
dNSName example.org

3.3 Invoking asn1Decoding

asn1Decoding generates an ASN.1 structure from a file with ASN.1 definitions and a binary file with a DER encoding.

Usage:  asn1Decoding [options] file1 file2 type
 file1 : file with ASN1 definitions.
 file2 : binary file with a DER encoding.
 type : ASN1 definition name.
Options:
 -h : shows the help message.
 -v : shows version information and exit.
 -o file : output file.

For example, after generating the assign.out file from the example section of the asn1Coding command above, the following invocation will decode the DER data.

$ asn1Decoding pkix.asn assign.out PKIX1.Dss-Sig-Value

Next: , Previous: , Up: Top   [Contents][Index]

4 Function reference


4.1 ASN.1 schema functions

asn1_parser2tree

Function: int asn1_parser2tree (const char * file, asn1_node * definitions, char * error_desc)

file: specify the path and the name of file that contains ASN.1 declarations.

definitions: return the pointer to the structure created from "file" ASN.1 declarations.

error_desc: return the error description or an empty string if success.

Function used to start the parse algorithm. Creates the structures needed to manage the definitions included in file file.

Returns: ASN1_SUCCESS if the file has a correct syntax and every identifier is known, ASN1_ELEMENT_NOT_EMPTY if definitions not NULL , ASN1_FILE_NOT_FOUND if an error occurred while opening file , ASN1_SYNTAX_ERROR if the syntax is not correct, ASN1_IDENTIFIER_NOT_FOUND if in the file there is an identifier that is not defined, ASN1_NAME_TOO_LONG if in the file there is an identifier with more than ASN1_MAX_NAME_SIZE characters.

asn1_parser2array

Function: int asn1_parser2array (const char * inputFileName, const char * outputFileName, const char * vectorName, char * error_desc)

inputFileName: specify the path and the name of file that contains ASN.1 declarations.

outputFileName: specify the path and the name of file that will contain the C vector definition.

vectorName: specify the name of the C vector.

error_desc: return the error description or an empty string if success.

Function that generates a C structure from an ASN1 file. Creates a file containing a C vector to use to manage the definitions included in inputFileName file. If inputFileName is "/aa/bb/xx.yy" and outputFileName is NULL , the file created is "/aa/bb/xx_asn1_tab.c". If vectorName is NULL the vector name will be "xx_asn1_tab".

Returns: ASN1_SUCCESS if the file has a correct syntax and every identifier is known, ASN1_FILE_NOT_FOUND if an error occurred while opening inputFileName , ASN1_SYNTAX_ERROR if the syntax is not correct, ASN1_IDENTIFIER_NOT_FOUND if in the file there is an identifier that is not defined, ASN1_NAME_TOO_LONG if in the file there is an identifier with more than ASN1_MAX_NAME_SIZE characters.


4.2 ASN.1 field functions

asn1_array2tree

Function: int asn1_array2tree (const asn1_static_node * array, asn1_node * definitions, char * errorDescription)

array: specify the array that contains ASN.1 declarations

definitions: return the pointer to the structure created by *ARRAY ASN.1 declarations

errorDescription: return the error description.

Creates the structures needed to manage the ASN.1 definitions. array is a vector created by asn1_parser2array() .

Returns: ASN1_SUCCESS if structure was created correctly, ASN1_ELEMENT_NOT_EMPTY if * definitions not NULL, ASN1_IDENTIFIER_NOT_FOUND if in the file there is an identifier that is not defined (see errorDescription for more information), ASN1_ARRAY_ERROR if the array pointed by array is wrong.

asn1_delete_structure

Function: int asn1_delete_structure (asn1_node * structure)

structure: pointer to the structure that you want to delete.

Deletes the structure * structure . At the end, * structure is set to NULL.

Returns: ASN1_SUCCESS if successful, ASN1_ELEMENT_NOT_FOUND if * structure was NULL.

asn1_delete_structure2

Function: int asn1_delete_structure2 (asn1_node * structure, unsigned int flags)

structure: pointer to the structure that you want to delete.

flags: additional flags (see ASN1_DELETE_FLAG )

Deletes the structure * structure . At the end, * structure is set to NULL.

Returns: ASN1_SUCCESS if successful, ASN1_ELEMENT_NOT_FOUND if * structure was NULL.

asn1_delete_element

Function: int asn1_delete_element (asn1_node structure, const char * element_name)

structure: pointer to the structure that contains the element you want to delete.

element_name: element’s name you want to delete.

Deletes the element named * element_name inside * structure .

Returns: ASN1_SUCCESS if successful, ASN1_ELEMENT_NOT_FOUND if the element_name was not found.

asn1_create_element

Function: int asn1_create_element (asn1_node_const definitions, const char * source_name, asn1_node * element)

definitions: pointer to the structure returned by "parser_asn1" function

source_name: the name of the type of the new structure (must be inside p_structure).

element: pointer to the structure created.

Creates a structure of type source_name . Example using "pkix.asn":

rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr);

Returns: ASN1_SUCCESS if creation OK, ASN1_ELEMENT_NOT_FOUND if source_name is not known.

asn1_print_structure

Function: void asn1_print_structure (FILE * out, asn1_node_const structure, const char * name, int mode)

out: pointer to the output file (e.g. stdout).

structure: pointer to the structure that you want to visit.

name: an element of the structure

mode: specify how much of the structure to print, can be ASN1_PRINT_NAME , ASN1_PRINT_NAME_TYPE , ASN1_PRINT_NAME_TYPE_VALUE , or ASN1_PRINT_ALL .

Prints on the out file descriptor the structure’s tree starting from the name element inside the structure structure .

asn1_number_of_elements

Function: int asn1_number_of_elements (asn1_node_const element, const char * name, int * num)

element: pointer to the root of an ASN1 structure.

name: the name of a sub-structure of ROOT.

num: pointer to an integer where the result will be stored

Counts the number of elements of a sub-structure called NAME with names equal to "?1","?2", ...

Returns: ASN1_SUCCESS if successful, ASN1_ELEMENT_NOT_FOUND if name is not known, ASN1_GENERIC_ERROR if pointer num is NULL .

asn1_find_structure_from_oid

Function: const char * asn1_find_structure_from_oid (asn1_node_const definitions, const char * oidValue)

definitions: ASN1 definitions

oidValue: value of the OID to search (e.g. "1.2.3.4").

Search the structure that is defined just after an OID definition.

Returns: NULL when oidValue not found, otherwise the pointer to a constant string that contains the element name defined just after the OID.

asn1_copy_node

Function: int asn1_copy_node (asn1_node dst, const char * dst_name, asn1_node_const src, const char * src_name)

dst: Destination asn1 node.

dst_name: Field name in destination node.

src: Source asn1 node.

src_name: Field name in source node.

Create a deep copy of a asn1_node variable. That function requires dst to be expanded using asn1_create_element() .

Returns: Return ASN1_SUCCESS on success.

asn1_dup_node

Function: asn1_node asn1_dup_node (asn1_node_const src, const char * src_name)

src: Source asn1 node.

src_name: Field name in source node.

Create a deep copy of a asn1_node variable. This function will return an exact copy of the provided structure.

Returns: Return NULL on failure.

asn1_write_value

Function: int asn1_write_value (asn1_node node_root, const char * name, const void * ivalue, int len)

node_root: pointer to a structure

name: the name of the element inside the structure that you want to set.

ivalue: vector used to specify the value to set. If len is >0, VALUE must be a two’s complement form integer. if len=0 *VALUE must be a null terminated string with an integer value.

len: number of bytes of *value to use to set the value: value[0]..value[len-1] or 0 if value is a null terminated string

Set the value of one element inside a structure.

If an element is OPTIONAL and you want to delete it, you must use the value=NULL and len=0. Using "pkix.asn":

result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", NULL, 0);

Description for each type:

INTEGER: VALUE must contain a two’s complement form integer.

value[0]=0xFF , len=1 -> integer=-1. value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1. value[0]=0x01 , len=1 -> integer= 1. value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. value="123" , len=0 -> integer= 123.

ENUMERATED: As INTEGER (but only with not negative numbers).

BOOLEAN: VALUE must be the null terminated string "TRUE" or "FALSE" and LEN != 0.

value="TRUE" , len=1 -> boolean=TRUE. value="FALSE" , len=1 -> boolean=FALSE.

OBJECT IDENTIFIER: VALUE must be a null terminated string with each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0.

value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha.

UTCTime: VALUE must be a null terminated string in one of these formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", "YYMMDDhhmmss+hh’mm’", "YYMMDDhhmmss-hh’mm’", "YYMMDDhhmm+hh’mm’", or "YYMMDDhhmm-hh’mm’". LEN != 0.

value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 at 12h 00m Greenwich Mean Time

GeneralizedTime: VALUE must be in one of this format: "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.s+hh’mm’", "YYYYMMDDhhmmss.s-hh’mm’", "YYYYMMDDhhmm+hh’mm’", or "YYYYMMDDhhmm-hh’mm’" where ss.s indicates the seconds with any precision like "10.1" or "01.02". LEN != 0

value="2001010112001.12-0700" , len=1 -> time=Jannuary 1st, 2001 at 12h 00m 01.12s Pacific Daylight Time

OCTET STRING: VALUE contains the octet string and LEN is the number of octets.

value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> three bytes octet string

GeneralString: VALUE contains the generalstring and LEN is the number of octets.

value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> three bytes generalstring

BIT STRING: VALUE contains the bit string organized by bytes and LEN is the number of bits.

value="$\backslash$xCF" , len=6 -> bit string="110011" (six bits)

CHOICE: if NAME indicates a choice type, VALUE must specify one of the alternatives with a null terminated string. LEN != 0. Using "pkix.asn"\:

result=asn1_write_value(cert, "certificate1.tbsCertificate.subject", "rdnSequence", 1);

ANY: VALUE indicates the der encoding of a structure. LEN != 0.

SEQUENCE OF: VALUE must be the null terminated string "NEW" and LEN != 0. With this instruction another element is appended in the sequence. The name of this element will be "?1" if it’s the first one, "?2" for the second and so on.

Using "pkix.asn"\:

result=asn1_write_value(cert, "certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1);

SET OF: the same as SEQUENCE OF. Using "pkix.asn":

result=asn1_write_value(cert, "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1);

Returns: ASN1_SUCCESS if the value was set, ASN1_ELEMENT_NOT_FOUND if name is not a valid element, and ASN1_VALUE_NOT_VALID if ivalue has a wrong format.

asn1_read_value

Function: int asn1_read_value (asn1_node_const root, const char * name, void * ivalue, int * len)

root: pointer to a structure.

name: the name of the element inside a structure that you want to read.

ivalue: vector that will contain the element’s content, must be a pointer to memory cells already allocated (may be NULL ).

len: number of bytes of *value: value[0]..value[len-1]. Initialy holds the sizeof value.

Returns the value of one element inside a structure. If an element is OPTIONAL and this returns ASN1_ELEMENT_NOT_FOUND , it means that this element wasn’t present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the root provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node.

Note that there can be valid values with length zero. In these case this function will succeed and len will be zero.

INTEGER: VALUE will contain a two’s complement form integer.

integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , len=1.

ENUMERATED: As INTEGER (but only with not negative numbers).

BOOLEAN: VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6.

OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1").

LEN = strlen(VALUE)+1

UTCTime: VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh’mm’" or "YYMMDDhhmmss-hh’mm’". LEN=strlen(VALUE)+1.

GeneralizedTime: VALUE will be a null terminated string in the same format used to set the value.

OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets.

GeneralString: VALUE will contain the generalstring and LEN will be the number of octets.

BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits.

CHOICE: If NAME indicates a choice type, VALUE will specify the alternative selected.

ANY: If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used.

Returns: ASN1_SUCCESS if value is returned, ASN1_ELEMENT_NOT_FOUND if name is not a valid element, ASN1_VALUE_NOT_FOUND if there isn’t any value for the element selected, and ASN1_MEM_ERROR if The value vector isn’t big enough to store the result, and in this case len will contain the number of bytes needed. On the occasion that the stored data are of zero-length this function may return ASN1_SUCCESS even if the provided len is zero.

asn1_read_value_type

Function: int asn1_read_value_type (asn1_node_const root, const char * name, void * ivalue, int * len, unsigned int * etype)

root: pointer to a structure.

name: the name of the element inside a structure that you want to read.

ivalue: vector that will contain the element’s content, must be a pointer to memory cells already allocated (may be NULL ).

len: number of bytes of *value: value[0]..value[len-1]. Initialy holds the sizeof value.

etype: The type of the value read (ASN1_ETYPE)

Returns the type and value of one element inside a structure. If an element is OPTIONAL and this returns ASN1_ELEMENT_NOT_FOUND , it means that this element wasn’t present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the root provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node.

Note that there can be valid values with length zero. In these case this function will succeed and len will be zero.

INTEGER: VALUE will contain a two’s complement form integer.

integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , len=1.

ENUMERATED: As INTEGER (but only with not negative numbers).

BOOLEAN: VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6.

OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1").

LEN = strlen(VALUE)+1

UTCTime: VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh’mm’" or "YYMMDDhhmmss-hh’mm’". LEN=strlen(VALUE)+1.

GeneralizedTime: VALUE will be a null terminated string in the same format used to set the value.

OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets.

GeneralString: VALUE will contain the generalstring and LEN will be the number of octets.

BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits.

CHOICE: If NAME indicates a choice type, VALUE will specify the alternative selected.

ANY: If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used.

Returns: ASN1_SUCCESS if value is returned, ASN1_ELEMENT_NOT_FOUND if name is not a valid element, ASN1_VALUE_NOT_FOUND if there isn’t any value for the element selected, and ASN1_MEM_ERROR if The value vector isn’t big enough to store the result, and in this case len will contain the number of bytes needed. On the occasion that the stored data are of zero-length this function may return ASN1_SUCCESS even if the provided len is zero.

asn1_read_tag

Function: int asn1_read_tag (asn1_node_const root, const char * name, int * tagValue, int * classValue)

root: pointer to a structure

name: the name of the element inside a structure.

tagValue: variable that will contain the TAG value.

classValue: variable that will specify the TAG type.

Returns the TAG and the CLASS of one element inside a structure. CLASS can have one of these constants: ASN1_CLASS_APPLICATION , ASN1_CLASS_UNIVERSAL , ASN1_CLASS_PRIVATE or ASN1_CLASS_CONTEXT_SPECIFIC .

Returns: ASN1_SUCCESS if successful, ASN1_ELEMENT_NOT_FOUND if name is not a valid element.

asn1_read_node_value

Function: int asn1_read_node_value (asn1_node_const node, asn1_data_node_st * data)

node: pointer to a node.

data: a point to a asn1_data_node_st

Returns the value a data node inside a asn1_node structure. The data returned should be handled as constant values.

Returns: ASN1_SUCCESS if the node exists.


4.3 DER functions

asn1_length_der

Function: void asn1_length_der (unsigned long int len, unsigned char * der, int * der_len)

len: value to convert.

der: buffer to hold the returned encoding (may be NULL ).

der_len: number of meaningful bytes of ANS (der[0]..der[der_len-1]).

Creates the DER encoding of the provided length value. The der buffer must have enough room for the output. The maximum length this function will encode is ASN1_MAX_LENGTH_SIZE .

To know the size of the DER encoding use a NULL value for der .

asn1_octet_der

Function: void asn1_octet_der (const unsigned char * str, int str_len, unsigned char * der, int * der_len)

str: the input data.

str_len: STR length (str[0]..str[*str_len-1]).

der: encoded string returned.

der_len: number of meaningful bytes of DER (der[0]..der[der_len-1]).

Creates a length-value DER encoding for the input data. The DER encoding of the input data will be placed in the der variable.

Note that the OCTET STRING tag is not included in the output.

This function does not return any value because it is expected that der_len will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using asn1_length_der() .

asn1_encode_simple_der

Function: int asn1_encode_simple_der (unsigned int etype, const unsigned char * str, unsigned int str_len, unsigned char * tl, unsigned int * tl_len)

etype: The type of the string to be encoded (ASN1_ETYPE_)

str: the string data.

str_len: the string length

tl: the encoded tag and length

tl_len: the bytes of the tl field

Creates the DER encoding for various simple ASN.1 types like strings etc. It stores the tag and length in tl , which should have space for at least ASN1_MAX_TL_SIZE bytes. Initially tl_len should contain the size of tl .

The complete DER encoding should consist of the value in tl appended with the provided str .

Returns: ASN1_SUCCESS if successful or an error value.

asn1_object_id_der

Function: int asn1_object_id_der (const char * str, unsigned char * der, int * der_len, unsigned flags)

str: An object identifier in numeric, dot format.

der: buffer to hold the returned encoding (may be NULL ).

der_len: initially the size of der ; will hold the final size.

flags: must be zero

Creates the DER encoding of the provided object identifier.

Returns: ASN1_SUCCESS if DER encoding was OK, ASN1_VALUE_NOT_VALID if str is not a valid OID, ASN1_MEM_ERROR if the der vector isn’t big enough and in this case der_len will contain the length needed.

asn1_bit_der

Function: void asn1_bit_der (const unsigned char * str, int bit_len, unsigned char * der, int * der_len)

str: BIT string.

bit_len: number of meaningful bits in STR.

der: string returned.

der_len: number of meaningful bytes of DER (der[0]..der[ans_len-1]).

Creates a length-value DER encoding for the input data as it would have been for a BIT STRING. The DER encoded data will be copied in der .

Note that the BIT STRING tag is not included in the output.

This function does not return any value because it is expected that der_len will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using asn1_length_der() .

asn1_der_coding

Function: int asn1_der_coding (asn1_node_const element, const char * name, void * ider, int * len, char * ErrorDescription)

element: pointer to an ASN1 element

name: the name of the structure you want to encode (it must be inside *POINTER).

ider: vector that will contain the DER encoding. DER must be a pointer to memory cells already allocated.

len: number of bytes of * ider : ider [0].. ider [len-1], Initialy holds the sizeof of der vector.

ErrorDescription: return the error description or an empty string if success.

Creates the DER encoding for the NAME structure (inside *POINTER structure).

Returns: ASN1_SUCCESS if DER encoding OK, ASN1_ELEMENT_NOT_FOUND if name is not a valid element, ASN1_VALUE_NOT_FOUND if there is an element without a value, ASN1_MEM_ERROR if the ider vector isn’t big enough and in this case len will contain the length needed.

asn1_get_length_der

Function: long asn1_get_length_der (const unsigned char * der, int der_len, int * len)

der: DER data to decode.

der_len: Length of DER data to decode.

len: Output variable containing the length of the DER length field.

Extract a length field from DER data.

Returns: Return the decoded length value, or -1 on indefinite length, or -2 when the value was too big to fit in a int, or -4 when the decoded length value plus len would exceed der_len .

asn1_get_tag_der

Function: int asn1_get_tag_der (const unsigned char * der, int der_len, unsigned char * cls, int * len, unsigned long * tag)

der: DER data to decode.

der_len: Length of DER data to decode.

cls: Output variable containing decoded class.

len: Output variable containing the length of the DER TAG data.

tag: Output variable containing the decoded tag (may be NULL ).

Decode the class and TAG from DER code.

Returns: Returns ASN1_SUCCESS on success, or an error.

asn1_get_length_ber

Function: long asn1_get_length_ber (const unsigned char * ber, int ber_len, int * len)

ber: BER data to decode.

ber_len: Length of BER data to decode.

len: Output variable containing the length of the BER length field.

Extract a length field from BER data. The difference to asn1_get_length_der() is that this function will return a length even if the value has indefinite encoding.

Returns: Return the decoded length value, or negative value when the value was too big.

Since: 2.0

asn1_get_octet_der

Function: int asn1_get_octet_der (const unsigned char * der, int der_len, int * ret_len, unsigned char * str, int str_size, int * str_len)

der: DER data to decode containing the OCTET SEQUENCE.

der_len: The length of the der data to decode.

ret_len: Output variable containing the encoded length of the DER data.

str: Pre-allocated output buffer to put decoded OCTET SEQUENCE in.

str_size: Length of pre-allocated output buffer.

str_len: Output variable containing the length of the contents of the OCTET SEQUENCE.

Extract an OCTET SEQUENCE from DER data. Note that this function expects the DER data past the tag field, i.e., the length and content octets.

Returns: Returns ASN1_SUCCESS on success, or an error.

asn1_get_object_id_der

Function: int asn1_get_object_id_der (const unsigned char * der, int der_len, int * ret_len, char * str, int str_size)

der: DER data to decode containing the OBJECT IDENTIFIER

der_len: Length of DER data to decode.

ret_len: Output variable containing the length of the DER data.

str: Pre-allocated output buffer to put the textual object id in.

str_size: Length of pre-allocated output buffer.

Converts a DER encoded object identifier to its textual form. This function expects the DER object identifier without the tag.

Returns: ASN1_SUCCESS on success, or an error.

asn1_get_bit_der

Function: int asn1_get_bit_der (const unsigned char * der, int der_len, int * ret_len, unsigned char * str, int str_size, int * bit_len)

der: DER data to decode containing the BIT SEQUENCE.

der_len: Length of DER data to decode.

ret_len: Output variable containing the length of the DER data.

str: Pre-allocated output buffer to put decoded BIT SEQUENCE in.

str_size: Length of pre-allocated output buffer.

bit_len: Output variable containing the size of the BIT SEQUENCE.

Extract a BIT SEQUENCE from DER data.

Returns: ASN1_SUCCESS on success, or an error.

asn1_der_decoding2

Function: int asn1_der_decoding2 (asn1_node * element, const void * ider, int * max_ider_len, unsigned int flags, char * errorDescription)

element: pointer to an ASN1 structure.

ider: vector that contains the DER encoding.

max_ider_len: pointer to an integer giving the information about the maximal number of bytes occupied by * ider . The real size of the DER encoding is returned through this pointer.

flags: flags controlling the behaviour of the function.

errorDescription: null-terminated string contains details when an error occurred.

Fill the structure * element with values of a DER encoding string. The structure must just be created with function asn1_create_element() .

If ASN1_DECODE_FLAG_ALLOW_PADDING flag is set then the function will ignore padding after the decoded DER data. Upon a successful return the value of * max_ider_len will be set to the number of bytes decoded.

If ASN1_DECODE_FLAG_STRICT_DER flag is set then the function will not decode any BER-encoded elements.

Returns: ASN1_SUCCESS if DER encoding OK, ASN1_ELEMENT_NOT_FOUND if ELEMENT is NULL , and ASN1_TAG_ERROR or ASN1_DER_ERROR if the der encoding doesn’t match the structure name (* ELEMENT deleted).

asn1_der_decoding

Function: int asn1_der_decoding (asn1_node * element, const void * ider, int ider_len, char * errorDescription)

element: pointer to an ASN1 structure.

ider: vector that contains the DER encoding.

ider_len: number of bytes of * ider : ider [0].. ider [len-1].

errorDescription: null-terminated string contains details when an error occurred.

Fill the structure * element with values of a DER encoding string. The structure must just be created with function asn1_create_element() .

Note that the * element variable is provided as a pointer for historical reasons.

Returns: ASN1_SUCCESS if DER encoding OK, ASN1_ELEMENT_NOT_FOUND if ELEMENT is NULL , and ASN1_TAG_ERROR or ASN1_DER_ERROR if the der encoding doesn’t match the structure name (* ELEMENT deleted).

asn1_der_decoding_element

Function: int asn1_der_decoding_element (asn1_node * structure, const char * elementName, const void * ider, int len, char * errorDescription)

structure: pointer to an ASN1 structure

elementName: name of the element to fill

ider: vector that contains the DER encoding of the whole structure.

len: number of bytes of *der: der[0]..der[len-1]

errorDescription: null-terminated string contains details when an error occurred.

Fill the element named ELEMENTNAME with values of a DER encoding string. The structure must just be created with function asn1_create_element() . The DER vector must contain the encoding string of the whole STRUCTURE . If an error occurs during the decoding procedure, the * STRUCTURE is deleted and set equal to NULL .

This function is deprecated and may just be an alias to asn1_der_decoding in future versions. Use asn1_der_decoding() instead.

Returns: ASN1_SUCCESS if DER encoding OK, ASN1_ELEMENT_NOT_FOUND if ELEMENT is NULL or elementName == NULL, and ASN1_TAG_ERROR or ASN1_DER_ERROR if the der encoding doesn’t match the structure structure (*ELEMENT deleted).

asn1_der_decoding_startEnd

Function: int asn1_der_decoding_startEnd (asn1_node element, const void * ider, int ider_len, const char * name_element, int * start, int * end)

element: pointer to an ASN1 element

ider: vector that contains the DER encoding.

ider_len: number of bytes of * ider : ider [0].. ider [len-1]

name_element: an element of NAME structure.

start: the position of the first byte of NAME_ELEMENT decoding ( ider [*start])

end: the position of the last byte of NAME_ELEMENT decoding ( ider [*end])

Find the start and end point of an element in a DER encoding string. I mean that if you have a der encoding and you have already used the function asn1_der_decoding() to fill a structure, it may happen that you want to find the piece of string concerning an element of the structure.

One example is the sequence "tbsCertificate" inside an X509 certificate.

Note that since libtasn1 3.7 the ider and ider_len parameters can be omitted, if the element is already decoded using asn1_der_decoding() .

Returns: ASN1_SUCCESS if DER encoding OK, ASN1_ELEMENT_NOT_FOUND if ELEMENT is asn1_node EMPTY or name_element is not a valid element, ASN1_TAG_ERROR or ASN1_DER_ERROR if the der encoding doesn’t match the structure ELEMENT.

asn1_expand_any_defined_by

Function: int asn1_expand_any_defined_by (asn1_node_const definitions, asn1_node * element)

definitions: ASN1 definitions

element: pointer to an ASN1 structure

Expands every "ANY DEFINED BY" element of a structure created from a DER decoding process (asn1_der_decoding function). The element ANY must be defined by an OBJECT IDENTIFIER. The type used to expand the element ANY is the first one following the definition of the actual value of the OBJECT IDENTIFIER.

Returns: ASN1_SUCCESS if Substitution OK, ASN1_ERROR_TYPE_ANY if some "ANY DEFINED BY" element couldn’t be expanded due to a problem in OBJECT_ID -> TYPE association, or other error codes depending on DER decoding.

asn1_expand_octet_string

Function: int asn1_expand_octet_string (asn1_node_const definitions, asn1_node * element, const char * octetName, const char * objectName)

definitions: ASN1 definitions

element: pointer to an ASN1 structure

octetName: name of the OCTECT STRING field to expand.

objectName: name of the OBJECT IDENTIFIER field to use to define the type for expansion.

Expands an "OCTET STRING" element of a structure created from a DER decoding process (the asn1_der_decoding() function). The type used for expansion is the first one following the definition of the actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME.

Returns: ASN1_SUCCESS if substitution OK, ASN1_ELEMENT_NOT_FOUND if objectName or octetName are not correct, ASN1_VALUE_NOT_VALID if it wasn’t possible to find the type to use for expansion, or other errors depending on DER decoding.

asn1_decode_simple_der

Function: int asn1_decode_simple_der (unsigned int etype, const unsigned char * der, unsigned int _der_len, const unsigned char ** str, unsigned int * str_len)

etype: The type of the string to be encoded (ASN1_ETYPE_)

der: the encoded string

_der_len: the bytes of the encoded string

str: a pointer to the data

str_len: the length of the data

Decodes a simple DER encoded type (e.g. a string, which is not constructed). The output is a pointer inside the der .

Returns: ASN1_SUCCESS if successful or an error value.

asn1_decode_simple_ber

Function: int asn1_decode_simple_ber (unsigned int etype, const unsigned char * der, unsigned int _der_len, unsigned char ** str, unsigned int * str_len, unsigned int * ber_len)

etype: The type of the string to be encoded (ASN1_ETYPE_)

der: the encoded string

_der_len: the bytes of the encoded string

str: a pointer to the data

str_len: the length of the data

ber_len: the total length occupied by BER (may be NULL )

Decodes a BER encoded type. The output is an allocated value of the data. This decodes BER STRINGS only. Other types are decoded as DER.

Returns: ASN1_SUCCESS if successful or an error value.


4.4 Error handling functions

asn1_perror

Function: void asn1_perror (int error)

error: is an error returned by a libtasn1 function.

Prints a string to stderr with a description of an error. This function is like perror() . The only difference is that it accepts an error returned by a libtasn1 function.

Since: 1.6

asn1_strerror

Function: const char * asn1_strerror (int error)

error: is an error returned by a libtasn1 function.

Returns a string with a description of an error. This function is similar to strerror. The only difference is that it accepts an error (number) returned by a libtasn1 function.

Returns: Pointer to static zero-terminated string describing error code.

Since: 1.6


4.5 Auxilliary functions

asn1_find_node

Function: asn1_node asn1_find_node (asn1_node_const pointer, const char * name)

pointer: NODE_ASN element pointer.

name: null terminated string with the element’s name to find.

Searches for an element called name starting from pointer . The name is composed by different identifiers separated by dots. When * pointer has a name, the first identifier must be the name of * pointer , otherwise it must be the name of one child of * pointer .

Returns: the search result, or NULL if not found.

asn1_check_version

Function: const char * asn1_check_version (const char * req_version)

req_version: Required version number, or NULL .

Check that the version of the library is at minimum the requested one and return the version string; return NULL if the condition is not satisfied. If a NULL is passed to this function, no check is done, but the version string is simply returned.

See ASN1_VERSION for a suitable req_version string.

Returns: Version string of run-time library, or NULL if the run-time library does not meet the required version number.


Next: , Previous: , Up: Top   [Contents][Index]

Appendix A Copying Information


A.1 GNU Free Documentation License

Version 1.3, 3 November 2008
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
http://fsf.org/

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
  1. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

  2. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

    A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

    The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

    A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

    The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    The “publisher” means any person or entity that distributes copies of the Document to the public.

    A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.

    The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

  3. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

  4. COPYING IN QUANTITY

    If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

  5. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
    4. Preserve all the copyright notices of the Document.
    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
    8. Include an unaltered copy of this License.
    9. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
    13. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version.
    14. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.
    15. Preserve any Warranty Disclaimers.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

    You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

  6. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.”

  7. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

  8. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

  9. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

    If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

  10. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

  11. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

  12. RELICENSING

    “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site.

    “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

    “Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document.

    An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

    The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

  Copyright (C)  year  your name.
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
  Texts.  A copy of the license is included in the section entitled ``GNU
  Free Documentation License''.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this:

    with the Invariant Sections being list their titles, with
    the Front-Cover Texts being list, and with the Back-Cover Texts
    being list.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


Concept Index

Jump to:   A   F   H   M   P   S   T  
Index Entry  Section

A
ASN.1 schema: ASN.1 syntax
asn1Coding program: Invoking asn1Coding
asn1Decoding program: Invoking asn1Decoding
asn1Parser program: Invoking asn1Parser

F
FDL, GNU Free Documentation License: GNU Free Documentation License
Future developments: Future developments

H
Header file libtasn1.h: Library Notes

M
Main type asn1_node: Library Notes

P
Porting: Introduction

S
Supported ASN.1 types, list of: ASN.1 syntax

T
threads: Introduction

Jump to:   A   F   H   M   P   S   T  

Previous: , Up: Top   [Contents][Index]

Function and Data Index

Jump to:   A  
Index Entry  Section

A
asn1_array2tree: ASN.1 field functions
asn1_bit_der: DER functions
asn1_check_version: Auxilliary functions
asn1_copy_node: ASN.1 field functions
asn1_create_element: ASN.1 field functions
asn1_decode_simple_ber: DER functions
asn1_decode_simple_der: DER functions
asn1_delete_element: ASN.1 field functions
asn1_delete_structure: ASN.1 field functions
asn1_delete_structure2: ASN.1 field functions
asn1_der_coding: DER functions
asn1_der_decoding: DER functions
asn1_der_decoding2: DER functions
asn1_der_decoding_element: DER functions
asn1_der_decoding_startEnd: DER functions
asn1_dup_node: ASN.1 field functions
asn1_encode_simple_der: DER functions
asn1_expand_any_defined_by: DER functions
asn1_expand_octet_string: DER functions
asn1_find_node: Auxilliary functions
asn1_find_structure_from_oid: ASN.1 field functions
asn1_get_bit_der: DER functions
asn1_get_length_ber: DER functions
asn1_get_length_der: DER functions
asn1_get_object_id_der: DER functions
asn1_get_octet_der: DER functions
asn1_get_tag_der: DER functions
asn1_length_der: DER functions
asn1_number_of_elements: ASN.1 field functions
asn1_object_id_der: DER functions
asn1_octet_der: DER functions
asn1_parser2array: ASN.1 schema functions
asn1_parser2tree: ASN.1 schema functions
asn1_perror: Error handling functions
asn1_print_structure: ASN.1 field functions
asn1_read_node_value: ASN.1 field functions
asn1_read_tag: ASN.1 field functions
asn1_read_value: ASN.1 field functions
asn1_read_value_type: ASN.1 field functions
asn1_strerror: Error handling functions
asn1_write_value: ASN.1 field functions

Jump to:   A  

libtasn1-4.16.0/doc/libtasn1.texi0000644000000000000000000002652713603737041013403 00000000000000\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename libtasn1.info @include version.texi @settitle GNU Libtasn1 @value{VERSION} @c Unify some of the indices. @syncodeindex tp fn @syncodeindex pg fn @comment %**end of header @copying This manual is for GNU Libtasn1 (version @value{VERSION}, @value{UPDATED}), which is a library for Abstract Syntax Notation One (ASN.1) and Distinguished Encoding Rules (DER) manipulation. Copyright @copyright{} 2001-2020 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Software libraries @direntry * libtasn1: (libtasn1). Library for Abstract Syntax Notation One (ASN.1). @end direntry @titlepage @title Libtasn1 @subtitle Abstract Syntax Notation One (ASN.1) library for the GNU system @subtitle for version @value{VERSION}, @value{UPDATED} @author Fabio Fiorina @author Simon Josefsson @author Nikos Mavrogiannopoulos (@email{help-libtasn1@@gnu.org}) @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top Libtasn1 @insertcopying @end ifnottex @menu * Introduction:: * ASN.1 structure handling:: * Utilities:: * Function reference:: * Copying Information:: Indices * Concept Index:: Index of concepts and programs. * Function and Data Index:: Index of functions, variables and data types. @end menu @node Introduction @chapter Introduction This document describes the Libtasn1 library that provides Abstract Syntax Notation One (ASN.1, as specified by the X.680 ITU-T recommendation) parsing and structures management, and Distinguished Encoding Rules (DER, as per X.690) encoding and decoding functions. The main features of this library are: @itemize @bullet @item On-line ASN.1 structure management that doesn't require any C code file generation. @item Off-line ASN.1 structure management with C code file generation containing an array. @item Distinguished Encoding Rules (DER) encoding support. @item No limits for INTEGER and ENUMERATED values. @item It's Free Software. Anybody can use, modify, and redistribute the library under the terms of the GNU Lesser General Public License version 2.1 or later. The command line tools, self-tests and build infrastructure are licensed under the GNU General Public License version 3.0 or later. @item Thread-safety. @cindex threads No global variables are used and multiple library handles and session handles may be used in parallel. @item Portability. @cindex Porting The code should work on all Unix like operating systems, and Windows. The library itself should be portable to any C89 system, not even POSIX is required. @end itemize @node ASN.1 structure handling @chapter ASN.1 structure handling @menu * ASN.1 syntax:: * Naming:: * Simple parsing:: * Library Notes:: * Future developments:: @end menu @node ASN.1 syntax @section ASN.1 syntax @cindex ASN.1 schema The parser is case sensitive. The comments begin with @code{--} and end either with another @code{--}, or at the end of the respective line, whichever comes first. The C-style @code{/*}, @code{*/} comments are not supported. For an example of the syntax, check the @file{pkix.asn} file distributed with the library. ASN.1 definitions must follow the syntax below: @verbatim definitions_name {} DEFINITIONS TAGS ::= BEGIN END @end verbatim The @code{::=} token must be separate from other elements, so the following declaration is invalid: @example -- INCORRECT Version ::=INTEGER @end example The correct form is: @example Version ::= INTEGER @end example Here is the list of types that the parser can manage: @cindex Supported ASN.1 types, list of @itemize @bullet @item @code{INTEGER}; @item @code{ENUMERATED}; @item @code{BOOLEAN}; @item @code{OBJECT IDENTIFIER}; @item @code{NULL}; @item @code{BIT STRING}; @item @code{OCTET STRING}; @item @code{UTCTime}; @item @code{GeneralizedTime}; @item @code{GeneralString}; @item @code{NumericString}; @item @code{IA5String}; @item @code{TeletexString}; @item @code{PrintableString}; @item @code{UniversalString}; @item @code{BMPString}; @item @code{UTF8String}; @item @code{VisibleString}; @item @code{SEQUENCE}; @item @code{SEQUENCE OF}; @item @code{SET}; @item @code{SET OF}; @item @code{CHOICE}; @item @code{ANY}; @item @code{ANY DEFINED BY}. @end itemize This version doesn't handle the @code{REAL} type. It doesn't support the @code{AUTOMATIC TAGS} option, and the @code{EXPORT} and @code{IMPORT} sections, either. The @code{SIZE} constraints are allowed, but no check is done on them. @node Naming @section Naming Consider this definition: @verbatim Example { 1 2 3 4 } DEFINITIONS EXPLICIT TAGS ::= BEGIN Group ::= SEQUENCE { id OBJECT IDENTIFIER, value Value } Value ::= SEQUENCE { value1 INTEGER, value2 BOOLEAN } END @end verbatim The notation to access the @samp{Group} type of the @samp{Example} definition above is @samp{Example.Group} (as a NUL-terminated string.) Such strings are used in the functions described below. Others examples: @itemize @bullet @item field @samp{id} of the @samp{Group} type: @samp{Example.Group.id}; @item field @samp{value1} of the @samp{value} field of the @samp{Group} type: @samp{Example.Group.value.value1}. @end itemize Elements of structured types unnamed by the respective definition receive the names @code{?1}, @code{?2}, and so on. The @code{?LAST} name indicates the last element of a @code{SET OF} or @code{SEQUENCE OF}. @node Simple parsing @section Simple parsing For simple types like @code{OCTET STRING} the simple parsing functions listed below may be used instead. @itemize @item @ref{asn1_decode_simple_der} @item @ref{asn1_encode_simple_der} @end itemize @node Library Notes @section Library Notes @cindex Header file libtasn1.h The header file of this library is @file{libtasn1.h}. @cindex Main type asn1_node The main type used in it is @code{asn1_node}, and it's used to store the ASN.1 definitions and structures (instances). The @code{NULL} constant can be used for the variable initialization. For example: @example asn1_node definitions = NULL; @end example Some functions require an @code{errorDescription} argument of type @code{char *}, pointing to a pre-allocated buffer of at least @code{ASN1_MAX_ERROR_DESCRIPTION_SIZE} bytes size (e.g., as in @samp{char description[ASN1_MAX_ERROR_DESCRIPTION_SIZE];}). @code{ASN1_MAX_NAME_SIZE} is the maximum number of characters allowed for an ASN.1 identifier. @node Future developments @section Future developments @cindex Future developments @itemize @bullet @item Add functions for a C code file generation containing equivalent data structures (not a single array like now). @item The @code{REAL} type. @end itemize @node Utilities @chapter Utilities @menu * Invoking asn1Parser:: * Invoking asn1Coding:: * Invoking asn1Decoding:: @end menu @node Invoking asn1Parser @section Invoking asn1Parser @cindex asn1Parser program @command{asn1Parser} reads a single file with ASN.1 definitions and generates a file with an array to use with libtasn1 functions. @verbatim Usage: asn1Parser [options] file Options: -h : shows the help message. -v : shows version information and exit. -c : checks the syntax only. -o file : output file. -n name : array name. @end verbatim @node Invoking asn1Coding @section Invoking asn1Coding @cindex asn1Coding program @command{asn1Coding} generates a DER encoding from a file with ASN.1 definitions and another one with assignments. The file with assignments must have this syntax: @verbatim InstanceName Asn1Definition nameString value nameString value ... @end verbatim To specify the field of a @code{CHOICE} to be used, specify its name as a value to the @code{CHOICE} element itself. Use @code{''} to denote the root element itself. (as in the example below.) The output file is a binary file with the DER encoding. @verbatim Usage: asn1Coding [options] file1 file2 file1 : file with ASN1 definitions. file2 : file with assignments. Options: -h : shows the help message. -v : shows version information and exit. -c : checks the syntax only. -o file : output file. @end verbatim For example, consider an ASN.1 definitions file as follows: @verbatim MYPKIX1 { } DEFINITIONS IMPLICIT TAGS ::= BEGIN OtherStruct := SEQUENCE { x INTEGER, y CHOICE { y1 INTEGER, y2 OCTET STRING }, } Dss-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER, other OtherStruct z INTEGER OPTIONAL, } END @end verbatim And a assignments file as follows: @verbatim dp MYPKIX1.Dss-Sig-Value r 42 s 47 other.x 66 other.y y1 other.y.y1 15 z (NULL) @end verbatim Running the command below will generate a @file{assign.out} file, containing the DER encoding of @code{PKIX1.Dss-Sig-Value}. @verbatim $ asn1Coding pkix.asn assign.asn1 @end verbatim If the root element is of the @code{CHOICE} type, the assignment file may be like (using the types defined in @file{pkix.asn}): @verbatim elt PKIX1Implicit88.GeneralName '' dNSName dNSName example.org @end verbatim @node Invoking asn1Decoding @section Invoking asn1Decoding @cindex asn1Decoding program @command{asn1Decoding} generates an ASN.1 structure from a file with ASN.1 definitions and a binary file with a DER encoding. @verbatim Usage: asn1Decoding [options] file1 file2 type file1 : file with ASN1 definitions. file2 : binary file with a DER encoding. type : ASN1 definition name. Options: -h : shows the help message. -v : shows version information and exit. -o file : output file. @end verbatim For example, after generating the @file{assign.out} file from the example section of the @command{asn1Coding} command above, the following invocation will decode the DER data. @verbatim $ asn1Decoding pkix.asn assign.out PKIX1.Dss-Sig-Value @end verbatim @node Function reference @chapter Function reference @menu * ASN.1 schema functions:: * ASN.1 field functions:: * DER functions:: * Error handling functions:: * Auxilliary functions:: @end menu @node ASN.1 schema functions @section ASN.1 schema functions @include texi/ASN1.c.texi @node ASN.1 field functions @section ASN.1 field functions @include texi/structure.c.texi @include texi/element.c.texi @node DER functions @section DER functions @include texi/coding.c.texi @include texi/decoding.c.texi @node Error handling functions @section Error handling functions @include texi/errors.c.texi @node Auxilliary functions @section Auxilliary functions @include texi/parser_aux.c.texi @include texi/version.c.texi @node Copying Information @appendix Copying Information @menu * GNU Free Documentation License:: License for copying this manual. @end menu @node GNU Free Documentation License @appendixsec GNU Free Documentation License @cindex FDL, GNU Free Documentation License @include fdl-1.3.texi @node Concept Index @unnumbered Concept Index @printindex cp @node Function and Data Index @unnumbered Function and Data Index @printindex fn @bye libtasn1-4.16.0/doc/libtasn1.info0000644000000000000000000024113613615374721013365 00000000000000This is libtasn1.info, produced by makeinfo version 6.7 from libtasn1.texi. This manual is for GNU Libtasn1 (version 4.16.0, 3 January 2020), which is a library for Abstract Syntax Notation One (ASN.1) and Distinguished Encoding Rules (DER) manipulation. Copyright (C) 2001-2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Software libraries START-INFO-DIR-ENTRY * libtasn1: (libtasn1). Library for Abstract Syntax Notation One (ASN.1). END-INFO-DIR-ENTRY  File: libtasn1.info, Node: Top, Next: Introduction, Up: (dir) Libtasn1 ******** This manual is for GNU Libtasn1 (version 4.16.0, 3 January 2020), which is a library for Abstract Syntax Notation One (ASN.1) and Distinguished Encoding Rules (DER) manipulation. Copyright (C) 2001-2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". * Menu: * Introduction:: * ASN.1 structure handling:: * Utilities:: * Function reference:: * Copying Information:: Indices * Concept Index:: Index of concepts and programs. * Function and Data Index:: Index of functions, variables and data types.  File: libtasn1.info, Node: Introduction, Next: ASN.1 structure handling, Prev: Top, Up: Top 1 Introduction ************** This document describes the Libtasn1 library that provides Abstract Syntax Notation One (ASN.1, as specified by the X.680 ITU-T recommendation) parsing and structures management, and Distinguished Encoding Rules (DER, as per X.690) encoding and decoding functions. The main features of this library are: * On-line ASN.1 structure management that doesn't require any C code file generation. * Off-line ASN.1 structure management with C code file generation containing an array. * Distinguished Encoding Rules (DER) encoding support. * No limits for INTEGER and ENUMERATED values. * It's Free Software. Anybody can use, modify, and redistribute the library under the terms of the GNU Lesser General Public License version 2.1 or later. The command line tools, self-tests and build infrastructure are licensed under the GNU General Public License version 3.0 or later. * Thread-safety. No global variables are used and multiple library handles and session handles may be used in parallel. * Portability. The code should work on all Unix like operating systems, and Windows. The library itself should be portable to any C89 system, not even POSIX is required.  File: libtasn1.info, Node: ASN.1 structure handling, Next: Utilities, Prev: Introduction, Up: Top 2 ASN.1 structure handling ************************** * Menu: * ASN.1 syntax:: * Naming:: * Simple parsing:: * Library Notes:: * Future developments::  File: libtasn1.info, Node: ASN.1 syntax, Next: Naming, Up: ASN.1 structure handling 2.1 ASN.1 syntax ================ The parser is case sensitive. The comments begin with '--' and end either with another '--', or at the end of the respective line, whichever comes first. The C-style '/*', '*/' comments are not supported. For an example of the syntax, check the 'pkix.asn' file distributed with the library. ASN.1 definitions must follow the syntax below: definitions_name {} DEFINITIONS TAGS ::= BEGIN END The '::=' token must be separate from other elements, so the following declaration is invalid: -- INCORRECT Version ::=INTEGER The correct form is: Version ::= INTEGER Here is the list of types that the parser can manage: * 'INTEGER'; * 'ENUMERATED'; * 'BOOLEAN'; * 'OBJECT IDENTIFIER'; * 'NULL'; * 'BIT STRING'; * 'OCTET STRING'; * 'UTCTime'; * 'GeneralizedTime'; * 'GeneralString'; * 'NumericString'; * 'IA5String'; * 'TeletexString'; * 'PrintableString'; * 'UniversalString'; * 'BMPString'; * 'UTF8String'; * 'VisibleString'; * 'SEQUENCE'; * 'SEQUENCE OF'; * 'SET'; * 'SET OF'; * 'CHOICE'; * 'ANY'; * 'ANY DEFINED BY'. This version doesn't handle the 'REAL' type. It doesn't support the 'AUTOMATIC TAGS' option, and the 'EXPORT' and 'IMPORT' sections, either. The 'SIZE' constraints are allowed, but no check is done on them.  File: libtasn1.info, Node: Naming, Next: Simple parsing, Prev: ASN.1 syntax, Up: ASN.1 structure handling 2.2 Naming ========== Consider this definition: Example { 1 2 3 4 } DEFINITIONS EXPLICIT TAGS ::= BEGIN Group ::= SEQUENCE { id OBJECT IDENTIFIER, value Value } Value ::= SEQUENCE { value1 INTEGER, value2 BOOLEAN } END The notation to access the 'Group' type of the 'Example' definition above is 'Example.Group' (as a NUL-terminated string.) Such strings are used in the functions described below. Others examples: * field 'id' of the 'Group' type: 'Example.Group.id'; * field 'value1' of the 'value' field of the 'Group' type: 'Example.Group.value.value1'. Elements of structured types unnamed by the respective definition receive the names '?1', '?2', and so on. The '?LAST' name indicates the last element of a 'SET OF' or 'SEQUENCE OF'.  File: libtasn1.info, Node: Simple parsing, Next: Library Notes, Prev: Naming, Up: ASN.1 structure handling 2.3 Simple parsing ================== For simple types like 'OCTET STRING' the simple parsing functions listed below may be used instead. * *note asn1_decode_simple_der:: * *note asn1_encode_simple_der::  File: libtasn1.info, Node: Library Notes, Next: Future developments, Prev: Simple parsing, Up: ASN.1 structure handling 2.4 Library Notes ================= The header file of this library is 'libtasn1.h'. The main type used in it is 'asn1_node', and it's used to store the ASN.1 definitions and structures (instances). The 'NULL' constant can be used for the variable initialization. For example: asn1_node definitions = NULL; Some functions require an 'errorDescription' argument of type 'char *', pointing to a pre-allocated buffer of at least 'ASN1_MAX_ERROR_DESCRIPTION_SIZE' bytes size (e.g., as in 'char description[ASN1_MAX_ERROR_DESCRIPTION_SIZE];'). 'ASN1_MAX_NAME_SIZE' is the maximum number of characters allowed for an ASN.1 identifier.  File: libtasn1.info, Node: Future developments, Prev: Library Notes, Up: ASN.1 structure handling 2.5 Future developments ======================= * Add functions for a C code file generation containing equivalent data structures (not a single array like now). * The 'REAL' type.  File: libtasn1.info, Node: Utilities, Next: Function reference, Prev: ASN.1 structure handling, Up: Top 3 Utilities *********** * Menu: * Invoking asn1Parser:: * Invoking asn1Coding:: * Invoking asn1Decoding::  File: libtasn1.info, Node: Invoking asn1Parser, Next: Invoking asn1Coding, Up: Utilities 3.1 Invoking asn1Parser ======================= 'asn1Parser' reads a single file with ASN.1 definitions and generates a file with an array to use with libtasn1 functions. Usage: asn1Parser [options] file Options: -h : shows the help message. -v : shows version information and exit. -c : checks the syntax only. -o file : output file. -n name : array name.  File: libtasn1.info, Node: Invoking asn1Coding, Next: Invoking asn1Decoding, Prev: Invoking asn1Parser, Up: Utilities 3.2 Invoking asn1Coding ======================= 'asn1Coding' generates a DER encoding from a file with ASN.1 definitions and another one with assignments. The file with assignments must have this syntax: InstanceName Asn1Definition nameString value nameString value ... To specify the field of a 'CHOICE' to be used, specify its name as a value to the 'CHOICE' element itself. Use '''' to denote the root element itself. (as in the example below.) The output file is a binary file with the DER encoding. Usage: asn1Coding [options] file1 file2 file1 : file with ASN1 definitions. file2 : file with assignments. Options: -h : shows the help message. -v : shows version information and exit. -c : checks the syntax only. -o file : output file. For example, consider an ASN.1 definitions file as follows: MYPKIX1 { } DEFINITIONS IMPLICIT TAGS ::= BEGIN OtherStruct := SEQUENCE { x INTEGER, y CHOICE { y1 INTEGER, y2 OCTET STRING }, } Dss-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER, other OtherStruct z INTEGER OPTIONAL, } END And a assignments file as follows: dp MYPKIX1.Dss-Sig-Value r 42 s 47 other.x 66 other.y y1 other.y.y1 15 z (NULL) Running the command below will generate a 'assign.out' file, containing the DER encoding of 'PKIX1.Dss-Sig-Value'. $ asn1Coding pkix.asn assign.asn1 If the root element is of the 'CHOICE' type, the assignment file may be like (using the types defined in 'pkix.asn'): elt PKIX1Implicit88.GeneralName '' dNSName dNSName example.org  File: libtasn1.info, Node: Invoking asn1Decoding, Prev: Invoking asn1Coding, Up: Utilities 3.3 Invoking asn1Decoding ========================= 'asn1Decoding' generates an ASN.1 structure from a file with ASN.1 definitions and a binary file with a DER encoding. Usage: asn1Decoding [options] file1 file2 type file1 : file with ASN1 definitions. file2 : binary file with a DER encoding. type : ASN1 definition name. Options: -h : shows the help message. -v : shows version information and exit. -o file : output file. For example, after generating the 'assign.out' file from the example section of the 'asn1Coding' command above, the following invocation will decode the DER data. $ asn1Decoding pkix.asn assign.out PKIX1.Dss-Sig-Value  File: libtasn1.info, Node: Function reference, Next: Copying Information, Prev: Utilities, Up: Top 4 Function reference ******************** * Menu: * ASN.1 schema functions:: * ASN.1 field functions:: * DER functions:: * Error handling functions:: * Auxilliary functions::  File: libtasn1.info, Node: ASN.1 schema functions, Next: ASN.1 field functions, Up: Function reference 4.1 ASN.1 schema functions ========================== asn1_parser2tree ---------------- -- Function: int asn1_parser2tree (const char * FILE, asn1_node * DEFINITIONS, char * ERROR_DESC) FILE: specify the path and the name of file that contains ASN.1 declarations. DEFINITIONS: return the pointer to the structure created from "file" ASN.1 declarations. ERROR_DESC: return the error description or an empty string if success. Function used to start the parse algorithm. Creates the structures needed to manage the definitions included in 'file' file. *Returns:* 'ASN1_SUCCESS' if the file has a correct syntax and every identifier is known, 'ASN1_ELEMENT_NOT_EMPTY' if 'definitions' not 'NULL' , 'ASN1_FILE_NOT_FOUND' if an error occurred while opening 'file' , 'ASN1_SYNTAX_ERROR' if the syntax is not correct, 'ASN1_IDENTIFIER_NOT_FOUND' if in the file there is an identifier that is not defined, 'ASN1_NAME_TOO_LONG' if in the file there is an identifier with more than 'ASN1_MAX_NAME_SIZE' characters. asn1_parser2array ----------------- -- Function: int asn1_parser2array (const char * INPUTFILENAME, const char * OUTPUTFILENAME, const char * VECTORNAME, char * ERROR_DESC) INPUTFILENAME: specify the path and the name of file that contains ASN.1 declarations. OUTPUTFILENAME: specify the path and the name of file that will contain the C vector definition. VECTORNAME: specify the name of the C vector. ERROR_DESC: return the error description or an empty string if success. Function that generates a C structure from an ASN1 file. Creates a file containing a C vector to use to manage the definitions included in 'inputFileName' file. If 'inputFileName' is "/aa/bb/xx.yy" and 'outputFileName' is 'NULL' , the file created is "/aa/bb/xx_asn1_tab.c". If 'vectorName' is 'NULL' the vector name will be "xx_asn1_tab". *Returns:* 'ASN1_SUCCESS' if the file has a correct syntax and every identifier is known, 'ASN1_FILE_NOT_FOUND' if an error occurred while opening 'inputFileName' , 'ASN1_SYNTAX_ERROR' if the syntax is not correct, 'ASN1_IDENTIFIER_NOT_FOUND' if in the file there is an identifier that is not defined, 'ASN1_NAME_TOO_LONG' if in the file there is an identifier with more than 'ASN1_MAX_NAME_SIZE' characters.  File: libtasn1.info, Node: ASN.1 field functions, Next: DER functions, Prev: ASN.1 schema functions, Up: Function reference 4.2 ASN.1 field functions ========================= asn1_array2tree --------------- -- Function: int asn1_array2tree (const asn1_static_node * ARRAY, asn1_node * DEFINITIONS, char * ERRORDESCRIPTION) ARRAY: specify the array that contains ASN.1 declarations DEFINITIONS: return the pointer to the structure created by *ARRAY ASN.1 declarations ERRORDESCRIPTION: return the error description. Creates the structures needed to manage the ASN.1 definitions. 'array' is a vector created by 'asn1_parser2array()' . *Returns:* 'ASN1_SUCCESS' if structure was created correctly, 'ASN1_ELEMENT_NOT_EMPTY' if * 'definitions' not NULL, 'ASN1_IDENTIFIER_NOT_FOUND' if in the file there is an identifier that is not defined (see 'errorDescription' for more information), 'ASN1_ARRAY_ERROR' if the array pointed by 'array' is wrong. asn1_delete_structure --------------------- -- Function: int asn1_delete_structure (asn1_node * STRUCTURE) STRUCTURE: pointer to the structure that you want to delete. Deletes the structure * 'structure' . At the end, * 'structure' is set to NULL. *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' if * 'structure' was NULL. asn1_delete_structure2 ---------------------- -- Function: int asn1_delete_structure2 (asn1_node * STRUCTURE, unsigned int FLAGS) STRUCTURE: pointer to the structure that you want to delete. FLAGS: additional flags (see 'ASN1_DELETE_FLAG' ) Deletes the structure * 'structure' . At the end, * 'structure' is set to NULL. *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' if * 'structure' was NULL. asn1_delete_element ------------------- -- Function: int asn1_delete_element (asn1_node STRUCTURE, const char * ELEMENT_NAME) STRUCTURE: pointer to the structure that contains the element you want to delete. ELEMENT_NAME: element's name you want to delete. Deletes the element named * 'element_name' inside * 'structure' . *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' if the 'element_name' was not found. asn1_create_element ------------------- -- Function: int asn1_create_element (asn1_node_const DEFINITIONS, const char * SOURCE_NAME, asn1_node * ELEMENT) DEFINITIONS: pointer to the structure returned by "parser_asn1" function SOURCE_NAME: the name of the type of the new structure (must be inside p_structure). ELEMENT: pointer to the structure created. Creates a structure of type 'source_name' . Example using "pkix.asn": rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); *Returns:* 'ASN1_SUCCESS' if creation OK, 'ASN1_ELEMENT_NOT_FOUND' if 'source_name' is not known. asn1_print_structure -------------------- -- Function: void asn1_print_structure (FILE * OUT, asn1_node_const STRUCTURE, const char * NAME, int MODE) OUT: pointer to the output file (e.g. stdout). STRUCTURE: pointer to the structure that you want to visit. NAME: an element of the structure MODE: specify how much of the structure to print, can be 'ASN1_PRINT_NAME' , 'ASN1_PRINT_NAME_TYPE' , 'ASN1_PRINT_NAME_TYPE_VALUE' , or 'ASN1_PRINT_ALL' . Prints on the 'out' file descriptor the structure's tree starting from the 'name' element inside the structure 'structure' . asn1_number_of_elements ----------------------- -- Function: int asn1_number_of_elements (asn1_node_const ELEMENT, const char * NAME, int * NUM) ELEMENT: pointer to the root of an ASN1 structure. NAME: the name of a sub-structure of ROOT. NUM: pointer to an integer where the result will be stored Counts the number of elements of a sub-structure called NAME with names equal to "?1","?2", ... *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not known, 'ASN1_GENERIC_ERROR' if pointer 'num' is 'NULL' . asn1_find_structure_from_oid ---------------------------- -- Function: const char * asn1_find_structure_from_oid (asn1_node_const DEFINITIONS, const char * OIDVALUE) DEFINITIONS: ASN1 definitions OIDVALUE: value of the OID to search (e.g. "1.2.3.4"). Search the structure that is defined just after an OID definition. *Returns:* 'NULL' when 'oidValue' not found, otherwise the pointer to a constant string that contains the element name defined just after the OID. asn1_copy_node -------------- -- Function: int asn1_copy_node (asn1_node DST, const char * DST_NAME, asn1_node_const SRC, const char * SRC_NAME) DST: Destination asn1 node. DST_NAME: Field name in destination node. SRC: Source asn1 node. SRC_NAME: Field name in source node. Create a deep copy of a asn1_node variable. That function requires 'dst' to be expanded using 'asn1_create_element()' . *Returns:* Return 'ASN1_SUCCESS' on success. asn1_dup_node ------------- -- Function: asn1_node asn1_dup_node (asn1_node_const SRC, const char * SRC_NAME) SRC: Source asn1 node. SRC_NAME: Field name in source node. Create a deep copy of a asn1_node variable. This function will return an exact copy of the provided structure. *Returns:* Return 'NULL' on failure. asn1_write_value ---------------- -- Function: int asn1_write_value (asn1_node NODE_ROOT, const char * NAME, const void * IVALUE, int LEN) NODE_ROOT: pointer to a structure NAME: the name of the element inside the structure that you want to set. IVALUE: vector used to specify the value to set. If len is >0, VALUE must be a two's complement form integer. if len=0 *VALUE must be a null terminated string with an integer value. LEN: number of bytes of *value to use to set the value: value[0]..value[len-1] or 0 if value is a null terminated string Set the value of one element inside a structure. If an element is OPTIONAL and you want to delete it, you must use the value=NULL and len=0. Using "pkix.asn": result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", NULL, 0); Description for each type: *INTEGER:* VALUE must contain a two's complement form integer. value[0]=0xFF , len=1 -> integer=-1. value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1. value[0]=0x01 , len=1 -> integer= 1. value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. value="123" , len=0 -> integer= 123. *ENUMERATED:* As INTEGER (but only with not negative numbers). *BOOLEAN:* VALUE must be the null terminated string "TRUE" or "FALSE" and LEN != 0. value="TRUE" , len=1 -> boolean=TRUE. value="FALSE" , len=1 -> boolean=FALSE. OBJECT IDENTIFIER: VALUE must be a null terminated string with each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha. *UTCTime:* VALUE must be a null terminated string in one of these formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", "YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss-hh'mm'", "YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm-hh'mm'". LEN != 0. value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 at 12h 00m Greenwich Mean Time *GeneralizedTime:* VALUE must be in one of this format: "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s-hh'mm'", "YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm-hh'mm'" where ss.s indicates the seconds with any precision like "10.1" or "01.02". LEN != 0 value="2001010112001.12-0700" , len=1 -> time=Jannuary 1st, 2001 at 12h 00m 01.12s Pacific Daylight Time OCTET STRING: VALUE contains the octet string and LEN is the number of octets. value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> three bytes octet string *GeneralString:* VALUE contains the generalstring and LEN is the number of octets. value="$\backslash$x01$\backslash$x02$\backslash$x03" , len=3 -> three bytes generalstring BIT STRING: VALUE contains the bit string organized by bytes and LEN is the number of bits. value="$\backslash$xCF" , len=6 -> bit string="110011" (six bits) *CHOICE:* if NAME indicates a choice type, VALUE must specify one of the alternatives with a null terminated string. LEN != 0. Using "pkix.asn"\: result=asn1_write_value(cert, "certificate1.tbsCertificate.subject", "rdnSequence", 1); *ANY:* VALUE indicates the der encoding of a structure. LEN != 0. SEQUENCE OF: VALUE must be the null terminated string "NEW" and LEN != 0. With this instruction another element is appended in the sequence. The name of this element will be "?1" if it's the first one, "?2" for the second and so on. Using "pkix.asn"\: result=asn1_write_value(cert, "certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); SET OF: the same as SEQUENCE OF. Using "pkix.asn": result=asn1_write_value(cert, "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); *Returns:* 'ASN1_SUCCESS' if the value was set, 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not a valid element, and 'ASN1_VALUE_NOT_VALID' if 'ivalue' has a wrong format. asn1_read_value --------------- -- Function: int asn1_read_value (asn1_node_const ROOT, const char * NAME, void * IVALUE, int * LEN) ROOT: pointer to a structure. NAME: the name of the element inside a structure that you want to read. IVALUE: vector that will contain the element's content, must be a pointer to memory cells already allocated (may be 'NULL' ). LEN: number of bytes of *value: value[0]..value[len-1]. Initialy holds the sizeof value. Returns the value of one element inside a structure. If an element is OPTIONAL and this returns 'ASN1_ELEMENT_NOT_FOUND' , it means that this element wasn't present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the 'root' provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node. Note that there can be valid values with length zero. In these case this function will succeed and 'len' will be zero. *INTEGER:* VALUE will contain a two's complement form integer. integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , len=1. *ENUMERATED:* As INTEGER (but only with not negative numbers). *BOOLEAN:* VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6. OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1"). LEN = strlen(VALUE)+1 *UTCTime:* VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". LEN=strlen(VALUE)+1. *GeneralizedTime:* VALUE will be a null terminated string in the same format used to set the value. OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets. *GeneralString:* VALUE will contain the generalstring and LEN will be the number of octets. BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits. *CHOICE:* If NAME indicates a choice type, VALUE will specify the alternative selected. *ANY:* If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used. *Returns:* 'ASN1_SUCCESS' if value is returned, 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not a valid element, 'ASN1_VALUE_NOT_FOUND' if there isn't any value for the element selected, and 'ASN1_MEM_ERROR' if The value vector isn't big enough to store the result, and in this case 'len' will contain the number of bytes needed. On the occasion that the stored data are of zero-length this function may return 'ASN1_SUCCESS' even if the provided 'len' is zero. asn1_read_value_type -------------------- -- Function: int asn1_read_value_type (asn1_node_const ROOT, const char * NAME, void * IVALUE, int * LEN, unsigned int * ETYPE) ROOT: pointer to a structure. NAME: the name of the element inside a structure that you want to read. IVALUE: vector that will contain the element's content, must be a pointer to memory cells already allocated (may be 'NULL' ). LEN: number of bytes of *value: value[0]..value[len-1]. Initialy holds the sizeof value. ETYPE: The type of the value read (ASN1_ETYPE) Returns the type and value of one element inside a structure. If an element is OPTIONAL and this returns 'ASN1_ELEMENT_NOT_FOUND' , it means that this element wasn't present in the der encoding that created the structure. The first element of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and so on. If the 'root' provided is a node to specific sequence element, then the keyword "?CURRENT" is also acceptable and indicates the current sequence element of this node. Note that there can be valid values with length zero. In these case this function will succeed and 'len' will be zero. *INTEGER:* VALUE will contain a two's complement form integer. integer=-1 -> value[0]=0xFF , len=1. integer=1 -> value[0]=0x01 , len=1. *ENUMERATED:* As INTEGER (but only with not negative numbers). *BOOLEAN:* VALUE will be the null terminated string "TRUE" or "FALSE" and LEN=5 or LEN=6. OBJECT IDENTIFIER: VALUE will be a null terminated string with each number separated by a dot (i.e. "1.2.3.543.1"). LEN = strlen(VALUE)+1 *UTCTime:* VALUE will be a null terminated string in one of these formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". LEN=strlen(VALUE)+1. *GeneralizedTime:* VALUE will be a null terminated string in the same format used to set the value. OCTET STRING: VALUE will contain the octet string and LEN will be the number of octets. *GeneralString:* VALUE will contain the generalstring and LEN will be the number of octets. BIT STRING: VALUE will contain the bit string organized by bytes and LEN will be the number of bits. *CHOICE:* If NAME indicates a choice type, VALUE will specify the alternative selected. *ANY:* If NAME indicates an any type, VALUE will indicate the DER encoding of the structure actually used. *Returns:* 'ASN1_SUCCESS' if value is returned, 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not a valid element, 'ASN1_VALUE_NOT_FOUND' if there isn't any value for the element selected, and 'ASN1_MEM_ERROR' if The value vector isn't big enough to store the result, and in this case 'len' will contain the number of bytes needed. On the occasion that the stored data are of zero-length this function may return 'ASN1_SUCCESS' even if the provided 'len' is zero. asn1_read_tag ------------- -- Function: int asn1_read_tag (asn1_node_const ROOT, const char * NAME, int * TAGVALUE, int * CLASSVALUE) ROOT: pointer to a structure NAME: the name of the element inside a structure. TAGVALUE: variable that will contain the TAG value. CLASSVALUE: variable that will specify the TAG type. Returns the TAG and the CLASS of one element inside a structure. CLASS can have one of these constants: 'ASN1_CLASS_APPLICATION' , 'ASN1_CLASS_UNIVERSAL' , 'ASN1_CLASS_PRIVATE' or 'ASN1_CLASS_CONTEXT_SPECIFIC' . *Returns:* 'ASN1_SUCCESS' if successful, 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not a valid element. asn1_read_node_value -------------------- -- Function: int asn1_read_node_value (asn1_node_const NODE, asn1_data_node_st * DATA) NODE: pointer to a node. DATA: a point to a asn1_data_node_st Returns the value a data node inside a asn1_node structure. The data returned should be handled as constant values. *Returns:* 'ASN1_SUCCESS' if the node exists.  File: libtasn1.info, Node: DER functions, Next: Error handling functions, Prev: ASN.1 field functions, Up: Function reference 4.3 DER functions ================= asn1_length_der --------------- -- Function: void asn1_length_der (unsigned long int LEN, unsigned char * DER, int * DER_LEN) LEN: value to convert. DER: buffer to hold the returned encoding (may be 'NULL' ). DER_LEN: number of meaningful bytes of ANS (der[0]..der[der_len-1]). Creates the DER encoding of the provided length value. The 'der' buffer must have enough room for the output. The maximum length this function will encode is 'ASN1_MAX_LENGTH_SIZE' . To know the size of the DER encoding use a 'NULL' value for 'der' . asn1_octet_der -------------- -- Function: void asn1_octet_der (const unsigned char * STR, int STR_LEN, unsigned char * DER, int * DER_LEN) STR: the input data. STR_LEN: STR length (str[0]..str[*str_len-1]). DER: encoded string returned. DER_LEN: number of meaningful bytes of DER (der[0]..der[der_len-1]). Creates a length-value DER encoding for the input data. The DER encoding of the input data will be placed in the 'der' variable. Note that the OCTET STRING tag is not included in the output. This function does not return any value because it is expected that 'der_len' will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using 'asn1_length_der()' . asn1_encode_simple_der ---------------------- -- Function: int asn1_encode_simple_der (unsigned int ETYPE, const unsigned char * STR, unsigned int STR_LEN, unsigned char * TL, unsigned int * TL_LEN) ETYPE: The type of the string to be encoded (ASN1_ETYPE_) STR: the string data. STR_LEN: the string length TL: the encoded tag and length TL_LEN: the bytes of the 'tl' field Creates the DER encoding for various simple ASN.1 types like strings etc. It stores the tag and length in 'tl' , which should have space for at least 'ASN1_MAX_TL_SIZE' bytes. Initially 'tl_len' should contain the size of 'tl' . The complete DER encoding should consist of the value in 'tl' appended with the provided 'str' . *Returns:* 'ASN1_SUCCESS' if successful or an error value. asn1_object_id_der ------------------ -- Function: int asn1_object_id_der (const char * STR, unsigned char * DER, int * DER_LEN, unsigned FLAGS) STR: An object identifier in numeric, dot format. DER: buffer to hold the returned encoding (may be 'NULL' ). DER_LEN: initially the size of 'der' ; will hold the final size. FLAGS: must be zero Creates the DER encoding of the provided object identifier. *Returns:* 'ASN1_SUCCESS' if DER encoding was OK, 'ASN1_VALUE_NOT_VALID' if 'str' is not a valid OID, 'ASN1_MEM_ERROR' if the 'der' vector isn't big enough and in this case 'der_len' will contain the length needed. asn1_bit_der ------------ -- Function: void asn1_bit_der (const unsigned char * STR, int BIT_LEN, unsigned char * DER, int * DER_LEN) STR: BIT string. BIT_LEN: number of meaningful bits in STR. DER: string returned. DER_LEN: number of meaningful bytes of DER (der[0]..der[ans_len-1]). Creates a length-value DER encoding for the input data as it would have been for a BIT STRING. The DER encoded data will be copied in 'der' . Note that the BIT STRING tag is not included in the output. This function does not return any value because it is expected that 'der_len' will contain enough bytes to store the string plus the DER encoding. The DER encoding size can be obtained using 'asn1_length_der()' . asn1_der_coding --------------- -- Function: int asn1_der_coding (asn1_node_const ELEMENT, const char * NAME, void * IDER, int * LEN, char * ERRORDESCRIPTION) ELEMENT: pointer to an ASN1 element NAME: the name of the structure you want to encode (it must be inside *POINTER). IDER: vector that will contain the DER encoding. DER must be a pointer to memory cells already allocated. LEN: number of bytes of * 'ider' : 'ider' [0].. 'ider' [len-1], Initialy holds the sizeof of der vector. ERRORDESCRIPTION: return the error description or an empty string if success. Creates the DER encoding for the NAME structure (inside *POINTER structure). *Returns:* 'ASN1_SUCCESS' if DER encoding OK, 'ASN1_ELEMENT_NOT_FOUND' if 'name' is not a valid element, 'ASN1_VALUE_NOT_FOUND' if there is an element without a value, 'ASN1_MEM_ERROR' if the 'ider' vector isn't big enough and in this case 'len' will contain the length needed. asn1_get_length_der ------------------- -- Function: long asn1_get_length_der (const unsigned char * DER, int DER_LEN, int * LEN) DER: DER data to decode. DER_LEN: Length of DER data to decode. LEN: Output variable containing the length of the DER length field. Extract a length field from DER data. *Returns:* Return the decoded length value, or -1 on indefinite length, or -2 when the value was too big to fit in a int, or -4 when the decoded length value plus 'len' would exceed 'der_len' . asn1_get_tag_der ---------------- -- Function: int asn1_get_tag_der (const unsigned char * DER, int DER_LEN, unsigned char * CLS, int * LEN, unsigned long * TAG) DER: DER data to decode. DER_LEN: Length of DER data to decode. CLS: Output variable containing decoded class. LEN: Output variable containing the length of the DER TAG data. TAG: Output variable containing the decoded tag (may be 'NULL' ). Decode the class and TAG from DER code. *Returns:* Returns 'ASN1_SUCCESS' on success, or an error. asn1_get_length_ber ------------------- -- Function: long asn1_get_length_ber (const unsigned char * BER, int BER_LEN, int * LEN) BER: BER data to decode. BER_LEN: Length of BER data to decode. LEN: Output variable containing the length of the BER length field. Extract a length field from BER data. The difference to 'asn1_get_length_der()' is that this function will return a length even if the value has indefinite encoding. *Returns:* Return the decoded length value, or negative value when the value was too big. *Since:* 2.0 asn1_get_octet_der ------------------ -- Function: int asn1_get_octet_der (const unsigned char * DER, int DER_LEN, int * RET_LEN, unsigned char * STR, int STR_SIZE, int * STR_LEN) DER: DER data to decode containing the OCTET SEQUENCE. DER_LEN: The length of the 'der' data to decode. RET_LEN: Output variable containing the encoded length of the DER data. STR: Pre-allocated output buffer to put decoded OCTET SEQUENCE in. STR_SIZE: Length of pre-allocated output buffer. STR_LEN: Output variable containing the length of the contents of the OCTET SEQUENCE. Extract an OCTET SEQUENCE from DER data. Note that this function expects the DER data past the tag field, i.e., the length and content octets. *Returns:* Returns 'ASN1_SUCCESS' on success, or an error. asn1_get_object_id_der ---------------------- -- Function: int asn1_get_object_id_der (const unsigned char * DER, int DER_LEN, int * RET_LEN, char * STR, int STR_SIZE) DER: DER data to decode containing the OBJECT IDENTIFIER DER_LEN: Length of DER data to decode. RET_LEN: Output variable containing the length of the DER data. STR: Pre-allocated output buffer to put the textual object id in. STR_SIZE: Length of pre-allocated output buffer. Converts a DER encoded object identifier to its textual form. This function expects the DER object identifier without the tag. *Returns:* 'ASN1_SUCCESS' on success, or an error. asn1_get_bit_der ---------------- -- Function: int asn1_get_bit_der (const unsigned char * DER, int DER_LEN, int * RET_LEN, unsigned char * STR, int STR_SIZE, int * BIT_LEN) DER: DER data to decode containing the BIT SEQUENCE. DER_LEN: Length of DER data to decode. RET_LEN: Output variable containing the length of the DER data. STR: Pre-allocated output buffer to put decoded BIT SEQUENCE in. STR_SIZE: Length of pre-allocated output buffer. BIT_LEN: Output variable containing the size of the BIT SEQUENCE. Extract a BIT SEQUENCE from DER data. *Returns:* 'ASN1_SUCCESS' on success, or an error. asn1_der_decoding2 ------------------ -- Function: int asn1_der_decoding2 (asn1_node * ELEMENT, const void * IDER, int * MAX_IDER_LEN, unsigned int FLAGS, char * ERRORDESCRIPTION) ELEMENT: pointer to an ASN1 structure. IDER: vector that contains the DER encoding. MAX_IDER_LEN: pointer to an integer giving the information about the maximal number of bytes occupied by * 'ider' . The real size of the DER encoding is returned through this pointer. FLAGS: flags controlling the behaviour of the function. ERRORDESCRIPTION: null-terminated string contains details when an error occurred. Fill the structure * 'element' with values of a DER encoding string. The structure must just be created with function 'asn1_create_element()' . If 'ASN1_DECODE_FLAG_ALLOW_PADDING' flag is set then the function will ignore padding after the decoded DER data. Upon a successful return the value of * 'max_ider_len' will be set to the number of bytes decoded. If 'ASN1_DECODE_FLAG_STRICT_DER' flag is set then the function will not decode any BER-encoded elements. *Returns:* 'ASN1_SUCCESS' if DER encoding OK, 'ASN1_ELEMENT_NOT_FOUND' if 'ELEMENT' is 'NULL' , and 'ASN1_TAG_ERROR' or 'ASN1_DER_ERROR' if the der encoding doesn't match the structure name (* 'ELEMENT' deleted). asn1_der_decoding ----------------- -- Function: int asn1_der_decoding (asn1_node * ELEMENT, const void * IDER, int IDER_LEN, char * ERRORDESCRIPTION) ELEMENT: pointer to an ASN1 structure. IDER: vector that contains the DER encoding. IDER_LEN: number of bytes of * 'ider' : 'ider' [0].. 'ider' [len-1]. ERRORDESCRIPTION: null-terminated string contains details when an error occurred. Fill the structure * 'element' with values of a DER encoding string. The structure must just be created with function 'asn1_create_element()' . Note that the * 'element' variable is provided as a pointer for historical reasons. *Returns:* 'ASN1_SUCCESS' if DER encoding OK, 'ASN1_ELEMENT_NOT_FOUND' if 'ELEMENT' is 'NULL' , and 'ASN1_TAG_ERROR' or 'ASN1_DER_ERROR' if the der encoding doesn't match the structure name (* 'ELEMENT' deleted). asn1_der_decoding_element ------------------------- -- Function: int asn1_der_decoding_element (asn1_node * STRUCTURE, const char * ELEMENTNAME, const void * IDER, int LEN, char * ERRORDESCRIPTION) STRUCTURE: pointer to an ASN1 structure ELEMENTNAME: name of the element to fill IDER: vector that contains the DER encoding of the whole structure. LEN: number of bytes of *der: der[0]..der[len-1] ERRORDESCRIPTION: null-terminated string contains details when an error occurred. Fill the element named 'ELEMENTNAME' with values of a DER encoding string. The structure must just be created with function 'asn1_create_element()' . The DER vector must contain the encoding string of the whole 'STRUCTURE' . If an error occurs during the decoding procedure, the * 'STRUCTURE' is deleted and set equal to 'NULL' . This function is deprecated and may just be an alias to asn1_der_decoding in future versions. Use 'asn1_der_decoding()' instead. *Returns:* 'ASN1_SUCCESS' if DER encoding OK, 'ASN1_ELEMENT_NOT_FOUND' if ELEMENT is 'NULL' or 'elementName' == NULL, and 'ASN1_TAG_ERROR' or 'ASN1_DER_ERROR' if the der encoding doesn't match the structure 'structure' (*ELEMENT deleted). asn1_der_decoding_startEnd -------------------------- -- Function: int asn1_der_decoding_startEnd (asn1_node ELEMENT, const void * IDER, int IDER_LEN, const char * NAME_ELEMENT, int * START, int * END) ELEMENT: pointer to an ASN1 element IDER: vector that contains the DER encoding. IDER_LEN: number of bytes of * 'ider' : 'ider' [0].. 'ider' [len-1] NAME_ELEMENT: an element of NAME structure. START: the position of the first byte of NAME_ELEMENT decoding ( 'ider' [*start]) END: the position of the last byte of NAME_ELEMENT decoding ( 'ider' [*end]) Find the start and end point of an element in a DER encoding string. I mean that if you have a der encoding and you have already used the function 'asn1_der_decoding()' to fill a structure, it may happen that you want to find the piece of string concerning an element of the structure. One example is the sequence "tbsCertificate" inside an X509 certificate. Note that since libtasn1 3.7 the 'ider' and 'ider_len' parameters can be omitted, if the element is already decoded using 'asn1_der_decoding()' . *Returns:* 'ASN1_SUCCESS' if DER encoding OK, 'ASN1_ELEMENT_NOT_FOUND' if ELEMENT is 'asn1_node' EMPTY or 'name_element' is not a valid element, 'ASN1_TAG_ERROR' or 'ASN1_DER_ERROR' if the der encoding doesn't match the structure ELEMENT. asn1_expand_any_defined_by -------------------------- -- Function: int asn1_expand_any_defined_by (asn1_node_const DEFINITIONS, asn1_node * ELEMENT) DEFINITIONS: ASN1 definitions ELEMENT: pointer to an ASN1 structure Expands every "ANY DEFINED BY" element of a structure created from a DER decoding process (asn1_der_decoding function). The element ANY must be defined by an OBJECT IDENTIFIER. The type used to expand the element ANY is the first one following the definition of the actual value of the OBJECT IDENTIFIER. *Returns:* 'ASN1_SUCCESS' if Substitution OK, 'ASN1_ERROR_TYPE_ANY' if some "ANY DEFINED BY" element couldn't be expanded due to a problem in OBJECT_ID -> TYPE association, or other error codes depending on DER decoding. asn1_expand_octet_string ------------------------ -- Function: int asn1_expand_octet_string (asn1_node_const DEFINITIONS, asn1_node * ELEMENT, const char * OCTETNAME, const char * OBJECTNAME) DEFINITIONS: ASN1 definitions ELEMENT: pointer to an ASN1 structure OCTETNAME: name of the OCTECT STRING field to expand. OBJECTNAME: name of the OBJECT IDENTIFIER field to use to define the type for expansion. Expands an "OCTET STRING" element of a structure created from a DER decoding process (the 'asn1_der_decoding()' function). The type used for expansion is the first one following the definition of the actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. *Returns:* 'ASN1_SUCCESS' if substitution OK, 'ASN1_ELEMENT_NOT_FOUND' if 'objectName' or 'octetName' are not correct, 'ASN1_VALUE_NOT_VALID' if it wasn't possible to find the type to use for expansion, or other errors depending on DER decoding. asn1_decode_simple_der ---------------------- -- Function: int asn1_decode_simple_der (unsigned int ETYPE, const unsigned char * DER, unsigned int _DER_LEN, const unsigned char ** STR, unsigned int * STR_LEN) ETYPE: The type of the string to be encoded (ASN1_ETYPE_) DER: the encoded string _DER_LEN: the bytes of the encoded string STR: a pointer to the data STR_LEN: the length of the data Decodes a simple DER encoded type (e.g. a string, which is not constructed). The output is a pointer inside the 'der' . *Returns:* 'ASN1_SUCCESS' if successful or an error value. asn1_decode_simple_ber ---------------------- -- Function: int asn1_decode_simple_ber (unsigned int ETYPE, const unsigned char * DER, unsigned int _DER_LEN, unsigned char ** STR, unsigned int * STR_LEN, unsigned int * BER_LEN) ETYPE: The type of the string to be encoded (ASN1_ETYPE_) DER: the encoded string _DER_LEN: the bytes of the encoded string STR: a pointer to the data STR_LEN: the length of the data BER_LEN: the total length occupied by BER (may be 'NULL' ) Decodes a BER encoded type. The output is an allocated value of the data. This decodes BER STRINGS only. Other types are decoded as DER. *Returns:* 'ASN1_SUCCESS' if successful or an error value.  File: libtasn1.info, Node: Error handling functions, Next: Auxilliary functions, Prev: DER functions, Up: Function reference 4.4 Error handling functions ============================ asn1_perror ----------- -- Function: void asn1_perror (int ERROR) ERROR: is an error returned by a libtasn1 function. Prints a string to stderr with a description of an error. This function is like 'perror()' . The only difference is that it accepts an error returned by a libtasn1 function. *Since:* 1.6 asn1_strerror ------------- -- Function: const char * asn1_strerror (int ERROR) ERROR: is an error returned by a libtasn1 function. Returns a string with a description of an error. This function is similar to strerror. The only difference is that it accepts an error (number) returned by a libtasn1 function. *Returns:* Pointer to static zero-terminated string describing error code. *Since:* 1.6  File: libtasn1.info, Node: Auxilliary functions, Prev: Error handling functions, Up: Function reference 4.5 Auxilliary functions ======================== asn1_find_node -------------- -- Function: asn1_node asn1_find_node (asn1_node_const POINTER, const char * NAME) POINTER: NODE_ASN element pointer. NAME: null terminated string with the element's name to find. Searches for an element called 'name' starting from 'pointer' . The name is composed by different identifiers separated by dots. When * 'pointer' has a name, the first identifier must be the name of * 'pointer' , otherwise it must be the name of one child of * 'pointer' . *Returns:* the search result, or 'NULL' if not found. asn1_check_version ------------------ -- Function: const char * asn1_check_version (const char * REQ_VERSION) REQ_VERSION: Required version number, or 'NULL' . Check that the version of the library is at minimum the requested one and return the version string; return 'NULL' if the condition is not satisfied. If a 'NULL' is passed to this function, no check is done, but the version string is simply returned. See 'ASN1_VERSION' for a suitable 'req_version' string. *Returns:* Version string of run-time library, or 'NULL' if the run-time library does not meet the required version number.  File: libtasn1.info, Node: Copying Information, Next: Concept Index, Prev: Function reference, Up: Top Appendix A Copying Information ****************************** * Menu: * GNU Free Documentation License:: License for copying this manual.  File: libtasn1.info, Node: GNU Free Documentation License, Up: Copying Information A.1 GNU Free Documentation License ================================== Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: libtasn1.info, Node: Concept Index, Next: Function and Data Index, Prev: Copying Information, Up: Top Concept Index ************* [index] * Menu: * ASN.1 schema: ASN.1 syntax. (line 6) * asn1Coding program: Invoking asn1Coding. (line 6) * asn1Decoding program: Invoking asn1Decoding. (line 6) * asn1Parser program: Invoking asn1Parser. (line 6) * FDL, GNU Free Documentation License: GNU Free Documentation License. (line 6) * Future developments: Future developments. (line 6) * Header file libtasn1.h: Library Notes. (line 6) * Main type asn1_node: Library Notes. (line 8) * Porting: Introduction. (line 32) * Supported ASN.1 types, list of: ASN.1 syntax. (line 38) * threads: Introduction. (line 29)  File: libtasn1.info, Node: Function and Data Index, Prev: Concept Index, Up: Top Function and Data Index *********************** [index] * Menu: * asn1_array2tree: ASN.1 field functions. (line 9) * asn1_bit_der: DER functions. (line 97) * asn1_check_version: Auxilliary functions. (line 26) * asn1_copy_node: ASN.1 field functions. (line 144) * asn1_create_element: ASN.1 field functions. (line 72) * asn1_decode_simple_ber: DER functions. (line 477) * asn1_decode_simple_der: DER functions. (line 456) * asn1_delete_element: ASN.1 field functions. (line 57) * asn1_delete_structure: ASN.1 field functions. (line 30) * asn1_delete_structure2: ASN.1 field functions. (line 42) * asn1_der_coding: DER functions. (line 122) * asn1_der_decoding: DER functions. (line 310) * asn1_der_decoding2: DER functions. (line 274) * asn1_der_decoding_element: DER functions. (line 337) * asn1_der_decoding_startEnd: DER functions. (line 370) * asn1_dup_node: ASN.1 field functions. (line 162) * asn1_encode_simple_der: DER functions. (line 51) * asn1_expand_any_defined_by: DER functions. (line 410) * asn1_expand_octet_string: DER functions. (line 430) * asn1_find_node: Auxilliary functions. (line 9) * asn1_find_structure_from_oid: ASN.1 field functions. (line 129) * asn1_get_bit_der: DER functions. (line 252) * asn1_get_length_ber: DER functions. (line 186) * asn1_get_length_der: DER functions. (line 150) * asn1_get_object_id_der: DER functions. (line 232) * asn1_get_octet_der: DER functions. (line 206) * asn1_get_tag_der: DER functions. (line 167) * asn1_length_der: DER functions. (line 9) * asn1_number_of_elements: ASN.1 field functions. (line 111) * asn1_object_id_der: DER functions. (line 77) * asn1_octet_der: DER functions. (line 27) * asn1_parser2array: ASN.1 schema functions. (line 35) * asn1_parser2tree: ASN.1 schema functions. (line 9) * asn1_perror: Error handling functions. (line 9) * asn1_print_structure: ASN.1 field functions. (line 93) * asn1_read_node_value: ASN.1 field functions. (line 457) * asn1_read_tag: ASN.1 field functions. (line 436) * asn1_read_value: ASN.1 field functions. (line 286) * asn1_read_value_type: ASN.1 field functions. (line 360) * asn1_strerror: Error handling functions. (line 21) * asn1_write_value: ASN.1 field functions. (line 176)  Tag Table: Node: Top866 Node: Introduction1861 Node: ASN.1 structure handling3230 Node: ASN.1 syntax3489 Node: Naming5077 Node: Simple parsing6058 Node: Library Notes6385 Node: Future developments7167 Node: Utilities7466 Node: Invoking asn1Parser7686 Node: Invoking asn1Coding8148 Node: Invoking asn1Decoding9885 Node: Function reference10640 Node: ASN.1 schema functions10924 Ref: asn1_parser2tree11123 Ref: asn1_parser2array12174 Node: ASN.1 field functions13492 Ref: asn1_array2tree13709 Ref: asn1_delete_structure14561 Ref: asn1_delete_structure214935 Ref: asn1_delete_element15390 Ref: asn1_create_element15862 Ref: asn1_print_structure16522 Ref: asn1_number_of_elements17157 Ref: asn1_find_structure_from_oid17758 Ref: asn1_copy_node18242 Ref: asn1_dup_node18734 Ref: asn1_write_value19100 Ref: asn1_read_value23134 Ref: asn1_read_value_type26073 Ref: asn1_read_tag29087 Ref: asn1_read_node_value29800 Node: DER functions30152 Ref: asn1_length_der30355 Ref: asn1_octet_der30941 Ref: asn1_encode_simple_der31749 Ref: asn1_object_id_der32591 Ref: asn1_bit_der33257 Ref: asn1_der_coding34048 Ref: asn1_get_length_der35077 Ref: asn1_get_tag_der35617 Ref: asn1_get_length_ber36179 Ref: asn1_get_octet_der36772 Ref: asn1_get_object_id_der37631 Ref: asn1_get_bit_der38300 Ref: asn1_der_decoding238973 Ref: asn1_der_decoding40371 Ref: asn1_der_decoding_element41310 Ref: asn1_der_decoding_startEnd42617 Ref: asn1_expand_any_defined_by44069 Ref: asn1_expand_octet_string44880 Ref: asn1_decode_simple_der45887 Ref: asn1_decode_simple_ber46529 Node: Error handling functions47230 Ref: asn1_perror47446 Ref: asn1_strerror47787 Node: Auxilliary functions48198 Ref: asn1_find_node48390 Ref: asn1_check_version48991 Node: Copying Information49590 Node: GNU Free Documentation License49843 Node: Concept Index74958 Node: Function and Data Index76064  End Tag Table  Local Variables: coding: utf-8 End: libtasn1-4.16.0/doc/asn1Decoding.10000644000000000000000000000224313615374552013350 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.12. .TH ASN1DECODING "1" "February 2020" "asn1Decoding libtasn1 4.16.0" "User Commands" .SH NAME asn1Decoding \- ASN.1 DER decoder .SH SYNOPSIS .B asn1Decoding [\fI\,OPTION\/\fR] \fI\,DEFINITIONS ENCODED ASN1TYPE\/\fR .SH DESCRIPTION Decodes DER data in ENCODED file, for the ASN1TYPE element described in ASN.1 DEFINITIONS file, and print decoded structures. .TP \fB\-b\fR, \fB\-\-benchmark\fR perform a benchmark on decoding .TP \fB\-s\fR, \fB\-\-strict\fR use strict DER decoding .TP \fB\-t\fR, \fB\-\-no\-time\-strict\fR use strict DER decoding but not in time fields .TP \fB\-h\fR, \fB\-\-help\fR display this help and exit .TP \fB\-v\fR, \fB\-\-version\fR output version information and exit .SH AUTHOR Written by Fabio Fiorina .SH "REPORTING BUGS" Report bugs to help\-libtasn1@gnu.org .SH COPYRIGHT Copyright \(co 2017\-2019 Free Software Foundation, Inc. .SH "SEE ALSO" The full documentation for .B asn1Decoding is maintained as a Texinfo manual. If the .B info and .B asn1Decoding programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. libtasn1-4.16.0/doc/asn1Coding.10000644000000000000000000000213613615374552013040 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.12. .TH ASN1CODING "1" "February 2020" "asn1Coding libtasn1 4.16.0" "User Commands" .SH NAME asn1Coding \- ASN.1 DER encoder .SH SYNOPSIS .B asn1Coding [\fI\,OPTION\/\fR] \fI\,DEFINITIONS ASSIGNMENTS\/\fR .SH DESCRIPTION Generates a DER encoding of ASN.1 DEFINITIONS file and ASSIGNMENTS file with value assignments. .PP Mandatory arguments to long options are mandatory for short options too. .TP \fB\-c\fR, \fB\-\-check\fR checks the syntax only .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,FILE\/\fR output file .TP \fB\-h\fR, \fB\-\-help\fR display this help and exit .TP \fB\-v\fR, \fB\-\-version\fR output version information and exit .SH AUTHOR Written by Fabio Fiorina .SH "REPORTING BUGS" Report bugs to help\-libtasn1@gnu.org .SH COPYRIGHT Copyright \(co 2017\-2019 Free Software Foundation, Inc. .SH "SEE ALSO" The full documentation for .B asn1Coding is maintained as a Texinfo manual. If the .B info and .B asn1Coding programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. libtasn1-4.16.0/doc/texinfo.css0000644000000000000000000000134613246341643013153 00000000000000body { margin: 2%; padding: 0 5%; background: #ffffff; } h1,h2,h3,h4,h5 { font-weight: bold; padding: 5px 5px 5px 5px; background-color: #c2e0ff; color: #336699; } h1 { padding: 2em 2em 2em 5%; color: white; background: #336699; text-align: center; letter-spacing: 3px; } h2 { text-decoration: underline; } pre { margin: 0 5%; padding: 0.5em; } pre.example { border: solid 1px; background: #eeeeff; padding-bottom: 1em; } pre.verbatim { border: solid 1px gray; background: white; padding-bottom: 1em; } div.node { margin: 0 -5% 0 -2%; padding: 0.5em 0.5em; margin-top: 0.5em; margin-bottom: 0.5em; font-weight: bold; } dd, li { padding-top: 0.1em; padding-bottom: 0.1em; } libtasn1-4.16.0/doc/stamp-vti0000644000000000000000000000014413615375101012623 00000000000000@set UPDATED 3 January 2020 @set UPDATED-MONTH January 2020 @set EDITION 4.16.0 @set VERSION 4.16.0 libtasn1-4.16.0/doc/asn1Parser.10000644000000000000000000000223013615374552013064 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.12. .TH ASN1PARSER "1" "February 2020" "asn1Parser libtasn1 4.16.0" "User Commands" .SH NAME asn1Parser \- ASN.1 syntax tree generator for libtasn1 .SH SYNOPSIS .B asn1Parser [\fI\,OPTION\/\fR] \fI\,FILE\/\fR .SH DESCRIPTION Read FILE with ASN.1 definitions and generate a C array that is used with libtasn1 functions. .PP Mandatory arguments to long options are mandatory for short options too. .TP \fB\-c\fR, \fB\-\-check\fR checks the syntax only .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,FILE\/\fR output file .TP \fB\-n\fR, \fB\-\-name\fR=\fI\,NAME\/\fR array name .TP \fB\-h\fR, \fB\-\-help\fR display this help and exit .TP \fB\-v\fR, \fB\-\-version\fR output version information and exit .SH AUTHOR Written by Fabio Fiorina .SH "REPORTING BUGS" Report bugs to help\-libtasn1@gnu.org .SH COPYRIGHT Copyright \(co 2017\-2019 Free Software Foundation, Inc. .SH "SEE ALSO" The full documentation for .B asn1Parser is maintained as a Texinfo manual. If the .B info and .B asn1Parser programs are properly installed at your site, the command .IP .B info libtasn1 .PP should give you access to the complete manual. libtasn1-4.16.0/doc/fdl-1.3.texi0000644000000000000000000005561013246341643012727 00000000000000@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, La@TeX{} input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG@. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.''@: line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: libtasn1-4.16.0/doc/libtasn1.ps0000644000000000000000000171373213615374731013064 00000000000000%!PS-Adobe-2.0 %%Creator: dvips(k) 5.999 Copyright 2019 Radical Eye Software %%Title: libtasn1.dvi %%CreationDate: Sat Feb 1 22:21:13 2020 %%Pages: 36 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR10 CMTT12 CMSY10 CMMI12 CMMI10 CMTT10 CMSS10 %%+ CMSL10 CMSLTT10 CMB10 CMTT9 CMR9 CMMI9 %%DocumentPaperSizes: Letter %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -q -o libtasn1.ps libtasn1.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2020.02.01:2321 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMMI9 %!PS-AdobeFont-1.0: CMMI9 003.002 %%Title: CMMI9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup /UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI9 def /FontBBox {-29 -250 1075 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI9.) readonly def /FullName (CMMI9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBD07FC5A8862A8DB 7E2B90C16137614CDAFB584A32E50C0935109679E31306B8BDD29F1756946A67 7A7C2D9BA6FAB9B20A424AA0E6F4BA64C2801C2FB5A1156CBEED0ACB95F697B8 BC2A6E6AA7EB1F9FD8E3C9B1A16697EE1F0E7400421A7765AB218FC837A49365 82DC6B2C877A7DA84A81E6126EE96DB25C17A207D3020A045DCDAA064360DFFC E3CD50E21ED239D2A6450D04F879A26443ADEB6A20ACC504989876476C7D1A74 91564FEA1F4CC2C8C8FDF666DB537F315AE1886C73CB5B00E67E7B398A6C018E 540EAEE98BB8136C4F044EDD63C33431D2CF9740F051DF365A4045D9D8782112 7BB5D494D9235BA98CF2F30CB119F5A904C32AD04C960C43FC1F5FD8DA7D90D8 93AFB59F3FF4F796481AE2A7548F948FECFC6C127C4D3F159B08F206AE8C296D EE470DB2F879EA79475E029D22D7A8535C09A18689DB0609CC233E5199C02756 972CC9C94D9FCE264DEE5D75C8D651E4E2D1189AD9588CB815722BB5EE3C379A 6F31C2E6AE1AE4CCEB29766190AFA20EA937114978752189F1A9F42B39483149 796FCFA123BA9CCD1D9BE28289660BCAE16C40B5B504058D55CFCBFB4F4E3D94 DDBF39F157E63946534DA81C018B1C01B9F10DDB55E0A5C2B3985ED1977C039B D6755EA42CD09E27751E159C30B93F376DBE61CD3AED34BA36A768F232EB3B80 E3E6B77C4A48D408217818E398B83D995AB6BC871F20991DF57313D6EB0C793D 0F28088EBDB7F38DAF7E01AAB3476EC24D7BB38A9889A7D3038D930FF4289B83 F54A7BE1E2D98A3822098D2E4D067A0D400C20C0B2B4BBD74C13ED1B827490F9 ECF48F8C3994C1C5AAC9CF783BFA4F307528F51EAB55F961808A42ED53F00C97 72A432EAEDCFCFB622389BDA707B6ACC9433B065CF29EBFE93AD14B8ECD5F47F F073F11822C49B8BE924CDFA6348C3A75E9BB9BF3F31C41716B34794B28CDAC9 4DB8B087E180A9B3B17680F73D9C12C8D86A922C948093629F5D7F542ED882A1 692F4F6696865E53E3E2DD43B2D5E8C989CFAA5CA5C4C5999045E170BDE9921C BACD6F2863F5553EAB2BA2D4A9034729EC0C4201DE90DA89B0A27C5A5C974109 4E37BFB3F46B3A506169FB0C68E1CAFC844419A8D261A1FD86A3BB78E33D5FB1 CFC687A5975987CE45155E5FDFAF0CC5FD5568CB1C26212F92E88255F0549F59 41B33125946DE43436BEC00804063FBF03EC796E3361B1C852EC3038D107F80A 9198968265D5488B26D7670B22C2D75EDFFD1B7B4AAFA36DFD94640C9D0E2D20 5BCA18683EFB91834A3939AB8EB60E2F09655BE003582634C52770DA9668C292 2E02929D812EE2B0CC65F020064AD5BDAC5F5693B30508F40ED8E20E87149BD5 8DD41AFF83FD1944804017DC5A04512E593549FFFAE501131CE2FDB65EFD0B8B 33809CBAEE411B3941C241550B9C30DD28088708F1C0CC3125CBEDCD985EAD28 03313741F67DB5744A87B381147D5BA70AE1145C27F794854628D87D6C1ECCA1 749E3465B950175D3C3F40E344297BD92D3190041A4392033A79BEAEAABB8DBE CC14E39612F43721CFAE6F79074429221CA588AA2501DE520A464DE157A03AFE 3C082FAE7628FC0C57FFC61D0330AE6332D20FDBB09BF36848FE05E782D6379F 64F9C82C45402481B0A35989027F9756BF5A79DA2D96E10F39167ADB4305578F 90B509B6891338FA1D67DCFD61804AA6621526B2EE4769589A2646581712AC05 DA6E98D16494F07D612743058F54FEE516BD89A8EC3E03F9D7F905175D3412C8 F7329077FD6EB25213F3CAC94BA0C3363B759401B6EF7548C7D709F3241D030D 4EB46A1AE81863C412BDDAEA6084C37143A4C5E41BC646315B1CD09F934186CF 49D1D8239E363A435307030BD79536B50B723A39DD763DB539F24A10DDA12BD4 E467339D2D6DB177D6FC539FA77D2DE4118EBAC161E928749F7C753ADEF86117 58619F1155C563DF2E11ACA8347908B98113AED58FCD0394150EEC94B7F986EE 88BF7171D208D8F1774B1DD478F0C2958AE372D257E7EDF0F6B5D6059CC4D5D3 B00FCBD2E9CBE79235B9A5A3E943CC27AABB58728C95C7DBD4F4A1F8A4DA99AE 7377B0CC0BFBD454794398AE0D5F7281771FFE87B25A819F36E692286A42D776 01794A43CA9BB30FB8FFDAAF014F909A369E34C2F6C75B7D4EB9DB0580E33F46 19654443AFF8384B95600B86FF8E41FEFD032355626D60C7507C058EF832DF41 194B48A36F11082D1DCF4723E21401E0C7447AABFAB4639B26E3D2730E348F55 53EBFF39CDD03E06E2FA5FB379603C879EDB7E1A10F89695C9C47DEEE52BE0A3 F446F187AB9D7E93E6F9387F21129034F36DF40605D28FD526AF82CA9D232BE4 412567F06B38ECCD496EF40A7B243E46C9FEBA4F1BF4B1ECA029C5EC239353D6 C0B100BF7E7DB33BD1277DE104F15AA19F37340A777741AD1AD693BC76DA48CC C6F83CD84591ECFEE375979972B0FAC4C10B625E4BFB261B9FFFA83C31DA0108 4FFB6377466E9739E0EB64424BD9FC7239C7DD834EC6788A0F97FE714AF92831 E1BA36A8A9E24739F1DC82DC26CC3CE28C210AA7C569B19E1784D663A0CA4E81 AFF43E86D6F5F63778847700072CEB77A4EB946DC1F23DBC00BCE773203F76DF 00F0B085F31420672974DDC642D885E95BA6BBE43E1CA8ABF464D9881CDECC7A E98E31B9754C9B72A8BD5CF6D4D214DBC3BA7A0CDF6635953F5AC1E7639C4A91 C7AECE4C75CA3389C348F656FC2CC96C84C85A926237B6504DB51937C9CFCDAC B75C31ED570D180757884E27757783DB2D5F35ECC48C496CDA342D49AA947BF8 2FDAD2F19DFE8CD1C76A8FA08F33681F3E12E229D7DAB45BE3A3F258B5ED4980 F15340CF20D965252843E026803E8AEE736EC41CCA82167401977AB719AA2F50 0B791EEAA82027B3C712D2EB9D14BF8F94FBDE2227609BCAC41EC08DE2BAC023 28352F913F7DF08D4E1C66E83F764578B22B4EB7191E852B91ADCCB1BCFDB1F4 E63DFD152E86FA9DE9BC8908130EFDE29CC4401339C05B5B9764CF8EFF14951A C6C13AF979546996BF22F2B96D3D585B90CD27DADEC78914DA48432C6ACBDD42 20EF583FD41F2F6D6D10C3DF7DD077304B5940BB0462656E306CBD91EB9B756B 7014B1884A36201EC582FC9345C386043DD2818FC301EF78791C1D7854F8FACE 5DE9801DE9F59D5B4271E003AB897B2EF49501589D681D59CFFD9B03F722EEF4 74ABD29997515DA3591496B62666744EA76DCA45504F8075C0652D6779DBEAE4 90430C2945FBD60AD53B51DDBEFC7ED703C418B4B244C8FFA5A3C1B7600C5A55 3EBDB93C16AC191C3A28EB2279BD3F0D67C826BC6A73D3C0AD02262368AB4621 98A1605F2887BC5880E1AF2780330E0FD01D7CAACBB0F008A42C427F38236066 54799594E515B289044BAC4DADF8B3686B4372C5110201221FDA923F131E07E7 93C44BAD406838BA4D1C277EF74098B8C0EDC41EEDD58C195D7DFF5FEDBF96FC 19CEBC6C3006DD2CBF76916B4298BB915663C2F61AFD7747E03A03BD7280197A 9DA590E3D081C6F53DBF94E8D6FDDDD910A70AB18A0F6D48A590FFAB314D6CFD E3FB20C1F3C91063F00726A2C13A3D48323F9854839405E5A29D66A43E6E2B84 A8B3765F1D817071D4D6FF42BC785C2D11AB2B9452F141696CE19C6AFB9777DB 107D6E22D8CC6C26440BC48248AD8805C4329D46BF433741CB519B21663392DA 5DC7FC9BF37E5BC396BFADD7263D09F6B4D69594AB386B7BDFCF3BACB97A0E08 22013E716E642592A20136CF9CFD61D4E515D80E06A4CB4FC9D9B916C93CEA95 B83B98C48CF36C1D02291D4F5C0419338D64E33C90C90EDD2BA3B96D70FAFE0D 403A060CFF448D3E28A9B1E3916018465E86095BAAB4706CF7ED350D7C554789 D7F4FE5F180767DE8739259E68CF142040BE1E2E8C6152DE3417C1FAEA7584B6 20781DC4A9796431EE713DAC4E713C839D7A4FDC8AB6BFEFFE767AFD8B67FDA6 943AD387E5D3BCB09039ADB64ECC2BE2620C6EC269E708DD06C311F450099E33 AF46AEC644222E7DC4DBB9371EE12CFBC4F9B27AB46AD1DA96CE006E1DF8291F A550A93026CBFFC1087B134EC6EA76F5E109CDA58FF47338A0039A786A575F70 B8A03A4F9C8D07A4C856C77D9BCC8E3EAA740172D0C2D0A15BA35C9E5717D7FA 2691774DDE730BB9D7C70D7AE103DB8D35F3728470C76EBA0E670634E1A0BA84 2FA102BAD7271DF2680D86A4CA6FC353869987700E5E3FD778165456033D624F E9B3E80EBF431ACC934AA0357E824B8AD73E222B510DE8445C55C07C8E5DE46D E478F832BDDECAF2EBB11941DCF84CCD887043FAED9AA90D12BC8CA9A0C8D94F 8D3BF1F80B14B6CAE6BB1C6AA405AA64BB94D5A82CFEA548BA070796A02F9642 87326D066101435AB9EB40BA9EA9E61B363F5F5E3B924369796E8B78DE3414A4 2B79C6A13ECB2F34E6299658D07D2B3DEF3D4383CE009A927F0EF5C196652842 D96B857AB5E905201E7E8BA21A5EBED1FC6863BA9A1A6E5390407F75055E2EEC 512FBDB3E82CEA13663F1A1944DA072C765D8CED06AB461470C5723BDC1271D4 4D1D049D3EB131743F1EC9A6ADDAA038ACA2C41D139DC6A84EC3C61AC7F1E559 6155CC2F49171F6E07CF56D721D9728E87FC7DCBCAC46455A3694C765FE807E9 9CBC2D304AF37E0F28CCB22F239541B53A4D24D09C662559267467EA487BD33A 0BEFD4899B581D20582930703A868655C31BE935364CA6A95FBCB22CB714C040 9718824DFE97929D0482430726CCB5A5307957DD2432A9B6271E849148DEB76B FAA290FF6D0B18DC5B76407852E81C105EC6CFAB0F620C6DC9DA555A33C167B1 430A8BC338BFC7D75B7099CC906AD923FA107C74D3FBB719D77A4E5A685FF9D8 56424EE4AA074434B809D894ED50F6A60A035C5223EA25DD8983B9B34210DABE 718D7B2BEB293FF1B63CFB1CBDAFC69552963D90F5E3FF533A3FDBB626E9FAA3 F3C119E5E01C7BFF832A033C3515BF049E29558B1DAD652F2888E339E67D15AE 95F9BD14E3253DFE9072B24C0E7E85025B71096AF51C86AECB2921126A43156B EC812B32B1164BD9B2B947D503C015616DBF2024F5C8CB3236C1DCA653D661FE 6B1C19A22D272A176B7F1B7F9E67AF40DB0EFD4940E58B2A050249CA4E55CAF7 6ACFD84FB46FEF952D18552B3972D79D808B4C263B8C7E1BB647A2D03E102867 630D5C3F2C917F765A4F6FB8106BA6A9D0093E27A4CB6049C2371287D94B5111 6E7020776EBD744C6C920464BBBC0AC206033E8240017F8CCB112596ECD7CAFA 89950CF43FD87ACA750C03A778A37FBCE9C82C2F5ABB135BB02DA8E8C0D24475 3BEA9D79372D0022FF1ABD378C151417DBC69FE5C9CA38D23A3900E34BF924A2 90777ACDC37930B67DD44A2E76DDBD9B89598D5F626BFD325A978D277265DA47 38CFAF16E7FF1946E15F41CA73F7B4B02E5AE8FC4C37B115BC567E4EEEFEFC34 EC8974B1465AE57759EDDA28DD38A9210871D35D331AE1BE6097C3EC21C770C9 B25D040B2ECCC3AEB1EA1BF99E0C2C0F192C13BB9152CFCF75332E03F9CEC376 9B8C285A35F53655BE38713E09AE34BA2DA9C06FA42A6FD2D00CBF2AFD2BADB9 1571629C65DA38A431710CF5B01FCA68E8B8569922FBC3F9B64A5509B6F677AF 1B97E91FFFEB6308AB68AC58F9BA43DB5E764021E75B56170EB44C2C0A7DB86C 62B8982256D3621EBE3DB3994DBF5C5A14CF34B4AF3BD5697F8E3203085DE9D5 84B0598169760B925463E93DC87CE70AF4C2DF0F4287D2F2069847BCCF7A37A2 AD451D5ACE4DBCCB2E14D5DF38B226952E7446BF87BEC736EF3D5AE793304618 D66D3299AB9F9CA1D13F134FAEDF36750046E27706C7CBD8E0877BB6276E5196 BC2A355D109C0253644918E1CC11B717DE6FBDA201E769812752888CD66268F6 4ACF4A9449378F9F9923D584BA1B51F33663BE7A306887BC14A37E3C5A4654E6 531D6EB63DE3946BD8BA95CFB037991174F36D61D842071E6625605CAA350A24 FE551025D10871FE0E2599A63900C8520EF4911C53A03897C8BEE152451708E2 43FCF4E700C583A5E8DBCC03BF9CAB864DBD19E1760945DEA0EC0BA38BEA8256 D3A8D4F70F6685A99C6BD2BA8B412A26C002D76138CFCC7DF6802931E5D97BA6 0151F6A4C572235B4196B22B7B2D14B32886DF0D2CA8A277ABAAC53B63F64CE4 E4C088192AAB674497E8AF81961359C389B51F4A257373D907C615030BFBEF53 DBD99058FD06E352450B658478C10454AC8FC0232B70D5CB916981978053E358 99D322A07294748BA427FFD1E45C909171017B52B7C742FD77A8560852D819DD 8DD53211A14D7B2FD11E42941722FD3985D627FDAF87EB57326A0D290B5077D1 8A4230BEB40523A8565F95E0D44F036A571DB698EDD9D94FEC9512369E5E5E73 A3CA5C142617944F4F99C0697ED088ACAC007FCE06E5A6EDE7D0E03A3399DCE5 362271BC31533866BA79FD1FB3F608B22CCD4111FFB1BA35D920A23AD157C6B3 C3DAE11069D5E46DEDA7158C6478D8B8C0D9DC237CDF0CC6633911673C43FB79 E4F9B7F27495201E5ADE66255BC2CBE9D9F237DECB62A19D62CB41A1C92432D2 07F0629E913A71B3F1AAF8B8C5AC66D3C8605A48F8913E39C859E163DB1DBC8F 0ACFEE80A40B6172032E95A76B752B873FB4DF23CF3A655AF1A1B88C8DC156C6 190DE72973950565454C0A188A33395FD3D529A88F2B578356DE8EBBC12F04C4 5B899F667D9E6F3A4EC6DD8DE71FD4C2E2B6D56823EE4E0526679D71FF1B868D F261489F06F97B010CCBE640E2F57BA3DC3332B329F7958394BA9777D833AB50 005E8E9232547104065ACE33396772B0E0BD66D2C6CC54DEDD071E444D8C95F8 6F88B31E20FDB80F77C83151B7E25BD3736B4F9BDC52EE78C41E9475E5A6D94C D348AB42F5E36B4F167D29EBDFBD43B03F77EB296B06A36880FF17D412E77EA9 F2E7C25FD05E16BEC6732681EA21AC3FF6893B93FC09316A370CDDB86D9E6087 F6042C3F9ECD742778389170F5F041329782FB9F9702F7533E51F355F71825AE 2BF4F8FE50D413AC9A20C41B42537FDBE8DDC5A5C793D3760C1EE13716068752 F0AF10812250BEDFB4D7133FD58F4587BACD572505C84A7D3802D27443175FE0 0D89C3398B55176D8642AFBAB5CBCDFD6220C8488564B4306D74A58CD2921AAD 73CF803C754DAC2F30A5324886E273064FA51781D5BC596BFEDDCE3982EA1AA2 62CA7BAA1B16C6EBB99B2AAC4E6C9CEFB3D10F19987045C4918DB239E6E63D79 5F44B9D097118D081153AFF96E5EB39CBFBB99A3BE30909F614869031358EB98 F07A97EA78AE50375941B2474DB46AF3305F2B208D45921F93743A6CB8AC584F 6BEBE25ECAADD5A789EF60C9F54446687E7B030DA3E5243189F02BA46BFD28B7 DC14822E136AC7E40CE20458DDBF356488045C95907363864CD6943643BF0109 EE027A3091C11EA392EA91320EBFEA3B857370AD8EB86D73F035A476F7058222 E8CDE78CA1AA9EA69A8AA6EBFF3E67324C567B914134DE042D6F8F18A9373107 536E8D90189917D343F5299024239E2EC1D2D177D82DC8E344A7CF2AC71AEC18 36F139E7A4EB59A67192BCA9ED0EB25DE13032F6FEAFC3B1F4FC81BB0EDC41DF B9EB92618667C59EA499B788CD26C2137D70F1B0AF793AF5AD0D0941F2E746E3 F5A7F0288BC1EE11E982EAAE763CA422D72FBBC0D754AD58FBF92629DC8866A0 431213513744DB48E52EFC89C83FEB082588E4F30D7DA77BB598E51CAE7E4900 5CD570C914EFBA426BAFF7A56FC775ECF5BE13F2C42E51EF96784E5201C0B64C 074AC229FF0BFDF71E6D5E08D8755D2C12B770B6466A9C9C61C15582DCD2FF78 E9E74DC2B1CAA344EC0339EBFF92CD2CC1D62E2FA8FF15E7459A83C6CFA58A77 2F1A40BD276E76B675FD6834052B33BF9190F04DF6AA5FA3BB7D77A88DD5B600 324C5E28216F47682EC29EABF35BA842BA2294A3D72B126EBB852AB741186C9F FC84B12DC4A6CEC08F2D03EE61B65C845841EE17F1B765649A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.0: CMR9 003.002 %%Title: CMR9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR9.) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 44 /comma put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 67 /C put dup 68 /D put dup 70 /F put dup 71 /G put dup 72 /H put dup 76 /L put dup 77 /M put dup 78 /N put dup 80 /P put dup 83 /S put dup 85 /U put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D 2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA 700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C 4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F 291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB 2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E 2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D 9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B 42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D 07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A 31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E 44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E 24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E 75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE 53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F 7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD 866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B 40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B 14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B 9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F 289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE 67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF 2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D 064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF 1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF 01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C 40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C 72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC 4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F 852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C 3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD 855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE 1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C 1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C 552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D 744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 5D24AB1323A0BDCC0A8FCCAD408E091D37B62D3D1BF8537CFC619A78488DA0CF 87FF97E3181A579D373539E8AFF22856FD03F4C387BA307983EDE87FE0F320FF 41E45F60704B913C7381D84E98411045E4AC9FFDF8168FA2286D8C7EBF681EA8 787E7960CFCAF502B7A3066310BE7A1159A02F1BF2C5C11A3A9A52E01DE3E108 8ECF6C9F892370DE073A17C26D92487DC47818C92555B5FA22B8E2D726EBDC07 7B0E0DBF8060AEAD5106824D748D9C085BAC95E031069395B41D5BB131FCDAFB 5CB678DA317AA3082296487B40E1D4297E22905E096C47A26F4DF5975ED35156 F33D505FE3ED168177598CA0CE444A03F66032BD7D1C1ACA0EF9FC36C4C9CE25 C9B1F2420CF9A96365BAA62E2704F2C662090D58BB4E0B099DDB4EEBF8D05F97 A5CBC658236F5E4D62BAEFB5996AB9E8EC4F4F9AC53FF17CC7A87BF1B8EC4626 1C500327CCB89B0EB07A9F4903E0C5A5E7370D90B50C010286EB368B0503D038 A2EF77A39178507E41DBE433DF19D3F69A70793D051F813CD263B5DA690579AC 1789D2D4CA15488F73F1F01CA8FC188FA30CB08809D8228AAC5A10954A6E5471 F8D84AF40CBD5C92F789EB1742E17D5EF1F7212D71A06BD7091360023093F101 36EB44A8DE87A4A196B0140641000B445FD8F603A9A7F2C6F77EF6963811F7C9 15649EE1D81DC3E988A7A797D76DB89758A73428D690AAC6CAF6E216CA40F8C6 2E05352428D4C5BDF539C8E423815555A1051370EFB3A9606D3D58F46E7D0B97 CCA0C589D0E36D25CE3938B059FB0E2C8361014B57098F96088C5C98E7AF24CF F8A8308EA440CD67106B94310E4C81D9D739DF88C655165C148CA55C7A1E2F7E A6F673ED5F34F1C1D20B609A152EDECFA26875C005B5D3394AFC2E2FC73EC0D8 693A9561AD2C3F9B9E9C94C53ADDD85AF53C31B80C1B952D9DFDD486216B5470 4294478B4C661D4A4E9FA155F8AEC542E9824B68E6CE5EA8AC69ADBF68EB3D17 34B6A9696D4C6CE733DAE0E07696962EED3A3A13C4041ADC5F52005EA6134A66 F51F736877EF6935620706F1C7F6D4391BBA261C0A456437333F630E77FE0351 524E0228494AE590925549D708865836B98C22DB4B3DDC0B03B7AC91452ACC9A A35B5300C6AD185B4115777FF1887C18E2A8D7197B0F7D20C6783F1ACAEF307D 3A3D8A0CA6E668E9686C074CDB097FE2EE3CB1633A72BC1E72A5F984675CA442 44BE2B6DA017CC81B0402ADB03580FEDC3E27F17BB92A3AF2F2A94D9355ECCF6 100298E5BEAA35E237A6377AF642F9342CA7B1395A06C40BD8009CC6A8448523 E4FB6152AB32DC44649E9CA36C02A450B982E0AE37EF099A4DAB23C856C986AD FEAA0B463EFDF2934B81739E6EE4DAEEF6E7CC0ED6A45B7F628AF18546E746ED 2F6A256953F207A7A6C9DD70F51DDEE2A9AA21F29C260D73AD90ED18C0460515 0D9B3A9D82BE7DA27A34D0A23A3CAE652858FC87D056998142D7125BCB55D9FF 7B893CC31F7949ADAFA7FD22C8F9537DE6D5AF5C6EA86933F8B05B923630AF9F 932D151B0B3E8667D726E21D32EDD1B93AEA254F7742B0626117F71AD443B5F3 E244ADDB741168B14285868040702DB2339BF7DF2E553AA9B765C965D6911982 4B157A2FADC6FD33E9B0E6741B843611735C86E03CCE6750FD21CF6C091DEE5E FECC8B1D3B1C4B27C8709EECEDE568036854398EB687A52E1E15CCF8481B4169 D825AAC0866A01B77B5DB834161B4CD9385A5A7186B75648703EB60E90F27338 24306CE505EBA5B75AE6563CDDAC46DE844726A222F8E7995239C70F9A781725 9964898D854B87711D7D6290DD4760DBC11157156B0E2E20CEDB0A5814B5BC4F BD587F14DB25055F0CE7BA4C3F2AD371F10BA0FC4C1BD496258350CDB97056F9 FCB96071835E56BF1D384A44FB411C043ADC0B94FA3370BE0617216EB4ED64CD 18471A493D5F4CF3863FD2408A3180229FA3AC3AA762A8A88C2E79E277AD698D 2F2FE368F51654EF912AB5C92989675EC9E0A818C9ED94A71DBE46014A352D4D 916368BCB4152454BD9D5DE9D002DEDF2FF6342EA28A436EAFCAF9102A25E5F0 47CC8473EC2AC8E4B2C2C0E8BF5DBA1C7EEE0BF66C206D543D9F4C412CB128CE 57F60B0D5EF70270B40D4EFDAA421F4059C474F61319A9C0B0BB98EAD3B5ADAB B830C68513A5DFAAB3A29363889DBA63C13F646A21F005F985B4BAB5F16FED1D B8A81E4164F827F359A4630C2955964D0D8088408A3E376555159AE9BDA25911 5AE9A1445AE2A9CA93F73B047C8E669D29DD9BF99B3ECC3B24B56EACBFDD1F93 A6800310FF9AFEBCB6AF6A97107FBBA08DFB4C48A30C24D13B30CA0BD0790FF3 8C7BF80A1721B36E82428DA07F52E69E4370442D6C28DE1FC1560CC93DE2B34E A544E3DA352DEC39D0DD73AE3F8A22299AC83A56F2D0A289D4CFD073A0A3E9C5 22649BB893E0FDDA363F4543D60590D9CFEDB389FC57DFC352A86FEAB3030F33 647818D10537C66A0EDFBC956B7448512F12D228F1E6CEDEF1CC8BA5D2CC9FCC EF56AC106082AFBC7C33AA5AA3A5F74816562B18B15A72DFA22E53AB387F6F55 81E7A55FC1FF18C49EA9C747626EA2CD8FE45998A2200B201A15701791D5943B 61A6EBC0487B07FF578EE8CD2CE2B4CF0118BC31A1EB064F3BA5770D9D6ABE3B 980FAE493351448D8CEE5D7A01BCE562BF10CD298038522A0D75A6D0B597724C 53AD288C60521B13572393735AC27E705A6BC0BE25ACFA16A3B6075F1D04CDBE 0540416BD8B26A3BB4A9D8774A3000FFA9477E051D943562E3B9EE8911AA8B94 940E1F4E493CFEE1C6C5D90BD37ADA86614B9AF52CC8105D836ECA2AAF91EDF2 530F0529C6D8F19269C314967DD567EEA133DF88DB64327D446FF0212FCC07C7 72ACBC7A0A254BDBC3A08CA81A20CFBB26838AA2828DC8A69C05C8414B8ED70B 75A3E2B72E8591A5E1D5B944B8FFAA59E1742A2AB9401919FCC947F81DFCD331 BAADEC41BEE83FEB705ACD7E9C0B9BB3F2B0419BD82297251269765F4B620CB9 036B00E305A703A3AB78546BFE29DEB9BA7B5395D75493A2FF6B8B3B67CF5A07 0A10EC484D74B359BFB7E71F5BCC1D4FF658FB34C55E5D0338D3FD5F788EFF7C 6425857EA25379430E12F1F63D7640D3C9E38603EBA4A11F13AD42E41F704581 551DD05C638A30F8B4EBF5F8B6206FCEDFED42B5B689C7F102D9D09F03B04788 FED13E7CEA6134A544E5DD874C32705EF99EC771C5A5FF2498C0D2C58390930A 96DCC10569F5575CD03C046E071BD75320E0C64AD0D4B6FCD0B228A3128E675B CC3AD244DC7B873D1DF85F196BFDAE905100C987975A7D8ECDC4BD5FB580D025 01B3FFC0D277177A27BB43537251C9296C2100009DE18D807EC3D57A1C81A1C8 7041972DF0A32A0C3A5BC386F71C169A6735162606D251EA7811B893B9A65E87 0930D2B0F81EE86A3F13BB3679BC7D0EE881D461F04C7090FA5CBAD034A75C78 C5D044AAEF0554832C59F6FCC0C296BD1117D2ECD7059B975D2BF9BE05E48D4A 02A380C71ADBBCF356F1BCD9A99F64627B7AA7F492E93E4E9A7C6CF85FE63F09 E6FF5B7F9270933D8B167D25C856339038A338FFB01251F723BE4A8F671A23F8 31F0CE94575A7CFCFE93A021B1798908F72D1B78654E35D8695DC1904A396C6F C02C903D5D6BE52687CD39533543DDD22338ED2941F1821F5C3110501B55A71E F69983E9DA01E7CB967B31A44EF56EEFA5C394C4A1068A4AA40A08EA39FE35B4 5EAC7164E93F84B80275AD080C4BC34D560FB2B29AE900DACF0DC5184C9235D1 2BD92B31ED15ED2A6919143453F3ABBF70B5657F1F3BFE97412FB42F70DB3D61 3DFAA7C0EF9D7FE6A4F783485647EDEF954ECEBFB633E45E6D47290DD967805C FCA6353D14BED1445083CB2BF453995B6C57D77B763B5C8F93E7FCDC15145F70 0EDBB5FF2F1ADA0B10453FC4DE754DA25261434EC57D6002846CC79951FBB211 B0FDFCEE5105C6005EE478E6198A7C06CCD709AC6FA8E54F2432F57EBEF4E658 C25FF7DAEF0B65EF65424ECDD2BFCD831CC1C3C708FD24BD45BE97A9D4A74F91 4AF903B8A897B46E14EFFEE5CB7C9CD27B1D311C994524A5D880A4948ACDB3E5 141A16B5574BDFEA5B172C0C4279189DF348C515DA4426C092F69729A7B17F4C 246163859962178FC305672D6A625DF5B7AB93B1C3BD5A607CA04AF4A1452AC6 0B8B38C006D1B766B078C4399BF86B2D41574384B1EF37AA1B987124C4587DC9 6EF5AB8B02585D925DCA1B36148CD513A1B47A3F4272017307BEC08FAEBA3452 531075B36A05E2FCC900E7ED592B9B8867E0F5F677C72E6CDA1458BC8D05E024 11323238C0921BAAFD46B87DB328AE59A9095AE876E5C0199FBBC5D697A34E6D 8F20F709F5E94D0E7E2DB8A36F53C74405C7737ECB543FE4C35ACFD212B25492 3E5DBDA4274C755F56508EF0A00B4A5FB496C4B8D82113B3ADEC9E1AF9AAFC32 858AC0B6998248ADB0FC3560D0C144D24AF6480C6009EABA9700FB0CB881451A 5DABC2CE6A2B4FD6D138BE6B9248717C6CEB8CE6850CDFC1F666C0202046B6D5 9407D14D60862AAB2F2A6653DDD05AEBDAC0F9EFB53AA6AD4A5AD9E0A8A41EF1 A3F9E2683A1F5B987348EBA05647DB91B3D0BC34B0B59C171118DF9BED1F38E9 8CB8C3F8A586F56F387E2B40A2096C87AD5ED5110064BD1116F753E7C03FB4EA C8582F2F7DD2C267161103CEFDA79D131D3A632278209CD9D611A4B1A65368BD 534984BD9B8D74D122A08106D8713830B6F303A806CCDC5C88B18C5F92E20B95 07E0F04AC62E003848EAB97DCDCB43BE9FCC06C8F0CCE00D2297569222B19B8C 2718E26C1F7D57C4B7F4E7B088306BDB1E2C91571B1CF6EE988F155EB2BE1965 1F646417DA862C48583B395D0122AB642BB6F4DF684FDC70007F7C8E2401F5F8 1D13ABBCE9E981D46EC65D1F92A3CF1D13DEF2A525B13734F3D60469D57496E1 4851CBBC9A49408580D718665CD043F39A1F86F8DC6F52C44361FEB0D80E9FEF F06C758AA6FE965ED042A27A7EDDFA0FF748252068422010F8666F53EF5AF748 DBAA54405EF9ED986F9F98A54B3325C87A47E1F358D0A8B5BF559B6C775E75F2 0948B50B3AC74B3F87D65E7EC856C35BC3C3B4C1984F27A79BEF093BF9AB9B98 EC589A00ACDE0AD5847DCA9DB3621C44403E714C881A05F55D9E7504BBA15ADC 37C89A7BF2A239CB02C17FCC1069527F86261B411A18F36ED64DEC101C35E534 A809987F682C28DEC6D00A04F0D6AAE12DC5A898D47DF5DBDC11B59C69749E8F 5FB2E5D2F5092361C360752046D9CA4786EF07B4F3942FE255D1ACCB6B3E2088 1802925738CDBE31550A683D4CFAE8751664506DD9797894FBECF81DDE61106B A158E0B46CDAAA2F321A1E276835162860FD8B2E0167ABB3C7B3242A800F8407 26E3D08380D7FB3B9D1D9651CEB60A2FFFC58673064FA240F04D6B7EC86EB4AE 47B0D0FE41D039CFA872E74845BA09C40D5374B218BBEB4C89F92C7B33B529C7 5081EF37095DECC6BB88A1CC5E64E32A94C5AD2575F952E5E4D97D3CB759D222 F79AD602DCDD04AC16EF772A99ABDF5832A1E38477E0240682B9E1EC74174B5A 9C9F918669796F583D2CD2453584F42D84CE0DA43179E4FCBEF9071B19F307DB F44554FE434FABBF6D6D1DB10F7792A060475A9F4D4B16E2C670FB8AEAF8D055 2973659344D0B7C76FF21D5CB40278DD9210EE8A62634D1CA996BCEE95F77B14 0C4E1569EABF70176D3D43C75BE31EBB33F6545E3BC85EB688E643A05E6EBD51 2F997D7955ABFDA3CEECDCD6110C8FAF0383EE50C2F418E45769287BCF153F85 7ED1B2DDF33065018575FC28B9C746B9A1BDB182D2411CA7442E8B86861DD800 BDF1D45793F8563A3B559EDBFBE8DBF2232AC8CFEA5B84BA2DA15F7E9B196DC1 979B4DAEC9A3D28BD9802532D6CED80432EAF850634E90DCD8C431CECDE213D6 BBBA8143A90227A1169AE78069213C2120B27134C9AA21C64ACF5A1305C03857 35D640D2E3E08BE86D9700174FAC3AF3C0C401937812E42006EC08E0C71983C7 0B50F78122A167C5D1632E344FE011B121EEC247CB77165706ECDBA76F11097F BCA6237820C2E8DF105907B2816CBC970A4777DA8B22278237AE2AEAA7228A93 AA96C976F5E766053FE61DD832E6F9E4511C67D4FEB20AA5DC6AABED295E8AF8 747F75C718981EFAD0992618A8926590EB02BABBB1CE8853D7312D81253DA4DD 0550F21FB558BD9405CF0689918BE2927C2F428A324530560B8AD86DAD1DA6BA 7863528F4C7E9F9D92CC3E04E57E1C1B929CAFB9583F7B0C8306FC256F6896B9 89642D8E61B65DF6CA998E52F826331A363B787F3A532D97DC002BC5B5EF6CA0 F352C2FF69F7EA510B574DE3E5BDE03FA365C8CBCCC8515766997F821BD4CE85 282DE60C3A93C153353CA8DA4F7DE805D0B9A2C77183F45B40C62E1E511470A1 E7645850CD18B3174AC45EDF31FEFB8672E4D6F740674E208AFE9DCDE3BFAB61 4BE0E6E4ED3B2B1C4617FB6DEF15130C6816AEC54244D0F825C9C7919B5A16B2 4688B45C5B4B7C48491442C11B86E5E2E94FC7FD8BCC462306FE11E6AD43B431 FD0A6093386DA78B12DC09B07E68256BA4CA7038E08A15D41EF05EB0D7BB7A01 6EDF907D9D813FD567AF255F05ADCCC8B197D025B2D2F1B1EE2EAE446B5E210D 28404EB952843FB9902D5EBDB7BC162BF3064606C07AE9435FF315A9DB803AF7 E0156B7431CFB6995F3FD1586CC5964C5E4E261CFD6FDD2E8EFB29740CFC4BBA 1A6A7E619B6399B99EF06126146DE30FF6814E261B4445E180144BFE7C92181C 6CE7A52756D9482D7AE3F2CF3082BBA123796C7624AC1C793363EF77930044DC 3966389C117E4803DA46D59525CF0DD10E910FEA930952401DEABAB305498FB5 AF1E8018900D50B6DCBD883DCA94DEFE042CAF00E8C1DC261F4474108F2ACF96 F4512E7D0362843BFE4EA9F15C5ED3B3C27AA9971D3651DAD1BF0FC339A76B09 1A5F45459D8CA1285BDDA77A6A59F8D4DD81CD19CDACC7D66FA1841800AD0479 45D70B2D146D57E765C86612FAFAC2AED07DBF4C7CBB1DDF840363F821869AAB CD91AC7648A6A898762408FD7A17993C173D78CA38B27E7EE6C7EC1380ADB707 11C1AB09F03E2DEBAF55968B232F45E4BBF2CCF2DECC0BEA681BFE96A1D3974D 9EA36FA5B00D9E659371593044487E92AEF37474C940B3A4EC26E497B451DEE4 028CBDFF61EACE96FD74DFD7799F901FD6681B385969BA497133B052A90420F4 6D0A138EA47833B6FB3501052BAF8A7F3BD62AB4B0ED06A694F778D261BF2215 A027BED793CE8D4BF9B4DA153813DA70A207EF712534929058372C0BB5B7B516 20BCD0BFCBC338E8EC70AC841CE44EF460CFA687C3890EA068545A62D8307E6C 7017C6046D1E4C2528C6A99D51528DDCFEC132F4BDBB007E63D4B1F045FAC208 6C39C9616A63118A600F83AF3FA335889635F7C2751A521806DF8305E220AD26 3657D3C4DB43B1E6247D0D541CF9FB55D8845DB1B2CEA75DE0899E900A250C43 2B9104CAF040526F5463BAABDDC9A0222CAB87108415BEEDE2972D7E2720897D E41E3D806A118BC0FD0356088482ABE043DACD5E0301310BC1047358740E5B10 C7EFCC8F2DB61273058AAB5173D414C97D3F18701E78C6294BA5A3FE0CAC4003 86311A6466EAB7ED99EAE360795F32359233F93C017CC318A960BB9162238E2E 2C16BEB936E00FC3AF0C5626AA76470D4B87F921572FABDA2FD810951E80B674 56928C2140038F0486DAA7874423A738716E882F16A0C72CD2A5DAEA1530FDB1 736CE88270A96AFA2A1D77B7FD9F64E7D39A78CA88C2846AA558DA3D2595457B 98625043FD6E2F87F71973BB88FF5188EAAAAFDCDC7FC403D5F8BAAD045E888E 03BB9B8F721F003FD3A7EB9FA1AE1761E236E11A7BC3F2E6E100CD3C867682DB B607F1C0A9A24D5605603C238234DCE8E9460DF420BFE4F6EFC1B982F30B2BBE ACACC718F5905E49ECB73F52486080CE0E92960347A20F79323A4B2B57AE6706 299AAF55023204E023B81E79CD86F9FDD780FA60F156096FCAE6AF9A0187C8B4 4C182DFE94AB6E187CDE6CF2793735F09CB3D135E5237A94CDE9F1A837409E6A 8D790E9EB0994D0118F33AC9E539FE5020361BBE79A5856FB1612A0A5FD3D3B4 BEF2128F32EF1C3069D2F288B02A8EDF99AF1B34FAB5D0AE271001DF678722D9 D1A7DF2D0B1BDEA0207D1C9F323059AC25B90A67E7819DEBB54146AEEAEA8D78 C13C31CEF0422CE6552D78B54BFFE6EC1CD03AAE5C037739E141A7417488EF2D A8788DF9FE4AC6EC70CA1CB64F4ADF195BE0ACFADDAC1BE579A0750EB17BCC19 C17BC246CE43A554C1924A1FE6118474F5E10D1C44015586CA8BEEBDC0F200A9 FD3E1FF666AF6A12122546D21C5C12838BBC40BBC8C445D9C0896A628736C8CE 69EB2A06F9F837E33355B4E1A6B44DAABC209AE0193F4E4637997A1A63D5AAD1 E9BEE0260AE43ABBFCCB14AC660C0B6FDAC1580E6E0341566467C546AB8A2CE6 5EE856F6EE9B3F2572B252E2F58D7E82C8991BD4A3B37D200137783CDEF90EFC 552C5FC51193E04DC7E5EC1CC630D7B769CC3FF4836DFCCB3E3B93719807B5A3 B51D9EF5AC2EAE7115EFA451DD08FAE18C5B8AAC3284605688A6164FF418A02F FCFD540938705CD0CEF5DEB30B81BDD01ABCAE96EB63E795D84FC9EBBA17674E 6A6158DA99DC7A5759F5DE319DA40429BC877C97B5E78C6A15C1E54512B77D46 0B42E9E8129E4E97692492BF1A94BDE3A57CEB391A1CD1D8D50EF61CCD0D2834 6C3A3198B3186005E9D5D2CA887E6126655E28088C7C05863899CFFA4D1FBB47 2374C66106A32F5A43772B9DB91C55528A720632150EC8B58CD13DB7A9BF2FB9 10083A86AD68B11955AD3D9291ADD506E6B21FB3228EA524BE3B4AC41C6F090A 0E463B6542FC86AAA3CEB42E4FF1412200E2E174CBE3D9D546FED9617DFE041A 34E94FDF8E3C8C32FDEDB8C7F6588C79C6B68477A595DAC95374EC8AC7FFC386 1C04A56EE013932A8384C2E5021929EFA2AEE2AF9C62057F93AA2E3BC49F9409 1D0ED2BF14311BF4EA815F488791752FC3DB0B4846D348EB152E93BB7E46F04A CE5C794F8CDF58982DAEADCF94BA0240DEB78CB1745D4E4FD8FA3A6C29154F79 F15B573606740C6266F6078D30B4F040915C802BFEF566834DBF63FE4B1B7700 B4BEB611795FFDF7E5FEE3F70F27324755168D4543A0FD555BC591B42E157616 FA03F0131E44FE62766C3759B7F7C48817974466EBD3299F2B88AFC890B725A6 61519EBDD3CE31CCA4D21FB1F921D0DC6BA4175C227D6D72B876114E0788072E F6D4094A0174B1B82934A718E8D9B37F8E442754E4A1EA80C3409A76526E0A2B 51F829D97E11B5FE6CC9CF1C0C94CA289B7C1CEAFD0979FB53843B0C9D18C7FC 832166FC861F93C6A863418BD3207182A02B902942694790D71CA71B90A1A328 155823F2CECB7D3990443253053855FC4DCE8C61157DBFC6C78B5C42471B0D1E DF2293B64FBB55E646293095899105100A7F7F849568B06FEBEA96BD91A7A642 D7B1F6A019EB8C7B2E50C20B037EB4C97E39886D1227481BC1CEB3F21BCDEDAA 013921FBA7F4D80160CB66C4263B08C73E677CE284BE8BD96B7A2024601644F8 B4FCC2C56B788D7E6C5F87AC6B2255D29E4208D87C38C651B9326512BAD326AA FA7149F925CF2BB661418001956570F4DBBA089679749DC68943AB20BA91C4CC D9E3738F767B250A325C0954BC076687F2A89FC36898B6BFC56C523D15206884 8779F53399755CEA73D6B1F7CCDEAD0FFB0289839EADD20F9A8937E75169B4A8 BE049C4483A1F60EE36F7C966A5553568B412085AAF94AA225405C504ECEF174 D2C4315A16B23CE9FE2F9A4270E20312B1151B9BAFC3467A635838582634E238 1294B6A5A3D2EDC0B052942FF75B83723B983B7B3CA88D17BB702CA279BB0D25 F1A791BE09211C81E7891343B1CF5B9CB33B632E2C3F850A7663B4A2BF606621 4028DF65A778CA59244EC5E268BCE9F584C75C5858AA0B10F60D31BBCB6E495D 2C4D4EFA7464DA34F991FE6E94ECCB3F324145B2863349C3E259A65D9D838052 893E380BD4F7E9E6B1EE4C46A8565D920ED2EF8FFEC6C7F8ED70B167C9EBB3C1 203D0AD10F018AC054B2313E95500964C1DD87CA82AC039F77FEA85192C6520A 89D95FB78786BAF0284277633F5916F6C574821B85A42B4A388855B47ACA6F8A 3C69E72621DB5E4F78E5A61E26F292A198CE0A765A60EDD08C4680C82E711504 1A70280695130659E002CD94B186C589DB5CA9D03699C12DA3149F1B7E0CC1DC 2B5F405DDC446F0FC5040A9FDA697076B52110B969E4AC1502CB6164CDB3E79E D19AD4A5EB5087FDAAD2E91399905F36CD9D2DCBE911D0FA0006A8E56295B6CF 6D71FAC5DE577AF9B15853EFC9C7E329A5FA990847FF22874B6D3F5AE1A267CB C1DC19C8684CF5E9FFCF07C6F3C36DF955C6F90995E189FEDF311D067B660BDB F5681312548B1A9C6708302087668335B1A9717393DBC4DAD2392B1E2D635AF2 4063049477529F514823ADE008F70E5A1C27975DC16E4E1D776D3731F018B6B9 36A513490D47A098FA3E48238EE966FAE16DE1141571C179FB195B588CFD9346 8C93661136290686445972EEAB3986130293053A42460468F6A1D4A0476E373F 816848147690B16F0DDBE40A33259C4D7BE567B0A30FCDB72656EF3F2C7B0C2A D9EC1C20313D6EF620D91401ADB127F7A4894A527004DC093DCEEC68C3ECF570 3946BDA46E157CEAECB18DB9A3BED918A843890DEBD627743ADA0D2BBDADBCEE CAF875257FD719D2378DA73D40DE69AFFC7DBFEAC22086060EFEBDD8DC4A195C B61709FB30CF4C49651D4CC0F83CB17A0AA95D0F242A050D0013CC3875C64884 0A4530E8CAAB0A201AB3972B0A45C88B5D6073D13A15A6D99FF8B74420FA05B8 3585563E4FDA820469E7DF6968D6E09CE289DA730281797F53EB1B6C1B572D21 5A86442D6DEDC4BEF7CEB97ACEF89645DCC7895F8F01F8AA5A0D107847158B82 1E9AA415470666425B8E6412F60A2514E50798C031ADF765AB6A3AE48916BF9D 3749C14C389CC521FF43B4AD2920171E954BD7CC538E073EF067F5520B501EF0 CBE092670DA7EB95D2AC2F7FD8400B23394D7ECC2B0C7E04245D0EB7BB7DC502 7CAFE40FDD064F6B7B6CAA32626D035105D493DA5EE537DB279CF85F47A30D9B 7840A7DF5F377054E475779BEAF49D19F0841DFB7178AFD3E78572521C982CE0 129273B6E82803E411A8EB53D03600046F64FB2D61798E41A46CFC1B7C2DF778 E1D7630285E8312D454BF3F4A9129D95A19C0ECD7FCAE1455462F81F37FB072A 339ED9F3444DA57DA602078B1532DC4D5AA7067A4970CFDD2070E8213FE5E3D6 67EAA315D8BE56E77BE27777888845A92C1460A4DA692CAFAC741F7C4F59B835 F3C999660C6BDEDBBA1035BB798377B1F9AE405FB6001274A1866A0D66461526 D49EA641CC477097608E13FC6A6F46F2519D728210ECC6C8876590B1B755EC5E 1B8A02F710CCE815099EFE37532A42DBC5C1437E312E1116479CADA52FF0B3D0 8913EA2BB70DD578B3483E8CD2F5D289B80AEAA0354D3167134DFE93A9595496 BAC05AD4FB6B336302BB1656B10DDD6A10D40F316D673BEB60662F3AE68851B1 CCC18ECF887D010FBA58CF22AA18473C5B2A337AD62748428B91478B774C4779 FA97082369335AAAF1ECD3A844807971D4E9CBB9E8398814EA819ADB3694F13C C8DEFF8FB3E4BF646CD90E686BE6B841F1FEBA1A9F4BFA56B7DBC76A3C547896 93C015F4C970D575F7E9C55915294905DE60614B74900B5203794349D4107329 61B217BC412F8CEAC16E0324C9AA57AE75BEFA4AF93CE7A11C5487054C01ACF1 897A87E6D388C5BA742C1EFF729289AC6E449DEEB8DF3CF10AE90FBE4927DDC7 C5FE8744854E4B4D52B0022CF113AB5599770732EBB5A4E51EDB89EF0FB51C5D 102C348E6DB504D8F3E876D76E719B6F03B17F9E256FF016B18D0011AD254A9F 97A57C674CC6B0CB3C18965A9F9AB6B750C5E06E69F6DAF92C8BF3D05C47AB89 CB70874501FA1E18181D2EC8AFC358576A042AE217FFFE8AB3F9A6DC611998A7 D39016BD1F19199CE9FC4D564E610898699DCC1E80EFC83D7759FF763BA0185F 84B8D256055F3A7F03DC50F41C46F1217C79B3A58F765DE05A95192FC66E6590 CCA7E9C35C9C1C064B5C88ED16DE3972A02BDE65A6A1DAA06E1ED260E836B64E 417214564FE1295617A4547151F1EA981F2C8620A50F7DFE356D4A51B0B51A70 3984A46C75ABEF4DAE9DFCAC0B247327FF58DDC909B413FE613CB5F750879A58 9031CA9618A49C9E173A8C2DAA71639C1B997CE35446D56D8C974ECE47A66EEB 7D495BB277B0C3082CC2999745F249100925A900C6BE8538654B48627762D9DB B9D60CBE98DC66BD82E50812C350A1DD233B5345B23A67E7C577911EC54D0353 8EB7237F6C071BC4BC0FBB4DFE9CFE60047809E1099E6DC69A862CDB347EFE34 19E54A232BA6BA50D3B719A004D43AD15E0E83C032AD793CD92C6B2168BE3701 B7CD00CF51DF513D407D8EF2D017D014F6C101ED3060184C51879222847F8559 6069D748D3A5C4692A5636D13706ED0000D4F0C9175F3E0E628B471A6B895E1F 375034CF93CABA4A5D40F2305FEF8AA9E1F14173D5FCEE27142AFADA5ECD1687 43ECF7A960A0DF7222C1641C2EEBE02F5E1C7FA688807C0E09E72098B39C0BC3 819E61685F2A115CBCABBFC82C68A2D816379D463A30A0B395617B423E79DFCC 0DA89AA1CDFD8231BA44C72BA122FAA1EF41279F079D3FD842D3A51E07BEA2B8 132D14C8B676CCC4B7EE0AAB7B47C952F5B2559C7F1D3462E8A9A108BCD76E8B C47E564DD731F929606EAE8AED8714D38AA3D9120788E9CA4D1F6897737E013A 846AC95641D8AC8228C871E5347D1ACA6F5F324BE7757ED3D3A5C012D3E85F24 1ABC609B03D5A6BB7D9CEE401B4F9E219622A376F931DD713DB0043BE5B3E70F B88626D5FC25E86CD1A4400EEEE3A4683F396D181604242E9A5E28527EA2A2EB EFB34D5AAA4BC71894F75287B4EE684E5130EE7EF20FD737571C340F7867F9B8 E24E2C0D1BDD7925CED12DB7A8597E9F67B20A8DF00036DC4C60FFA898D6DF3D 90D75F6416492ECC4B00AA810F44FD40B8F9357B80474D0D68C8C7F2101DDA86 6553989C836A0E3745042DCD2A47F4B74C983BFF77D70082DD899C7E0C084EC3 EE2476F5103E4041C79C655AE1F10B6FF35C1CBEEE98080193C4ED852C1090DB 16FD990D8251780586A0DC44F0DB20315629A2A7310FA25AE8A4B9A3841FA7B4 45D915C9BCCD18661FA3AA20E9B9F4C2CB2D06B8F85C765E1715D85F5CA8827C BFE55D5E822354B4458886A1C778B2CC57FCF78AC8FD4CD507DB46FB96D45C18 345B58EB67A6D5CDCE3710EA04F019190F03DF361FC73F5227F23C4D654800F8 C9FDBAB5DDE070235FC7EA62941A9B9B9FB28266424497F3 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSLTT10 %!PS-AdobeFont-1.0: CMSLTT10 003.002 %%Title: CMSLTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSLTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup /UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSLTT10 def /FontBBox {-20 -233 617 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSLTT10.) readonly def /FullName (CMSLTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 68 /D put dup 69 /E put dup 70 /F put dup 78 /N put dup 86 /V put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA 3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC 6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F 3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C 4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D 107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C 2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F 55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB 69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE 67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD 802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E 20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC 4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B 4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D 45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA 997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A 2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D 4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E 425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F 2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA 22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D 200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA 9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB 57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B 2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC 39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F 79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA 1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA 0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F 9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F 7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D 78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC 7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC 6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE 5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB 42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F 14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A 6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C 9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE 7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D 4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA 19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D 465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE 078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6525 EE62456392E5DCAD0A0157A4A033E440AA014D5682606312F72248E13C43EC3F BBC9B4A2CF19A4AC6ED7F561EB13C3AB22FB3F3EF644B5B47DACE807262DE5C9 50578464845B950140ADD91D72D28470A5A5FB134EC52F4DBBB9C50A7523592B C5BAA056E46F8C004062298BEA010C1CF9F49DEAB58C4D2012E04E630F54C985 328DB2B6FEAC584308D71A9F5FD945A37EA13F3DEB1748320870057A362E70CD 50C269D32993CE9CD1E8CB35BC6F69E7574F37032219C6E1C960F3693405EF98 F858322DCEA45E0874C545D25FE1EE28D810BD6419086FF1DC4A62013C0F6D58 847518074F20001C39224885CC19DB05CF529A5DB077BFA6D5B68BEDC6958D09 2B365C59D8C3A353A122AECBB827AE42E47EB04249576CE31DE9BCA35D07240A 6F69B89B9935158AEBE8781A899AB3C2BB6A4BC3597095B97C230B79CAC029E4 78E281C1ED6B5E4225622665362B5762EB6FE519B5E5C50B9C4EF0E260822D33 30ADFD72E06BE6594F20F246F4ED26D2719CC07E45A8B6475CF5FF3D0FB64AE2 85C75E0F17689F40DC131C7581765227BEF4C89AB774DEC849A38750054D0B1C 60D4A8EAD48BBA905D2E3EB7B5BD9CADD45307A4A65EC799FE37B08D7C0F8753 A083B2B87327457BF4547DD1326DFBF51F10D49118E0CF4A1A368E411E2905EC A093EE2FE4347379DD07F3C1C1DC067D48C136EBE6B99A3805376DED05E1E605 CC8FFA759ECE4E58E21F258709D239137FFD34EE5EF6E53DAD321EBDC06771FE 3E96FD537BF8EF63366C90BA5E77BB59F8628E300F5E549D119D2DA30879A888 1F2953B629DD1437A60B3698E3CFDFC1F12E07082902FA3E23167CE7874AAB7F D2DF50C21055A27666A633B41907307B13BED7C00B2F314DD3D4C33C9306796B 14965F50472541AC8004A51BE2365E6F105067802BDCCB138AA878932142BB7D 7E6E7F299B1AE97D0DBFBE7D75306F4EF9C15263D8CFB802648470153E6B6C71 9814F6CCBF23D4B1BB058311A786495AAAC92BE050C66C4EAE5357CA21C46557 4F6B931AA118D2F9B30CB8A8AAC0A2F4E5EDFB7E46F93420962B7532CFE01C89 13BF1E6F66FC55D4E5E7773E7CB1CE68ED0B9225105133380423B59CA4C446F3 3AA5CB992D8F62C9AF1FBFE707EBFAE4A2B8A3C2E6E32A03190436B8B75049A9 6ACEA7BD977E27D1A5F994FA3FC93B647FD4E7A6BFC9C001DE061EBE5BE479CF FB45E6E44703FC7A2A5AD3DA491F37878AC1105A4916FE24FE41394644CFF58A E5C3772A1A5ED8A50AFB09808953728BA35BA8BA4CF2DE443BCCB5AC9677B6E9 C9AB1FEBE847D58B9CEB6C18EC54AEF2AFBF0BE45A90B2D988BD20A5AE0772CD 114A9088BC1284F71DA07AFE82E9D115BB7CC9EE9CA46E866C04BCA817BCAE9F 8DD9956B629A0FB8C5212F0FD468AA3A8C4ADC4959FA3E94667D179EF954D5BB C82DAADA60D5C9C58CB005FED35FDD27935452BCDCE81F4C3B98EF940BCBD291 F7136B7389831CF2E7CE5C10B1B5D7A9B1129532B930EFCC77BA2B7334D75ED4 F55F9E5CF7CA562902C563763D338CAA34CC704C3D371E5AD53EC3337F0477D8 8350B7C3073DA7F3344F3217512AF40504AAB5346739E0E7F2CCB57BCCBED7E3 6BC776D0784C9DD9647F402E9016399B8CF71A92D8AA690E4BEDE0FFF8A51EA1 A850F461F971B568633E754562EDBB4B23707BE8C925BECD39C7961DDFF64558 B2B2C0E71AE1135DD6F4DDDF11850711AF6E7F2660E1EDB116BF15CA28BC824D 34970D2DC9D52121AD3F31358897A39B8635331AC09EC867FBA3F9B8EA745C16 3951A6467BB68326D29E9462B3E00EC3C437E4C2F950D9285BE860F3F063372D 71AB40E08B2A39DA0CB4010017532AB5ED5B7E5005F73CF7C089304473C7B94D 68F54D62C50869A61EA34F7C0793BCB0A047DC27F6E6A08F34CFF2C5C31C8637 0C9C21FE3D93BDBF3C5DDA6BB33B93E01A1522121E6A9D3D5A30D8982878AD27 22FEB267E82F38623E652700239F117D12A4F6A57387A7A6F7867FFBFD6F0745 5D0A5B69C7047C7F08C5B83051BC46076FDA4DC828FCD01F9F76B8247B06DB92 99DAC349332E001332596314FCCA75B8EB22EA2F24C05C2295B2707A8DFA54DC E09AC95C953AB08B35A89A502C7523B5FC210D980672253E11A903BEA058C778 F851F4F4EA9917CFA5736FF7991CF9BDA2E3FF6F396DB02436400D00EA29B978 E067319E3F989D6123FC539444EA1C84B817E30E84F1338C62C45F50BF62C7F9 ED456A638033EF81DD0BBA0C8C664C6F732F6D1E8DA9A563C95A07DE42FF40A7 DD9D2CCEBD4490C000F0EB12F9131058F8E35ED3E75CB15305BE17BC97213A82 552E8231E504B4C96D0B62A991526C61564BC0C951335952AF331B6B201361E1 A99CBD65AFC99D3F8FD857D3B3A7ED9D9A61325F1ED3BA09E94C0D84DB1E1BD6 CE76F7E290C5EFB99759F7171682E8697067991036F2CE41D44EF37A879FC326 F8483AB36A05AB235BC73C9B562429D12DEEF0EF0F204450DF384FE6F132FECB DEBC4056F0BDE6AF45398C196A0D1E74E0B640519DC092E0DC23347856A38998 2AC14A6F4793C60A3DD445B0E6C539992653E6DCC949419E5A7ADAB751586033 D0E0826ED4F0AC5C1285FF7EE091961E2F5DEBF78CCC68FAD7414BB27A01BB46 D6F315033E9D1B5C038B17340FF0013116A0F2EE8A6589DACA9CDEF0AF6797B6 02C6DD1D56D3FAC4532CFEAB3CD4D1877FD08A06F70E63CBAD3CD3103454916F 02386321D2756BC346AE3BF1076CB2C1161817012F0DA022523EC4066F8952B5 503CAF9C6D4C5839A238BCEA65877256A657B4B938612FE40C053824BDBD2C7D 054969AF604A220F45C48A8E10FF6A833992DA54402D26F9996576191E4A0949 57189E0A91838E035C1E08D2C0AA98F91E6C8F3997FED4723865942ED0FB66D0 2DD949A5E6BE0BF2425A2EE40FE82849BA632846E486D23A45D581AE87E80705 4A13EEB693B54413B06B6D4D70643391DEA7CB26D4A48F11C37B545CBF48A9F6 4386055C383854C299489C5AEAF9C20BF82B43B2C1729ED1AD228EF77B74C346 B7EC1C36555347A71D1E950E4061CF4F57B52D5AEAEE2760393D4BF3ADC65068 D5471FD94171E091FEB2DA1294FD7D69CD5B7EAE50BC33FFABAB8184145D5730 31E689350AA72E7A6D296C3CAA518674965C7EB6E94FC0FDDBD89251272EADA9 4EF3C3CED3F243B42807EDAAA43111FBD48CC024E5B1B87F4739F68139416A41 AE5C3F781749969DAF3B72CF046952B88523F298989B3346C1AE94AD4AAF4F0E D3C4DDD52B0CA3C6DA35457F27213868C696AD6E1AFD51CDAF81FE381B38A34D 5F9D853CE3CA524D14CC686849D6C37EAD53A54EC6DA047919029D315EFE289B BE7E7DAE27BA0BAA7D24B89697F4DC0545BD063A1C4173A05AF4F329B3BF19D5 E1C65C375F11903D7CEC079DBE4932C2E3F4214D7F589355434A682BEA16AE5B 4DA87B50BA703761045DD143C23567E6AFD5BBBA8440044C5E32B53890ADC45D D3989B02908948EC1A2579649FB03D22C4AB42A27F4D3332D85C33FD195FB008 E03AD14F9B920586B451B78C1DC99CE6AEC69C0166E63672DBF451A7ECAE9856 BC09494CD1931F0531799050646C346B6EEB42BF2FB9ECFBC57C1B44364331B2 F09B1EFD9C47D3E0B5612AA08D2EE1EF5D0C174538069B2D200F10ACDB498B4C 39BBEDADDA5972D5599CAA3B4937CC3949D911197D416749D4BF658A16BD6650 5BA8D329F91A54F29EB0FE77F02F9E5B29FCE6CDA23B11EA992357C27DD0F60C D1CEDE052067427FFEB2355A428FD236184EBBD212D2E72057CFECA199B56CCF A3D11C9BDE7206978BF8F0E010B66E9B994FB660B8626AE1D4AF0DEE348DDB39 1C8B5874A217A15D46BA2724F2EC57391542248EC76E5CA1526BBE460A860EFF D5A0F3AE40BA877D8204C7B71C9850E97C5AF24CAF551DACCC48CC810042441F 3DC8044D7C1B07DCA7D3C216356F9CFD5A8A35FAAE0FEBF63AE64370BF0BFFBC 55D34224C1DE007D795C197D6C8FBA6512C1FCC26376E3A382218C821E186846 C7FE3A8A727ED707ECFCAB9AC7528E37054F74B3D128B6106CA55E4977BED82C 0BB77277190789D9E66688AF64A4FEA32E2078271F0A9529E670F857C08AC444 A46E129DD03D6D6D393D3C2BD8569968D012D1931337359B30580F390575AB79 34323E6A7CB4C8CFE453AB998F41B1917F0A17BDBE816201D3C21F174A613D96 6B4A6E0A69379FB841C35BAF6344DD9B068D8509F5CE9165601A5120589A01C5 D383A5630B2B1E1F086F7D03477EAEC46D47B8FFA41E1070870F50E28BF15780 31DABC5A352D942C9B322A864785D2966A045612941B7E44A78EF091AAC431F4 25BBEA6B9029E0003F36A680ECC1AAF8DB13099996238C76E78718CC7EF7E463 C5CCBEA4D5DC20E92C85D6D9778D393D875B8842CDD13265E7A78843F80CD765 08938812B40CC6F4AAF3534A10B59A4DF2E0948623454EDC64435BEA8BA56132 B08848E59699FAD5D15F36192E9EEA91634252F9B59D556354919DC10F63442D 43F386EFA6DDADBA47DA742685E01FE21539EEEDF576DD2BC1FB73806A4D4D6A A8F5A30411D17C82E6B44B3E7EE398CBBB4C0360339AE40EEA2A22AA7C602BE0 6FA169982C8A45B9B68C25919F53ED72F09C0A2F67155F6335BCB3EC88BA8904 4C3C8075B63E979C16BAFC6F8D7965401788AF479E8597E9752D9449B61A71E8 A2F829656290D8043B2A18F6B94F16544A38C12A4E76AEADDA44BE6804E71CD6 53C3E906663EA02354E6101C121F5E9A014DC5B820D50325EE5F03714DB8E3C1 C05C2868CC10EC464F9A0F1D3BF4AA86EAB2C23E319A62EDFB1378A82F0C5EBE B8383799FD2B99C9DE8528B9C561958C574074F3CAFAAB965694E78CF4DDBFBC 39773428B2EF2ADCB2698209D84A11582A819CACB7F31018B0584710BA6F2A0E 5D02DE49C51BEFE15E670BFFCF0F5AE31E86F2107F4F1DEE7D8F947E7C227524 B9D626C053FA117B0F1335CF986F5C6525C1B01C1FDED43967E0676C7913EF4E DEEA1D00618EEBB1B44CDCF95BFEB9314E613625D779BA0FE20A10340656D003 2E9911A1A12CC2C3EAE3FE5079E59387A78900E104C109CC1E7D42891FD8840A 8904C66B30214E4EF3940E8AD961568827224BFD71E226ABFAB007257452C565 921410EFAADB9D76DF9D7BF5ED2E4AF9D3CD5BE8C76914BE651306EB1B23EA67 3F970DD558E29384E92AFF6484337F9389C8F45591A21F039ED138EA38B75F00 3DB3903C3A09BF1B094F7DD3349855C36184BE2E264401C684A6665F8C59C1A2 1C3E99CD024B926941D6460CCE5437F49200D91E3C8F57BD541488B73B5CFC2B F6CE561CB0FAEFB48832390CE49AEA10105AA0EAF2B0081931622DE2F293A8A6 77127F33D3D77B24CF681A41AB3AF79BE9BCFE4055C5EA87462E71D4BE383DC6 58A13AFCCB68198EF397FA0F1A7402032ACC91B32DEA2B359E86A04922A7ED1C 393CE21CD818DC8906769289FE37D9B24EE0A930903A2D0C71B041BE16389E3E E414C0073C39D52EFA64E4BDDB2720FABF5530AEEE989F8917035FA58C3BAF65 0B053C5408056CF6E282EA0DD44D1E25C9B3E408EE46E615E045B0284B588F71 264504E87622C1585BCE3B7B1F378391E9CA50FF078439902AAF9096CAC7ABDA 3726965A20A91477777B8718149505C5A0318E978E7FEFF9ECF75D623FD26285 D3369FBC598BDFD4CB062195714BC11EB27FB0BC937BF8E102D7014B39441A15 A600D595D21D72FEEAB71FA1DEE8D0B3F4AF0AE89246F6A2E4B56D1A8DEE1A3B B3C0BBDB16F236FF4DA2291DBDCF610CAFBB3FE3B7988B2D82094D4A752E3CB1 5841551FE65D4214280B62C1DAF884AE268193D4704A415719DB474685A20094 B0A7C6537B548355CE366331E34181BC0B9A1993A9B392044D8A69191CB7EEBE BEEDE6FF0204D02C32D46304B6748F548A21B5665E6C1EBC5132DE625B52F9E8 5720CCDBDA7CCA8F17E35D4F3CDC7EE8B5A2A101D8F5BC8B9E76623DCFC771CD 510CFAEEB0135C4A645E9B7DF4D2A9FE4E7EE8E39643CD2E31BF0118C7FF3853 A0FD5CB3D51B6A17DFAA2139293D55CE797AEE9B9B1201D6C076DBEBA7582281 B7165B4121CEF151406595F7F720AAF34A09DB2A33B5819982A3DA3220BCCB1D F115F38236365A8BC92FA7607DA6157797EB1D3F307855CC54A94C06ADCF9A4F DB0453DE9C6AE3BDFAADC171060A99D131C3D1AC071D426878CE2F0F8A507C4F DA901DEFF10FEAAE4242F39E6E449742CB84EC59D7E5E5E6213BFED114F49818 8C69FFF4542ED08C7104A2D402CD6EB62A6394DA4E9DF5EEA294F36B3F790CDB 593795EFB453E5146B7E7569848311CC344484375044FC6160D54E86C0ACB8FB DA3FB4BF1615283B495EAC9A0B5B0FB1D0BD6A2310BFC9A326EBC982FE5EED2D 06B52F1AC50AF1B166860525B639898FE0A87397291B8BB8D7AE2CE1946D21AF 537D7BD873530B8BF512003E272F671E44AE95B81BC578C2408E8614B0778C1E 80270E429954BA23FDAA02D1303049C6EF413F7EE9DAE6BF8F60827A5133E0C1 904F3D0C0D1DB275E26A1E2282FC976508D9DDA622761BB996DBCA8346F15977 FE454E3FE9EBD3EFC8D670D7DAB41281A8386896ABEB52C022075E7CAEDEA345 EEAF8AAA2CBFAED8733E9D26A3DB1EA69B2548C9A0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT9 %!PS-AdobeFont-1.0: CMTT9 003.002 %%Title: CMTT9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup /UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT9 def /FontBBox {-6 -233 542 698 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT9.) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 49 /one put dup 50 /two put dup 51 /three put dup 59 /semicolon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 73 /I put dup 76 /L put dup 78 /N put dup 80 /P put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA 610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE 510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF 93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A 09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C 0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C 94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF 409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A 0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B 3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B 7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D 8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC 2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C 54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD 6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB 3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF 573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA 9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D 15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC 9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A 1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA 4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D 4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D 80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F 66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E 2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A 1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC 887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD 15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B 9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B 7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B 9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A 97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF 1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E 29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D 99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE 480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB 587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C 839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C 320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F 461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A 3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 097C4995B60BF4D8B3AFD0A002B3A6E4FA114131410D5658999B86DFDD3005F3 AED1FA8F077AD1F27EA249221585703F20FB70E37A26C6C3F2E101693C94612B 65BF89F37AA3C10A40EE8E49915F1A1B95D2193D8003DECEF9D76FDAA33B1AA9 CEDCB21C2A3B05747FB3ABDBD904B66EEC60CED2867442F5FE445587EB8C6D14 87A6B1B4871A8371A7ECA6A159EAB295B167CC35ADEB8512FD0C237421773BE8 A081FB687F9C5D676F2944DE6E6B639C37E8E49BD4A6F0903E0C31EAFC4C7ED2 C3C67E71D8BE2B8D5784E8A6F19A9A8929DF9833440E160945274682F435DFAC 575048CC768BB8F13AA21C6B125E6073611BE138AE06D13E62E7EDE3D0239474 E040B3E446165FFE60E20B75D2A5F9EE021B22256621C290A8F3342F0347B8EC CFA6AD68D47C05268EE3AC8683F4840D736EAB585C6284018DC94FC103B4A882 ADAEFB625EA966F3877B3FFEA518B809A4BD1977BF1902EB9F06FBAE30E8932A D1761807C92594B57F86E1E36BE9027B7D1E0C22A83A2140A91406D0289D3833 C3361F8882CF720E445B144B633F199BD875EF97202DF88AB3EBA034E510A6A2 D2F464F6D5AEDC833F8BB9BA74A6679F71D843D6BC4D40FCC68B411224212236 3B94C160C14C57E0BF68104DF3C99880C25245EC98AE48F71BE243D4278C2B17 1CAFBE0C365E96559B77E607BFFC6634D03B8E25BDEF3FD2E3D8B66473C7B425 45A646CF3B68A56D1C64C5456A61E5ACDE212CDF6DCDF6D589049EF6C91C30AA 8556424F309355355EA52E8F7342A91D122FAB2DFFDEAA78506228B49385C05B 08793E912D338712173DD0DB44C7C3281FA3D8B14CBA99A3938B147564342923 D53A2BF18D334DE5E31659A3434EAC96A8D7B363AAEF5CA4DAE67A27890C07AC F31A6BA7E4A3C2AF654C025F17FCEBEC864C0A9B7B68571CA56BFA4A249896FD 96BB19B8F250672878B67BA411BBAFE3CBBD940F005DBF32F1D682F487A1D1B0 854922FF69C8D6600E67142D651192A911ABE2602E5126FFDC351E1845A22D02 AFC17BAF941906E5F7A3C35D2DAC2A2F1C958E637A0EB5401B195FF1E1908B3C EE13700E365119C68B8A0C3471D3E7911A6734A678F43E86FC55570385E5E107 4CD618E7430A92C695F6ABA13A68FC71C573D62F6FEAE12D6C1EEE1F1C424C6B CFF56BDE7FC34F88A144A62CFCE0D377F8BA416827181FBC7FF8538FA19B1ADA 1A12DAA904DE6087D90A750CF8B76F97E3AE0BE6F65145F7E99F566C8D18F817 532DDE4EC38F5127D404053F3B6CB4694D9973209533D99DC44948178F9F976B 697A04799D7FCEFB13B347143472353503A3DAC56A753E96F46E1AA1D736D7CC 55E6E80EFF0FDBA4A7728E5B5BE6A98BDB93DF5E27253D9C646B595B0507DE97 CEE5379120D39CA5F22E3952261C0205AFC2A7AFE07F0D8352072E6455A62FFD 3FBAFB256E0B4288E8F6B724CCB0913026D7B19435183FEB0E7FDB7DA521A9DD EC933881FABA422199AF4F4FBE7BBF8F89F4733A31CF7814673A4BB142CBF3B1 987E1BA9A6E3372A3ECC943A373940E4411F69F23477CDB2638C060A96023009 555378908A27BBB6DA89D5D556A536E38DC41FC66F35EAEC9C948AFB2A826A6A 5E8DE93976448E0DA8C81AC71B78F76FB1B265E446C05DDA5E049298BFE6A4B2 DE4053742E11EC7FAEB122D6E3E30D91F075B38C7A4D0BBA4BD4EDB637BCAF9C D2A3E27AFD24071B4CB37722D8027E8604CB80E3EAAF45F7098F730B11016E29 29E6E8460703BFC901B4314A825C3D1783A46F5947A46CAF30BF4A66C7EA7ACB A63A3FD2FFD9B7DD4D72EFBD5C0314885AC7EDEC9C04244B07CAFD993B9EF84A E12A23548EE99CF89A77C5990687BEE34FCEC3EA658448015BC90B0786E5402F 9F432FF356324779145310A982E269789AE091E430A0F4C9F3EF03B93C2220E7 CB0627B8C4193154081CE3A57E64F659ACE95511BF4FC4D4D4D78A503B68613B 4E6DE03A7EAA69B0C6EF0C08A117D3F1416D077BE519E668A3D7826C924446CE 08FB7DAE6E73301DCEB2312BC57401DB7CB38F2ED4567735C4792DF450C91F28 35AD53A70F762499AD712984A65BC7561CB0B0E9FFDB1F961284DDF22C42DE23 9A734C6EF90E453F1721890BA4056EE43FEF8743407CFDC3A4BCBD0D74CFC14B 019585A4E0055F8A79C1ECA2EB40EC0639BEB7F11F82E006C772173319ED3765 ED20E579EAFED984C0F83C694968E8BE5000C9F9BAF72F24462164578FBE03AF 8779FDB09149BBB336335C58575B0476E8D97D06CFE4F8842348AAE075872F22 6CE687C9C127C17720B7AB19B734670E7F241D493F71F7F670E3348E205E1243 18D645C5B19C1F5359CCD9D3E9B5167BDC1FDA655AF47B45A7D15552583AA514 FFC9A9E84D5D3EAAD53C17F42F650BD3E160635F8A4502F31A8781A72D893AE4 7E65B5C524F5292E2D6DEC4DEB56BF52D612335401568F3B260DD73FE1E92219 0F3FCDC127A654E3E258DF662815A673845C91131CBFEB5750A3BA225892FAB5 2BC7341D758CFFFDD768983EF8CA9082CE935FACA20ADE200C148E4C97A81E45 BC7C49D180E7640AB9CDEE1D03851AAA9A5DCF5EE98BA5AE501AEB4DD6C188E7 8917B66C41523220E0722168D50264F000046A23102A0302F68E3A17BB370456 FECA547897AC46F4E91D7A82401AB537041F144284F8A7AF17B723669E9AC554 9A0F0874E4C471E01F2D53930493C52FD6C61175A67A4E16EC362B6CC4B242A0 8AA814B7ECB7FF829F121E9016CD0F9E4DF347D00AA7A30C148BBD5D857E8685 00B284B3CA2F0DF0E7C5871A1F2107A2AD69517B3DD43591058DD5C628E27073 BE2A18DF6E768E8E25003F6A06FC0173673209F1DB7794C144466AE8B5E1271D 37E874DCA477D70AAA8100F75425DB765BF94EA131CFE379632CFC31D907DBB7 9F1C967FF459F490EDA15522E7C6E0399E7B76642DD67B2310987936074617F4 4750B22CC1BD7AAB80B2C764118F317852B90580C369324CCD3AEC4B62D43004 1B51981E02DD34A98B01A8508B189DE0C4E83813721D3B34417F63D4A25F640E D09CAF6958C35F1E1F17F2C846A623002A91B9FC2689D944F1BC4F265F71E3DA 8CE72ADC538ED824DFE439634392FAE73FD525F563158CFC77E0E4F73C6E2297 D9D1559BCD92805B4C92EEC03B61F313725A14BDB45D923733EE78E33EF3F43F 36DF9D01307833C59F0F385921086E0888A660BA2F78AD31252AF074602AA100 E149F7EA08A1F6BDC3895AE0090CC1C43545DD9C639FB9B39D52F3AE78BBDFC2 A25C3AE98BEA9DCA8A4ABE31096CE36CEBE9BE231D7567115FD2FCA246ED3916 A041B7B38140B3A85C1AAD83A5E7D540F3F5EA71B7D5A60E6B278C981962297A CE19E330B29652E763300876007240244775D1E3D78A3CA90A2516F68BD02677 54899B8CDA19653E67C5B7CD73E173E4234F116E85B9FE48C50544A644523FC4 E7472344E92271838CA7C85A11B028AE10A02771D3ABDEB514123D947859EB2C AC95A65233B92E29C00FED999E4ABE5470C7F5661A371B7E1D65C57E7951CA42 89B2D52283208ECB114D13C0049ED6D128750D55D3230DB53DBB5D26DB7D2A6A 1F70AF774E25ACB2037FE312A5EEDC40694A38BAAE1821CE515197F8D950857B 7AB5552C30B3114899951A421299894A07249015D943D128043D14AF40837B48 14650157A807E412AF4E9009C281AA161FA8EDA7A1B59B6DC8C92056941127DB 8697F91BEA0847DD52FE27EF171DE0B4C6A03AD86C61C8A7D60ABF434FA8C7E1 BFF12B8B21765D09795176CBCB70BADA370A6D5A6C55DA23C09A23663AD3D4B1 3BC46E8DD66F74B8A9AC681A443F0341CBBB9920264EA6A1591A69882A46EE26 0557E482A086AC5AB23B027D10E4B939A109DC2DC98B6A5F9E4CC9EC8D98FD54 FA9540F5905F03093983FF900088332721E33B06CE903E133CB8FAE79C72284E 05005AD63DF217244278AA0CF5E02E0686857D8DE1F74EFC620F0E2A0CDCEF00 11D89F33A7CE21672FC42089A81A427AE0806C6E5E5C954D1B5DD54E00FA4CF3 B628A88CDEA0D61147962F5812837FFE6E7EB6043001B7DD871F4A5FE994CAB2 3F5088B577B1A80546DCED65F01893D51D2F5BEB330E1A1F7537D07B3E1124A9 6E8F443034498841EB49E467791ECA165990D265D6B7DCAF0518A659DF3EE073 01EE946984292152FBF2FD33363E2EC01BD6D0C64FEDF18AF375695080B9A152 29609B360C1E08E04D685E9FA0238FEFCB44A533B46E69F293CEDB3497A252B1 B94952182838E0BC28D7BDD56D5285179C325E91B3483F678A6037B67229E55C C6DB7175994B3B968FBAE1AAD369A61DB153FBD4E85F656E5BA6F47FC3EB9ABD E877461DA4327359FAEF13F31648A9E2611BA9F8F92C046DB0C790C9BF7190C8 6664A22A8DCADC378C434E63807051EA2CD0C8A068052DA3532B74BEB7523FCC 3E46B53C228AD100C962BC17C1A6120B22BC9BA7FABCC73C8D853CEAEE0CE4BE 61361522BFB29DAD47D8C63161DD149DB3B4A56F69CE6F06E0B8A0F5C130795C CC75DE509A39AB65E6E948C57ECAFEFF85E48A33A344BCAC6D2B3A9E147CF412 44B42D1E1999749013B86A54ADE9F21BB47ED0B9B0FBE6E04862CDF0A6EC36C8 E278993B652E248FA402C96821FE3B4AA0A36E48897A176E3D7BFB8CAE2FB727 67F1C9F310EA97B784EE5314972D59E0FB1DFCF1CD627228CBBBB78EA9295DED 3AAA3E0237DE3F86A76AD6814D05355B0296FA57F55855AB17CA33082FC055FF FD15B98195A545958A1F7695ECE82216010A3B9B9E9F7CC95DB7649D011749B3 6B21242D5C58C7F627DA1DE432DE5DCB6701AD43BE64ED5E129D654ABE811E2E A8148D1C87135BCFEB584C62839A13D1C3B9E3AD1B07E8F39852E90DAF725A61 575F6D0D884A6A362BBDA1C04CBF86CC9B38F248011F18BDF2AD86F59FB9A748 752D1AD5D0BB7868ED11C7C5A97895502D9955AEEE1273BC97B3585BC8E0F64F 89A91959FE49CFB9E5090AAD27F3C9D9BD15E4CA2DF2F237897CA6945BCB862C E353B8BE6F2B1D4E1BCF7226494A2F1FB86008FFC8F5F461176B53A7BA4E03C8 4FA72ECCF1F8919AFD9A7A886AEA9005B14A928D52997A7FA77730B4D1E7D366 50E80C99E8F04D78099D320F7CC45791FE45F069B794A37F2C4C8E24002D7487 494C7A1122751CF6ED23C2F991B65861D809E0EBDB71E36408FE840959AEF3E3 427B1C3FB3F213BCF32528BC101C0BAE5FD1B874189FC51B86E821426F37CD4F 98726B1553178576E8CB2CB6ED773EDD4FF7821A3AA19B5F170E7E0064E2D2ED F6237CBE00C3B7851102D8287D23926F21977FF11935EE0C1AEACF76159FC031 1D522D600DEAF60A76C49FAC7EA9FBB25CEAB8EC0E06B55F5502DA23DE3E429E EE8677FAFA080E9644BF2401599E876B7D6B534A228DD92C137DDA792F24221E C16A7C5CCD2AB7B9F01C77FC23EB879D0F6023BBF59822DB6AEFFA993CB02BD2 52214DABC729DA7939DDB909EED4B834E328459CA45AF906012BF058AF847AE0 18EDF77AA15D12BB3F01449C225613EB5D11D93882F7F05E627E42F2B799BE7D 9249C8F9226E929AE04ED6A51A66D789319721162E127379EE9514AB7A8308E8 B3EEBA20F0C558EA68068BA71C9CEA158F49C295D5CCB312A6952B49F93BF4BA 0643969797744812290640085654BDAE5E5CE8A78B252ABD6E2E8ADE87DF953A 0EDF7411E58383B6A269D928DD4D3ABB621BB4FEECDD9E84B29452859B60222F 170639491FC6F77F39A256341FD992156CBC45213AEFB43316F2C3E446D7806D 6F56245B738E0F7CD2E1BDF80ACB163D425D05583AE7E7373D687F079F4A28DA 8B6EDBAF5C3C741C2BBB3D33FA4FFD71AE242E52F68B6496AFC50097EF031824 E7E43BBB6020F93BFD437F06CECF02194A8CB87B2652E97063FECC204E4F0398 23743A81A2EA02BD016791E99403E67EADA4ECA4490279652933F42857351217 62118964338C51F534C68B9B9BE719C166AD3AD9ED522514A99C97E8014D5852 380A81B5890E0A277102130BE0969E6DBC015F676BC0B3B0DE30D07901B10BF9 45B89F18EE13A0D617FE3ECA8E6EA04652AF6CDC7F009A52B531EA70522CC31E A0E91B6E9D60EEC4DD7F92B9083C7B019CE01AC885F6B5857AFD4123B1B87E58 F0A889C898732E0D079184450F12BBCADBB249FB593D81738B8F69DBB5016F60 3048F5C1D5CA2266259DD2CE37CDE4A7E1633C4D3577E390521F8A8D8BB7F6FA 6063AB1089F18C8E30F87727C4CF78D5C54B0464E17E55C4347AB0EFB810C049 C2307E4F520110A137DEC343CABC1F642EDDDF233B96AB7F8416676BB32D2479 65C48F746E7019C839414CEE81A03DC435F10717A85286BBCFEACF24C9A671BD 4820BCBBC896A30DA3450C4F4947CE3A07E717BC789DC4EEF25CE4AD2BEC0411 FE152A289C1D26C9508D206386B65AA1B2AAC060163819C8496F3609E291FA71 B29E5A529994FE4956C4EC6FA95AFFDADC2DE58ECF6C6E160D3306B8FD42E398 4F9C0900EF120203684823BF309F03E23195F2848F51E321DFFD9BC24B6E3BB2 474C7CA890DE8C0EFDD1085D37FC800173ECC63FAFEAD51B681F964EFDB5C0B2 7DD7E8EF6F333497B3FEB72FE035324FBBB06E7488441083CBD10F2E6024BD4C 72A0AED77847FBBADCA8B2880D3CC8E04BD1503C70DB1D8DA1C2BE303F0C7CE1 7673488237350657DE4B7FC9775C13B6231DB84845755755F67D4ABCE6F45658 E17CE8FAE0CAC26733FDD493E15CF5D1AD5BEFE23D6E1EB335A3706E3A71EB22 40BAC5D469EEAB3686691127037D50A7B2AFDB496D2B1E9FAC69DC1E83A0D833 AB839AAEACE34AAA0F4272774E7DDDA88586A381C6133F12A41EE11FDE813E59 B6E5C3914AFB7F786C39CFA9C5A8E73D49B3511EEE9AEBAEED94B8D559DE5CE9 CBE6BD710215DB65F041A230740F28BDDB46A89B38AC8767F252ACD1B297EA4C EE114AAB6EFF10D398CA1B788AE63B672C867474220F6F20FE9F0B1AC1650B2C EBB80EB68D62024EC5C2124F3607DF8776928BC25867C4730808308FBC326156 5A99B88CD042F581A389B459A6F8FC484EE8C17DE640C7928A78CFBB9C6104FE 004009DF77FAFE4E1C092F6E5FA048D771D7F25AAC0013D0402A1AFD1E8D0515 BFDC767DB9BE89407322857519236AEAC3A076CEEEEE7FEECB30B6751EE09E9C 472DBDA84A3D45A6CD9B9E7A29FB31852315389E7038F57923EC9225803A6A68 7EA2F3EF394AA6CCB8336F34F75E2B5E577A4724663A0A35338A8E95C989B9C7 CE48B675933214EE6FA7EE94B3249ABCEB5EC75A714C30CB88E27B9752DFD3DD 0CC44FC1E3230D92274E1F35429B377DBE57867A40F37B8B88260C3A72ACDCD2 C8AEF714124B838C638468A9405C46CB2BE67A118A117FBE0A0CAFD9A36D2882 516B94676566B98BFA1EF6DB6D7258F9420EF010ACB3DAA97409CB272A60AE22 0E03F9C40889C514E3A4D1BB3A10A6DCC439EBE37D8C28472060DB405F74E855 27BAD6D66BFC8CCCA038F5BB9EE0F5F1EECB64311A731EA3A22B52AC2AA9933B 7909A46DC299C3D701527E734C339955325265C0D5A3E30B1506239F803847ED 0ED27F81C1B982FC881769BB5DB178405501DDD2507EE8B038FC9F440E849736 2CA4A7CA8F25BC2DDB645DC96DA317DE9BA8A2207329D3A722D2D15663E47E19 13058EAFA7BE4635666070C17BFA087FEE6244495F5E5AA6CA1FF1054215E9CF AD6160126243C941031D3675B73AB83602B8FD765A81D49A8D7AB9A3D107BAE8 234D9FDFD2D720C1894FE036D249B7A19165A744F8A5D1C226258F8A6ABE0B3A 65DBB2E761542D20EB327375A1B6738F0814C9273D30863144AF710492D90C61 6861198193A64E9A6BC1093CFBA2890C4132D1B9F0D133AE52F0B8A39197534B 22BBCF08BCA93A492FA327E92008F42BAC0AD14AF049D2C23CD92D84C9749282 FD4A491333DCFCE526AA22C2C68C1A85D18199782807725C5D1363A72CEF75BD 1ACFBF1B64590C6A24F09B6D4E0C433C49DC99ABE220361E98D25C594253DD5E 903F487B4C2553F78B70C03B8E3658405FD8427065ACE263AAE8AEF2D92ECFDE 71DF9CB7DD61A9EC5B0AAED868F91423A410527C057D8F543B93DA02F40CE88A E4F29A755430068AC26CF97EF481B5650AEDE5E6BE6E03AAA2F1BB0D04507028 26C0166B4F91FADD73BD4C557C2B3BB477B3A73921821A704F18103489109533 3B7F59422F9FF147EED3FEF9BD2EC6EE9C4305593C5563CB6C400353EF3DF249 0E9CAB7918B61706BC300A39AEB4650ECCF7A3E9342297E4E6AB177F6CB63BF2 C33DC31FCA946D8B4D33788CB6C91AACCE90DDF5F1B92DC2E7B2D0E244F3C893 F37B7E2FFE10EF0D1AD762243840BBC99232B1CAC7A321AF88D2BA62B55E305E ABF6323CB529D0766E0E8F4230D9EE5BB6863B605A0DF56695C01AE054CCB502 1905489F1A486FE00B284356D1AB83D27BEEDAAEC8DB318114590D0324755C61 18521C015B5855F0992792E644D194BB3F52E4679659FC4B8AE383F7EF29ECB9 6EBEA201A8875DEA6410CCBF09BF050D08182DEB13264F55E0F5FFAC218370E6 5E9C8AF9E349856AB11D393B583F4FEED6EB4EFF9727084D69977D67EB7B61FB A79DB726E75FD817270B6CF8C8D0A57A6F83ED03B1D3DE572324E7F4BD4D1B99 97140FF18BF45B6198202AB9A30DEF4ED9695D5FEC15942FC363E9CDEF782F04 486F71CE6BFA5E8D53C969065D990700E3485967EC03EFEAF0F479CFFBED405A 2D29B98307EA5D4E2CF536DA21F66A961F9A860EBA38B51EF6A106E009DCF099 B0A2DB3D768850526B90ACE82FB6589D3459351DF1CD37F9CFA174D2F9597A50 C1033304D971EC0C2314B2AF3E665DF1B53F751E913CB5D4808501B507059879 769E3ADCC2D8E3875C7D6EF7E7CB48DD07E2F0B415E869D196B6D0B8B80023C5 7501F75710AF487BD35DBC56BEA988EFB72A60D37DDB34A3E16E4C3302041FED F67725B1E85AA62C438D812902CD301CD6B0711356956B3EE81244634ACFE99B 695465D6249EA7D73F0530B7A5C6C321E52608C33699498800E0B496288D2C91 F85FE65F17A7127E7B24B965CA8901ACBADEEAC73A7DE07B53966F0A5D857486 674B6BD44831C3DA3914E72DB66AC7F1F7553DD8F8125779348ACB28B313A5EC BFD42000EC537ECF0A191364CEE8F7557697852610AF5C00EC2E23DF58BDC5B4 D7238CF054E0019259CFF06D29A7045757429F71ED61743C71A6CD09D0CC9DA9 289B1C880D8E07C79E66FFB61682EB3162821C9DD3161EEB998269A42D64A160 9E07F3D060E6D9055636B786218A103F8ECEE20933D1233FBFF0ECF9F01BAF09 560441BB6A0B6931192496CF3485BEC03F10581B3C8936A6C3BB0C3D4AF346BB 0FF8AC37DDAE5D82561F31DEA6107119F89EC25056E7FD5984EA349407EBE597 BD71E2EE4E8034690BF158D2EECE68EA603FAD5E0258CE2084F898D7C7CE7625 3D8990CAAAF8A87C730FCF7D9DA3E5991545CF680CE9CFF96FF99F2660E2164E 44AF04EF697F3F3FC8940BCA00A526D8AB419FF20FE6A0A007301F9AEA8324FB 5B069EDB2AAC535F5489F723BA457401417A63CC98BBC70C26FCE973F4AFF4DD B3F3CF7AAD27AACB8C23D7E421D512A82259212FBA5D6DE572A40D04BB05D470 EDB61AE5E4358F11D3FE840D24AC2D9CE4F91B3B9A357CBC8DFAFC8A0776DF14 32A016B0D5F8226A7F3FE390001BC336024657D1F7151DF5098030553D71F87B 6A5C46D286D0AA3E946538ECD82EDAAF2C6B608041945232E52E27DE9928875F D2406BA32126FCC92FCA719DCFFA13CDF0367E294AE6A4DAE01CC1D70E59AFBF EAC961C6B3F63F3696FE3105F7980D24AD4F14BF7F35F84674AD400A94BE2A02 9F243BE2AEDB5AA8BDC1A3FD5371E265149C110754A70412B068828C611EA981 2907E87A12DEE88636F904F865C6CA994C0D139AAEEC147A2ED1955F527A7230 51D5266D8C7CD0A1C1A9EA24CF1E65BCE6EBE21E04D7C94B0FF6DCE002F05BCE 1FDFF4F6BB1C72A49CE1A78A2916382D3DFD5A8A9E6D27C170D1626B702231BB 9921646CD185E87A367BDDB9DDC2F2239F3CBFAA9B73DDBFB2E5A6EBDCB0902E CD432D6171B96245102B362BB07BC33B677CD115B309E98C35E02A515BF3B651 99789B6B3C8E81C983D1AC9B9E53F4B3BB0AF40D3861C206272B07433C091734 8123BF670D0BD74E04131F26C7BE882288C3700D0C3E804C23843BBB689CEE18 40BF8DE4C4A90327099E286377892C3BF307240D0012C3BF05551B1D66F57F6E D5409CF3C82F5AFFD40FD83C998626CBB46EB5B53317DB98C7D4C08F230DC51B 393211EB6B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMB10 %!PS-AdobeFont-1.0: CMB10 003.002 %%Title: CMB10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMB10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMB10 known{/CMB10 findfont dup/UniqueID known{dup /UniqueID get 5000761 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMB10 def /FontBBox {-62 -250 1011 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMB10.) readonly def /FullName (CMB10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 89 /Y put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 103 /g put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D432E1428FB6D5BDAF 3F02C975AA4E0072BE5F8CC7D3D59BA3FD04709FC9E52189F55C7747056EDBF5 F85CCBDB1DDE9F9163AC7158EE8DBFBE8D94A46510118ECE6A280C4872F448F2 E6A6B36AE3224FA448DAF204D1C998D010C6BF52DDCC45831DF1EC22528B00C7 70525CAC9F6BAD892E7D5C81295A2AEFA8A5E4B6BA2C4EF61FD3FECFA2A8551B DC84DAC597222341E762620D3D3C1A4AFF2F6D68C4813004318FDBBDE23AE224 617F7BC1F3846943E915624D6BBFC555E2EDD013F190492F03CB64E5F2403723 7A2D4652BFFAD1FAA1DBA4538F2C3E608367BF95E09B853A2BBF9930D9B3BE46 0BFBEF05DA75DF3D8E11A09D472A9E45C626428A1A599C111ADDEC7A4E70407A 014F792395A2A12303EF51698D487854EA15000AB08BCCA8B2E35A5018F5460C 9B223315D7B838BFEB224E8D1DC9A0C1077DA31F5FCE0D9D499EB0507B90E9A0 1F92FB5FBB8D40568C1E8B8CD6E1DD27CAE6E107AEAC5696CFEB19091B40FD77 7A4B4F0F261702BFF5E2320C62EB5C6E9DDE142E9FC7DEAB99D90297AE0F15A7 04C0E3B39FBC85CB6B92BDA7917698230B5374D9159807ED1D07947D95802693 A856C84812ABD3EBA336B88CC8F37288CAB59790B0882A4ED6815FF6D7A1BB35 5C7B7437D2ED76E806813478007886ED1009A1E73CCE210FFA69A20D6E05A713 F6EFAB133D146B0EBD547CD29FFE7870973C1E71854C1C643BADC69974BE360A 4CF84FAB098EA3DCD2DD8B2FAAD19429B0ACC7C312B03E6446F1C1D51E6AB45F 72F11FFA078DF3196EA970B24B1BE607571795A2FDC2EE7194E9422C483799EE 23E16A737951BB935EE2C2BF008B6190E0138D551E75C9E6D0EA48E64E9750C4 BAAE32B894BE25D092CFAE894230430E43C585D0F06636C8D56BB80A4597A0AA 547FBCF12821C20F0E62369E1A9CD2343B8A8647B2FBB1F4C86CAB1F7A14669B 69DC857F9BC7538A864E523C2DF7C830315E0907CB17C8FB6E412A2A9E88317C 0026A6A402B36BDC433015AEBAD775835E5ADB4EE75FD8CA06C199E000CEDF93 00692F29C5394DEE45DFF2D42872B1370C8D4A14E144FF36163C849F9339AB97 EA87BD445733162A34E609BA1E92DC92F9AC892E7A0B39AB0FFE517856491695 56155FF0C2B231EF1314CD4A146EDB1CA9AF7DD546CACDE1E6B49BF0D4ACBC09 55C85E2D38DF84E0B779642F7E9C26CE19EDBF328104B9E803D1B03F3FC24C4C 9EF0D27C8E5AFA420A63981C000A0C1F0B3D3F853FF300EEC524C586376AF998 DF4ED5AA16D8E298C159C2A3E33048D4EF192A11287F69B11BE24D49A033B334 83CB8783383F92EFB9E3BE84CEF37796BA4211E534B0360970B9C57EA7CB54FB F582789A83113ADD2415B3F84AC4ECA15DC70878A32559198DAE67B083B0EE6D 68A92511FA8FD6BA88A42769E3FBBBBDFDAD61F99A6C274B48CB044D16FD5953 44F1503D8D1D6DBAC41C1246A71EBCEE5B1F0DCE3EE7E3A99792DD8FFBD94DD4 3A5ED347A62D301B6739AD2BCCC7C57378C29FA5A83759E7AC6F1505DF6C0E16 71587914F698608AD93ABEC43611DE709ABC3F1C0A1343CBED5F09DDB4FACE0A 8BBA9DE5B85FE9B4365358DFE877BBFD9AF08BC60BAD7C41433BBDBA17EA9A7B 92F76358612FE44F43A85588DAACCF7846ECF5C58B22F18120F895317609AFA1 06E88CA1D73C4CD5098CF44093207C31F46977B6D22665AACAD5A169906640F6 3DFFEB3937BD6CE1501C52783743F8F6110DF43ECF512D49A55379432CAB1C33 7C38B7A38DDB91F0683A052378CBED8BDE4E6DC32FFF6D723A4D1469D32AEDA9 FBF89B9604656DD0D44ADFAC39BA893808676E1E08444CE56F6CAFF3E93D8D41 F164049193BA11AF94B43515BC79D6A538C00B08FB518EB67C27E73380A651DC 4B244E8A2E4ED405EA5C7EEDDB09D44C458A883C839B98D9D6A2209516E0310C AD777536190ED06F47EB2ED61C53A2E0AD0CA4E4035324DE75F272B1CA6BC1FB B912807B7331D932DADA30F1975A1C9A8B55604EEE8A0CB514C6CAEECAF9C46B 5D5563E8934B421EA1CCE3B96412D78DBEEABA59FC603CC6ECF65BDB5B66EAF9 14B852CC04286EBEDD560713090BC417A10BB834944E007F45B61AD6E6150B9C 10A6FBA56C1B45EA5F9A5379B1A0788513DD4100B82BD61D89E6841A26B362B1 D4762EAF4FF3BEABD882700BE9832115405728C5292BE942F871661EB0E6B29D 430CB271A090B6F5399184F21ED6728171B1783C982E61DB7C0BF90CBC1482CE C6982B4F0AA39076B64CCA5A71BE73CA65F2CB60B89AFACA957EF8E6429F2182 CA36220F80EEC5D01AD7061DF45CC5109D9F0B7E2B6DB9D6C6326A45DC6C05D1 E81B636A82592D99C7B7ADA0E958A0D7570BFF1830017A6241AD62C53D4CB36C 583672FBA265142DCE545F4855CA3D9E528143AAC66EBC9527B76EE43B4F4E2B B209BD265D6AEF18D168CA7BA2CEC40DF86FF352029597A5A3B2941D467DF229 50C788D4276C5B400F360AB596E35983262A215047C9714912B2E69CABC0DBDF BF6925E19EDF3A6638CF5794722C8B92C6DCF5853DF288B9DA52A2152F98227C FC04D3C318E7D942E9D33582A490888F0C1CC1A8C4474091B4956222DE467632 33CF5DB7DA165B59A648AC6945687B0ADB83EF5B286CC469B2C9E4AE92ACAE8E 86E4C62A092B8F6C05EB2ED346DAA7C573A03760ADB3CD55B6C794FF4463BAC4 2F4A738F9C4237107C503A7EBF4F4BB4380DBB64F5F5C9B268111752FD2204CF F25085683D071FB4149A64426859D407936A3D1E2C627652C126D8F9264E2919 960ACB9DD61BDF973492CDB1FD20EA81E06BECF5E164A8ABAC12926DE1CBC0FC 6693737B4875F465B5623C899FE129B3A52A2BDF104F8B8429890AC870580C7D B078A9E26C322D1A8AC1C6B2BF340813D989EE8D054882B965905D33EC3F4278 DC41BE055E0E5F73B5A1F45E9E69718F5E155B4EA30B28BD28C52C6C322F2E84 674CE600D699CEE1D2CFB7212BD8168B45824890273A0AAE4757D112980DF2DC C3026300B4BBC9B081817AC7F4D48B309E66CC7455708C772A08EF6FAC829363 E27AEBC3E7D0A91984C05935B16E102E81D6AAAC347E38EBA40125543263BCA6 9C6F4AD6BF8C3A90279FCA4A99D9290C3B8E0DEBB4B2DF932F66FD47AAC3094B 7582FF8265CFF8BBC7F79C8C74B1FF94B26F3817A39B5FFC6BB562BF6DBF9CEC 31CC3BE4D7E431D41D55D96C4F020486F993781828E9E8850192F9F6BA350AAA 5E292210B0EFA4061EC8BD6EE15E3FAA4AB2F54110D17D29BA32C0D28559FF32 D164DCC98EAC78822D6D6AC6F4871D47290A11C83670374F072A9DC723096C89 EA584D43BBB13584D9B8B1820C415DA2E0DCA1B50655E81B47B9AC8343DD8FAF 95F4771ABF81361EBFA9259EE8901F31C21E95DD22FE04BDB77D23DA561FFCE5 A7708647AAF65FBA2FD95E843D839E5734D4C08A215180C7244924E002A965D8 AB29470A1B86065B4133A9A6EBA05EF1AC67DFB5ED8DD8C11450233D2624EFEF 3E6D3DCA7E23ADF174BC83AF25A1D7529E52D39C27DA86A2DF4BE4F8A96361CE 7025BC1954C75A765ABC95B4AFE0AF5474653E6808F85893BE6ECA1A37F8B666 05A9E9FBAADB0DD86848D6FC48A1000FAB396F756513798E09D29ED6DBCC8466 40181BB71C92CAAF8E240E16304DB9F4B0FB6880004A0F9AF6228E60646647D1 669577DA709B4FDB8721B95B07B4599652A303FFCEBF858A41F08BF3B83EBD31 74EFA947A8ABFC7467D6CC544B655A7BD4B6A4F5EA9BF11CFC9CDCE14FEEDEC5 9116A3FEF962932F8B105BC4C51744916E8976815AC286B1E682D83091E9C533 839223A68B9D977C41107F597E05C3D8C1C3E79542A990B0E8E22F34BBDD8E47 B6C2CAF54B72E8F0E8A41DB343934FD2C33B6D77AF2E9061C4E76BF258CFD615 30AEAECE9D04569D358541C346C922A01D017BCE85D4F083AA9B6939D85EEF29 335D1BDCC9E6D5F7F58EC2BA2D8CE50CCB38AE6A2DE2F695B76831F8F591BEC4 EC6391563D18E4169151F552B5E1601B1DDA6F93E5C8B5F4FE63F5E002AA3C15 E0C8DE2C735EE00E9A2A01530FF37B7FEB0FB182A4E381CF1BBC80D743209814 F99002980CEBCBE3E677005766CE1D0AF4DCC9F103499D1961771FFBF01B833F 1701EF6EB1A381A287F73E519C01084241335905661B2E8B86B398C88F39BBC5 09FACC1344E15CC7685708BCB3F43EAD4E24A84AA0687FCE0A2178D9BA84EBB9 68E8A727DAF9A0B28A7CA3B119798603F9BBC6728C5A6B4BFC84C95DC4F36839 C2649E364CEA39A4EDBBA4C0E27C61648D38CA46B64E8CE797CA3464C80214EE 28A1E58B387AE0A663A39F04F57899ED62FB0E542EA108AC32490B4B2BC068F6 2087BE9C9C3CBFDD80F2E632BC4C971A79A0A3C3A5607B997223A9F6373EE51F C58EBEE7756A391C91758A1F6567F532A5EB762A2927F57CF9F0E845E4F66B3D 8100D1795B706FD32944CEF24A054650EC911A54A22F4F35E3034AC70F07C98B 8DD43BE9F7D68C50D6449791F5331A189706D9CD18417348B9F296D8D01368E3 2523FCC0EF33B998FE925B4CC7BE329B32D6AF791BFFACB60E4874412C8C8676 34914A453A592C7614AEE5001DF3E5E8D9335A155C65174B940E1AE61ACBCBD8 A41D7E1C6FC0680E094ECF65C60CE714E6EB2A1897D8A3F39FF58D64EF7E9A41 4CD8E55BE32CE8CA29239A9BE3FD6B1DD5CA5A035AB1FE57CAFACB8A39B6A877 C853BE6BAAEF5714982FBFA414EC128B61326B60D83076E690FDCBE3D2AD256B FA7A15B804402826684AAD933E94853CD0CDEA3CCA7DC833E486F431EC4764DB F3FB244DB99FA0CA2FA14DFA75A326385B3AF92AF8E4C6D437DC3DCC07FAF25B 6C0F270333ED377B08E498BC3004C25C7A991DAC9A3E0D1FC43E2EB6996C7269 7A864CEF35FE312DD8F87E37AC69490299CEF9B059EC7E7492D1D6E5640E0AC6 35B97F7A629B6B7CDF3BF86D2B518EA807B03E4F79DEA59C84D98E4C94102EE3 71A29649ED75F5ED02EFEED8064E2D54E8F9CA0C4284B987B81B7F41FD7DCAC4 FB9C3ED70774F9FD09F3321CE1D0319C1129F5868DABBD183045984748C8A3E4 53E085818729A1353B13C78E63E837DE483E9E2ABFDAD16534420BE4D7976D35 F56B86EEB90F663E9778A6E0CD698E6324EC2D19901972B74EDAB8F4073E4F37 89082F08735E8345BA167B2B76C77703C586CA5DAF41C0DD0E231184DECD8A9C DE8FD239B6CC636507A5BE6EE5283C06A1D8D59E98A31AA76F4D358DBC641DE2 ECE3D9F2D262FE2E878E909A950A7642A3F59995519D541B96D459F24F12682A 9AE61FC08CF436D9DF060DAAA90884A1281B370A2F824704B5347FEC65E14E7E 3D212E29723427BBB12C1CB91B28CA47D6FA8259A875EDAE4B49C33B2F73938A 784C1E7A7F21873CAD55A868A1451B070A3F259A983293289B131E07C903D7A6 3CC66CEF8C4D2B6736282896A2683EEB944B67240CAC5FBD8A1392A875245A9E 2611B511909A041846063E465473D41958104E92519C0F86706AD640FC6CEA10 620C9718C4589D9D562D8810CF6F461B776D5A1B040F8272D43C029C2A695D2E 86CF508C4AB11104E575E13C2EF56914E241279BE0558CD3D59D25BF13CE8212 3D7AD1F25FA5A9155AA06306C7CD0F49E3498856318B0ADF279731E1769839EF 98657EE73CF07B0585EECB67F5FF609E0E3DA1B78F6A8FBE2F2E0C051237AB4B 1587DD72BBFD962E865EAE0CAF1A5C592F5019C7533BAF297C0F78F3287838D6 CEBFC8B5969486A5134DA76B4961C8056E1EF1F2AD17F19D7998175D66B3149A 2CF21CCABA281EA0345EF50C1EBE7004ED495C6D03963B639A66638A43C049C6 DCD311B5F86EBC814BE42D432EEC87B861FCBA9C8729FA5AE87E20C5B30B8E5A BB41189A42B9853CA408BA01A559CAB722AAC3DA28E70AD79E1BBC8B6FCC937C 180B5C2E20B03D3FBAC60C83F765CDCDB3146FE5C0B02911F6E120D63EDFB0B0 86CCF83C2AB62922450206D3701588B54A8B232126BE120432E6BB2E25C50B13 708D742A44E20176C54FF89F4589B10D5396C94625AEA1914AC168899FE7AE9A 7D90DA67A5EF3DDA25CCBB18DBAC3AF4AB889528A381542185821B96CCFB4302 987611DD5B5B8514FDD7F5148D1BAC9C34567F75EDAB317E0B8A7A76604A42F3 1D46332C4791006DD1AB657308CDBBC7314592707EB163326E345C2C5EA05B33 01FEA5B7A346E6B1B6EF58B692150C6116B149B6A26B493674337A9C1CB4F42B A7A80AC587F9BBD7A487F407EBBF9978840A01B5E7E772DF7EF28481E7AD14F2 424816AAA958320A0E6F318C757A474F7B05AC0F570094372CDE877B479AE3F4 90C257A2B3F443DE43D8A58594BE8D4B5C7E5E075ACFB1AFAD4C06415266E168 FB38C1CA256287953EDAB1D40537A3633CB52FECF3D35BEB8C2C6CBEECB54BBA CD6E043EEF68A21D7639FAB8D1006B1119CF92350D9773502F7554B4B3036EA3 D747596506FC674DC01ADEA9B45ADC43B9E6947235E9BA30FF462252038D91D1 D908E9132A946FD03B86A08885AC44CEE72F0E27AA63A901F2DCCB86D87702D9 A66F35F06D6640115B075B0260FB116E24E795E24DAE988CD48A95FFD3116E92 63D02221D272531186E2AAB74496FB78A4064C9C9772608C49D46E40FE28088E B5109171E7AF69599BD8BC1186C196EB11FB4132F5C9FC1395220392E17B66E2 32215E54E9483196341D6DC691FCCEFBD00DFF4C095FA8AB36A374BD5E1F5082 730A698AAB7B57A5399196ABCF7B7963E2970CCAC5E9A5EC552CDBE1E2EE1968 B81CF5BDDFF9D385C9C1FFD726A0C52A4CB0C8121E77AEA16157C1EDCD1AEFF5 5607E8F5C44072DC54332B95AF28417E2D45B4685F270821EB6C455AC147F938 50CC9F7F2006D933D0664AADBF5D7E3E6DAD57527AB59DDD13BCA392B059FAD2 E7833AD00F62EB89CD7BECA9DD479F7CD7C981859EF43CBB1EC1681081B58A39 2CEC9FEC039082771E1BF48968431F72817C8156D0D6B65DD33D472BCC49496D 1F5FB1796892C6A45BCC65BECF41D8604B811824739647D87A7B28FDB3574478 9807DA2557F411E0BA7479F31B9E3BBE6F3CAAA653883A9D2BEF2073F47F057A CFD20BE1371F17F5B6F0A9520F2EFCC3C04A24EC272C43E1F587ACDAFEAD7076 6139D04FD9A50F67301D7765109C76D6270D2DECC94017A877EF386AC7F625C0 ABCA9A6D15D71AF7A5889403DDB83EDE87EF5A69EEA97995CC1601160B296750 32AD8D65A456F5471AD4536F1AF41A4D370203F897686CAE7C89577D3A843E90 9C08CF3E3D489625256DA5E0984BF971E0D8D251AE5B09C17883CE07750051DF 770B920AABB2E80A4944EF613891B4EC3F9E214339AEDFDD5DD15240933DC82C D878BCB743ACBB562A41BBD86191E1129718826681FD12981D4159C7432DC3D9 AD4C6C478EEEA0A34030BDD0B9122E8AE5F0B473AC5A48346D56C2DE42815D19 FE378D252960D3F56654B31C58CBBBE0D634FF6EB81295809AF12222C58345C0 4595590B2DAEF5F3CCACE8AD4CE8585DF4099665B05B32FC49160ED307573D18 6C4D88C07CCD1BD4A0179BDDE6524D8CC9A70318578646EE6F4DE040C56C90C3 C5C5827A77DB584E95F55F083D07AF133B31DB611D1831D93180F66A13E86AAD 573C57B42DA521764563F69E7D4E26057622C17A135716EBB2552F644065C733 451295216950B589D09E00FE06779D50AA82A4653649B7CDCA11A1FF27AFA7FF 189A798A6DD355CE23F77BF90DD88672ED1AE3C262A2071CD9E6E8710E44EA18 8EAF3FC2FD7A203792FD5A925E03F5FDF5FC3C0D975724B9C0EB5891CFFFAAF7 AC4180C714BFB1BC100B055AEC13D255FDD48CDE21EFBBE6A2A5CCC75DEAEB75 CA1B5C649CF209DAF2ED786DC4D0E02F1AEFAA8A7B2B96971E35DE1AEB60A50B B4E5B18753CB1E6E18FD08BF00E01DB6497645F29D666701A930476B878C7843 D729490D64FDFA946762B2F71AFD7E3CD2A7B155D6445774A471A84FD5CDEF48 1419EBD5CA76742B84B005FD3D7F5D0A202078C60A3EB61C7968C12BA1B1CF83 9535A9996D9C9D14CC9FDC101E93F5F396F67B8A4FE51072EE7DA28E3906583F 35CAED5618F0ABFE7D3672D76A7449C08F9792974A8C1C2622D70DE226150B34 53837D484381789D8673CF3AFF90F47A05693636793248CA1D44B3B6A5E028BE 269547F702CA435816F1BDB39AE1149875B161BCE0DB75DE95DA1BE70A2C366E E11B1A869ABBA393582BD97E050E901F9B23C20748D834ECB5FE32E06EDA2F60 595AF15003353C011562E3889E1BF4E13D3DE9C58589B532070BDA0F3A7BEDD2 12A036F88C7D30144D5D1C9A3B81501477D400D1EE712655165161D835442623 DD542F2ABBB0A78F6AA9CCAEBFA0CD1DBE48F1F686D4261958C098758C35DA58 0A1AAE1CED2FBEC8C44CE1F8A5F10F602867F7221C9D0A61D88CB723D24E8326 0C03E6972FDA35AE55F39C5E29D5D494FD0D60E6C78DE97997305FFD8F4CAF0E 11D5026DC14DAED7313C563E6AEA855D814FF8FDD90AD358174D63B3648890A6 72F197BE3646736CABE2E958E2790C4E1548D7C792B67769AA61C93101D5624F A5C7E3D4A05EE5E4C4361956C7BFF0715DAC7D7BF7B247261B96DC90796B29B7 8E4189CBECCD2855A3A44CDE3FB6713AEE18EC6A80C25B44EE2E27DB564382C7 325EE9F9CCD66964426235DD8C3F9D4D942035390992F7E3D76AE26C7E49FB8C 8EAF494F0AC282E65B88F77362620F1FD5FEE696A396F09DA628F1C9AE52752D D3635A23EFBB52741ABA793DB9C6AF8937D9C6FB65A3A74444D1DC5ED2FF9E64 4DE563E622AAC07AE77A30FA0A7B6F584CB9FD2735D4CDCF2E233C140CD26DFD CAF6997AF68737072213DAD93F653B34E945659A6AA5B9915B454BA332CF97F6 E8F243D51E0E1DEC43D22CC476E46FA369989C6DA3E719D6C083B5D0000DCC98 0989E0CC95E1C4E64095949CC3E78BC20A9EED5DA7D0B76D84512454D28FF041 2DD70B186C108F4B0FDAFDE64467D45EDC7C86CE1DDFA7B50E7CFBB4A34CD64C F3502DFFEA6F3CF7A4728FB4F997DEA662B7342E5B888380B311B26F6C04DA69 210A90F17020D85AD3A3E0D9B150FA2BAEE57C8398CB09F131C3A43A2C9F712D 7BFFBCF5B04E43606F58E4ACBE46563111E03D2B5E4A640EC06FC8D881ADB29D B3057662D5C106A0DFA73200920CA8E9E8D23007C133912C8F44941D140C5A10 A943710AAA2236A986387D8E9668567AF0DB7D9DFB15CADFC3E50AE185AA1FE2 5A134AAF24B12E936A5CD45A26872973A30A7250220D746AACA419A9D94A8D84 314DF20993ED48AAA34E837178CDFDC510573E1378B3C3DA3875188993EA44A9 93FE7D260BAEF28AAFAD27B0B19B8F00F8AB1B7AFE2DB6C252060A5244EB431B A2F35A215C29028028A96E44E169A24314F3F37F2FF5B80F7EA3B8E73C402A13 A2BEAEA9E949BEC40ED8BE8F03BD6D54BBE59E76C4B3DA8CD33DA98841968E4C 919565F7F2EEC4C5A8328F69FE9A26E3CB14B8D03270BB9C036C10AADD960F0E BB23EEF3B97181AEDC88F17E0350037BCA93A39D3153F303E5D164E87CED1784 D5B7575B08FF53F9E7AFF3E19D21B5505052CD89B18E0801916C1ECD5676FC09 73DA419A7FDB74019C3B76690DE77B745A5D5D7C3F08572479EB17CA2207FEC8 016D168AECE7149AAEB7F2DDADC2B37ACB9A7F01A7248C23F1882E354853EA32 D5411221981642C703BE65ABC5610A2C19BCBD7298C9237F9E56E69F230648F1 1B70159D591A0BF54656AB0811F1AA63169374BB2812B5E90DFCC5D6E6670233 F9B72EADAF155F23D30430068D9348F2B5CDF6E87711697886AB2B9D32780A4D D7EED7746C03AE642B555CFB2F939BE002E6AA1D1A352205A836F9B7BED77497 C217284F49C014A7C14DC5F6E2549599D2F9413FEB7DBA1CD4681098626A5D86 A42D4AC9B54C319A5DAC64994E333D39870A196F3B042770F7161365A1D5A348 C47C538FFC4A622E23F94739294ADA17A4FCFD6B48CD7720E061905A617A8CCE 198F217116F0D832285D186B0DC0C46B2699F68E3A1D7C6B672DA603364E6D41 851FE53F57813FC6C6AC832F67E2B5A5BAA81A0C1FFC57FEB37107CD89892F94 32F498B3B9A2F7E886510021065F9421F785584B098F3CC567E9DA3F214F210F E1D9906BC2BCD69B76231B487AABB3D42C98378B02E6A16324340372366A5760 3EEBF37ED1E0FC37782911EDCFCEA08DC52E275637CE19084A9486B6986FB22C 30A491336921FDD1679C98426B577E6C81D9791D5F8AC8F5888A2E224077E795 8095BA13DA81A2A2E80CAD4574BE8893E5E8FC0CC4A121652019FC74E73AF632 82ED4CFC9AD9A880D14C6D900BA9DBF9694CCD0CC35FADB29EC2E09422D07D1D 5421CAFCACC1CD630F4B46CDF090B44DC73EB893B5B1AE2F16E3270C752C64B6 23A2FE298B3564BEECC913783DA708B230D5A7CDC42074E4287DF9EABFDE6120 738C4A4F7D09CD01E07F2DB19DB6754091A7A3AA45DAB5CDEBE3DCAD7581CBB2 C935B1810A8EFFE7F9084913D99A467F93BF3179DB5DBF1F93A37F36DA93B956 DB6B6E2904D7229E3164CAD351D64BA96D83F430C48653E84B79E69AE214688D 092F235B6A267511E462984C3ECA939485D87A95F68E5DE88FE0175955BE4392 C46A2974B652AF3CDC409998114BF92E9AEBCE43C83C04BE4F6D9715EAE4064A 31DB9D81B941ACEAAD2DAC4C787F40CCF137A4B9C65AA2120749306D94D99B4D B28A21F817D731F12740CEA06617BF9DC92315B774F06AC88759A3C40A58EB77 5D20241D44AA4EB2DF9993E4D9050FDB4B178138D6F02D1FFEB44F351191EC67 A7930041BD9656AFECE6163093F5AAA2D51E0CCA3A48606509A310D5536DD95B AE761E61CB744C892D695A181851520889C43F9B7D8907276F68F1AE593666D6 7548BB9FF533299A95C069F8C4B4A449F7A341015B34B6B20E27FFE397F8A305 334F966AE97B43B70C08A898F40E626F45DC84EAB2EA5F9727C7A44ED82A25B6 006A049FD3B3507410ED0EB973A4216610CA7D04E067699703217DE681CC9BA8 C8B5E8C00BF48D54B981B8CD2B0239594137E5EFCB11E5A680D4327B8BECA9C0 1E19ADF17A7551D1D0B80D43D34B964394E585D29CA4F2EC49A04DB0AE0FAA0D 3FBA77512511F6A23799384C345065FF178A58898004B41A14A487260EB12E5E FF0792F7A8D3D9EDF397628A938C6D4A177BE426AFE8984CB0D8431121F13E71 8F4CCDD18A6DB7A459D8937A3311F7257F3B5DE23F7FA84F898F8CB1B7B0581F 8D6052ED0CEEB645367D687DAF765D1C835796B6393AF161B901ADB6662B5AE2 0B4EB20FE07E86F5605C19DC6A89DB7E840D99792E0C42CB7DD54C8D30ADC881 72B28765BB4B3AB0DA6AC374CBE2CA337942C5CB36D584939CA95EA6858FE467 600A8BE37EAAB8F95007C729E39E34B7B7405B97CFD84438EC2A99B29CA442E1 21FC47447C687812F2410C4C42396212574B620B6D5062D02F0B580405B0E577 D09184B5E84D56FE066AAB60C5346E048E167CAECB805E769D1B234C87681994 BB2086CFD8E7EF154E37C7E394C68679B62CB825524412360521FAD65F0328FE 2DA8906AF45FBDA9E64E656769C8807276FE9D25104113D9C3F6ABD3117397FB 6E6F306C300640FEC16B96DE079C93BD55B1A1E7E810E119E40FDD0E50FE3249 74C98C81F02AE7A0EAB03DA52809BF67AC0311A36A957FA069E8A45649C4702E 4C505AE7271E675D85122255BE1AAB1F4B49981F41C7FC1ED23CB5F793664F81 FE1437612BB26D8F002EABB11C521256026B18E09873C575BE9CEB07B9634A3E 67B0F7619FFD482EBFEC7CDCBD2BC2EF67DE03616F7B5632DE8E30DDA2DBF44A 57A89B2CD35B8D707EFDCECC6337D79BA1CD9B5899951452513E57E920D37DF3 EFA97648504C1CB32B3F212B75DDE4C89CB562EFAED528C2C70C292C17CD47C3 20E5966C1C998ED56D59C697A0238182818DB5E7D3126C6CE4BBAB83FE95BBFD 061A651E5D80589B390B0FB0E5C3F46DA1175BC1B3967625E4960E5DD49EDB49 E73D4D0D495701425A4D2A7C132477B5BF04DE04B2CCDFC6E6B39D626651F6CB 7A684EEA6AEC5FCF6935CF34A8E99A07A482F9711126814D11B9F9996967560B 764FCB1622EB86C00D8455F345D54337D9317BC2A0B7A67066B93CB411FC5D76 48952A3F1CE2235646FAC97F6CE26D86103FC3545AB80AACB4157BB6274D6049 3B98373F2C7F5DB95DFE924B700C24EBFAB668415B598B51E7DF1118E7A9CCDB 84C22F07FF137A2AF7148C6F1B010D63A8537BE5E0E94179CF00D56ED1B2EE4C F591CF933B48C8B077CFE4FA042D6BC5B87B87A6E44A4F48E0461250343CA592 B676FD7E1B21269E5B13B9A199693310934BD08993A3F2219C9CEAE599A8A579 6265E21A3C265391BC9A286DB9D86A61BE2F4085BB6CF0CB3ADE60850A77376B EB2B60EA26AD90185B38FA6F491093031E1DD198A45DD0E399B3BA18B423E226 04C06AE10E48FDF523C593FA69C553C0A4EF593A95F276116FA109E792E528AF 405277E1574B06316530194167C662A146DA58AE761203B49793C2A9264B09ED BC1C32B80766A678BDEA8DEDF2EBB73127333C65CB5899D328F8C29AF1EB1029 112D740C53D467D0FE4656A7FF2E081824F4F3E5F63E0F09C2A81171CADFF5D2 04DB9DDDCB4E67C53B9844B7C16A8FEB26EEF7D3D1EE014D6966688522E6D7A6 FD0931528CE3EA05F97083D07E62C650748443EC704428C65EA0056E4E78F008 A0202F9FA844F007CC976ACA3C43B9F5D39A2BAF1B762D0B3E30369800C2B0D4 0B7D5CCE446084B4AF3363DF8A0E45CDE38F35028DE1A934B4145A5CF3F7C553 C9405F7EC419F1293E86EE719C9B0C9E2BA82A47E8BE253B50465A44AF0E5076 87B30162D28535BE14210EE3E58BB42DEFCB0298A16493095C0537B15F02AC15 C86EF4C483A530763BBA9C900B8ADBD47064001D6F84A83847D6F8BA793240BA E5C01102EE11BEF2BA9C02A3C8C782ACFA1603C1250C5AF1264CD6A7C4FAA9F4 A33A34459F490A2A5893CACD560A545A7BA4701A87B7DDD56F0E988C87336ACF 2939678EF8E199684EEE271293F13E80373EBC937FDA6F869D1B97F0BA304B4B D529D5FFD556D67ED89FC5545CECFFCA7868F38FA8253811EE27711CC7917515 2708613F7CCFA38F02F50B614A534D8C3DD71D5494C855118E0C0DD626F7ED21 A133B4DC8D7FCBB8A88C65BA0FA2611C6001C0DCAB8270DFD050FF8B223B1081 1B740C8528BA5FF99B1AEA07ED7201E503E002D22378233FD7E8034C2227D825 CBB532CE157D15BA8E800DC86536ABC67920445D035AA3B567121259384103BD AFFA991BB45D6C0FE371C8586DB7BE2615457EFEECD5B9FF1078CE635F82A11A 214DEBF2EF2A8A9AABD955B8A18691A4C011C95EDEA1FBD7C2D90795AF52523A 8B2E7812E32544F473BC66131D88E2579BD40EC909B90848836387758169BD04 D5B0D81BFA8D3814E9CCBF5C9B80E255A0A25F4563F46716EC2D55D3EEA9C709 E9583BDCC0FF91CA2168DB3F39AB24529B2A8CAE8755DB986E450761BCF1EAF9 1AEEBC92CC3BAB679ACEABEB65418B9A24C30424446A0240A79B8F43722B781E 0EC507B5897212DF9DC0669ACECF91424AE7FA8C7E316051283B21AE563776BB BEB8F437C346F3A2EF01A89D1DBD74342F095AD3C48323D59B9B57F09A4A3219 06F5452908C03E86F9D6251A18529F672A72D63B30540F0BB53126386AABBF64 B214451426BA856DAEF710C921B4277911DF8C764D6BB16EC7C0912C8D977145 5A39AFC2496AE9225FDE8C450D0D30656A59B12DF76031D8A222899B56A9A02C C31EFF971978D9A2F178150B41E8FE3620889F86A88CEEA40396B386E1269425 3BE3158D132E44CA57ACC84428F3C37ABE11BF3D4D4FA89615D8F0E08E910290 961D78828D86FCD711418F42DDDC98DBBADC85EB73667B6F2988F8BC908A1828 91FE7E9963B2C964E2FE6339C3D069010D0CD76B1423B63F789118BEE4D5A80B B8E67D03A907A6893ACD7071E800085BB8C752714DB977E7E5DF51DE6C9BA1D5 06FBAA820CE7050802FA035C5F190A5300C73519CE7B4E8FDD306B66B9355EF1 04866D4C8ABA0F5CE2C0A04A860BE373AA8F9CBE667354BEC34B658BED07F524 0C245EC8DEAE13871C5A81DC2D3E96624E4C59D512CF102A385746D4D4926AC3 9015356C7AE571E3ECCC85CDB150EB9D680FE5E4FE2E947E787ACF108A69EB04 40340E84FB3370392D1166D2540F7F8647B0E7371EE1F6721C3BCA61790EF5F2 5CA19C0B5205E7D7D3DA5A29C1C5E4FDC39CFDBA0E328AFAA7D180C361F87D99 9D0AA0A89DE7D2E20806CEDDA33190551D8C3EDD8707579C27BD0599F81EFE05 B3692AD7793DB181BAA2AD259AD259018D6E89BA6CBCE0E8E7B0B6A3280C6A2F 576CF551573A48056D3D41C4B3A49427820941F9B57797B8DBDB0302526DEAF2 0E5229A641C7C039E8D020584E1B1EF280EE56BCC14DFB63586884F110533302 B4457E36BEA004FEF4515A005F8470C61F087E1EED156764605834FFFC0B7DD4 9789591B36A11920D4EA93910DE95981AFBBFD3C6A81949A2E2016A2CDF3BAEF 7ACE82E38674DC5B8F52A06A96612337F2F1445CDB3496B611A18F39E03C6461 FA8905865DABEF52DABDEA7F2F763B40C1F9207BF03FD382F64D0165EC3CDCF0 BB754FDF19DB7F811E9A75DB01F9EADC98D6F10AED43FA6356881D3365EE5E68 EEB42CA564C54DE7548F90A886E845351EC27A83CCE8B3BD32EBCAA12C5A7FE6 9422095B9DD0A4616F98B192187E424200BCC505ADDC2DB21D6CF76FD105A9C1 94167FF621CF4761A30D6944BE5ED318549C63489C66663709BD0EFD2CD73818 9EF273C2FEEA55CF7363C135C2337CA841C25919058CFECED561ED166CBE8911 270E11B03B68233394EEFAC74863F363F02EAB4A19AB4A8E6F8B8459EFC4A051 A71790DC29E5D9A168E622465BD32E732DFA6BDFB4C177A6B2E2FE80F7FE0881 004AFE84314885E3DFF7BFA930F77FD32CA80E186E0A1564D8A0F94B0FB487A0 4B1A79D324EA0B4598B0005D6F09C80A9105A8FE5D9710F6F4CC5B7DBB1D04F5 657CF089C63AE52D1368AC78240CF16F57C441EFB4A0840BF4F5CCFFAFA3E788 1A702CC6385869068A31B500782B7F8AAD42DA876776DB7A8B14221C763E73EB 682062D9C9932DAC5A76E6CBD81026EB205BDB56775506A07D0ECBB0F2E1F7D5 424F56C988145CA9CE53848D1456EBEB0D9B5DAB1CE8B15533BEB915C2A68EB8 3D5F6699DE9956BEB2D9026805E574C86F00DBFEA624B8AB959D720C8C340B3A 89F71AA318B2E2ECCDB6603BAA29B568500F545DF04C6F5510F3B1C491C00E79 863C0395201F04DA8318E84453E92133C01DB1F3A65F5B1E2CAC2E32267C0870 DA00B4C270E0093110BED8D02435ECE0ECFE8FD47603A5599478B9D058B5F7C2 E2EDCF2D14EB05B845F62D5910E344A334AEAEBB9BFAD50C05F646D1CF4608F9 7C06756157F0B681BA58C962B99CE8BD998E3BF2B6BA27D1E537463E9D2209FA 8E1E69CD64DF8DD8DB0DF3D49E3E4B7C87174D3803B24E89DDD48AB253213D26 6DC24C503C96B7136375257297FE6FB35581D48478A8D2C7BABC1BB36F0FE2D9 48093524E0406CFD0034483A95E7871858691C2397E3A23A1746377135705C31 A8669EE4AFF55A36A01BFCC92490D1046C772EDB9F28CE119FFA80D03307FE8C 507B32D4C08907DEF3A591A581AC8C3473E18F87D1D504E92B0DD9F1A6137B14 31E93538C8E13B678CCEE2EB9050070908688B03C8D7CFF7206359E05F589326 D7F2487D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 13 /fl put dup 42 /asterisk put dup 44 /comma put dup 49 /one put dup 68 /D put dup 69 /E put dup 70 /F put dup 73 /I put dup 76 /L put dup 78 /N put dup 86 /V put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B9C9DDBA700AA803F99E12BDCE73F10F769D7C8E1AB0 77431FDD829222D4A00DFFA8E5FC89B8DEC03AA4910C57E6A689EBC39EA345CD 785A2885C8133229160EB3DF0B348DE734E4F78CBFE9340432C21026C5832003 E5688E20806F46ED465309FBCD5D50D1585C981C7430956CB436B883730AEDAC 1E76732CC2F9B08F3950A7B84F0CA9C5B92A11EDC335D079E6ACC69BD64BF071 A2E22CA7B18E275EB0CF680AFAC9DDE4F9B48568A1F4CE84E9D8E13F000D152E 42DB1C1ED509438C43F0EC0000499BCF9017D11C9A36BEF738A570C32B63D0D7 094312E00AFCA7B279DDFCA02547EEA7732A94507E88C1A87E90036DD4C97198 A7145BF87D4B200E420BC52CF878D7ADA20C9A6F6851041AAE0E9CC14D2260A8 01D960F30642F93C430A0ABF38071E7B0721204512584029A7E9C12314C653FD A41C1A4711A791BC0528ECAA06AAA93D7870FF4B7A523B3FED95499A1E77612A EB1ADA9F11E3E4D8C30D8A8C84D24C8F971CCDA2E28D3B5A9D42DD218AE82DA1 D5E0D10B8CAD1681877AD642239C9CFEBAA787828E101EF74D259636633118CA 3D90EC062543C6ED387073AEBD2F8DDCF1BBDF739E10C7A27AEF82268278FDA4 79553CC1A7B3653FCEE4D9C539BE35BE94B7E2EF4F7936900F6370D91EFFCDBA 8A93730C7E5C3CADF8FE3149F1E643CB0C2B1083E2AC2EE88FE9CAE1E03B7616 6A8258CDBDB05D16371EF193E602853FE755DC07152946A9E3B4118F3381B71E B75970EAD7515AFBFF0F1782E12AEAD5213AC3C882711A66A964C144897882FF 3778B69A447AAAAC2266822A7B9CCE94C6D75E0D4697A4BD039ACD3EB32E778D 9068DBC51C2D206874F9EF20727636CFB18EC847AA078F7A17D436BF9B8752CD F040AA54CB999A9B43958234140B984545A2C39B12455293FBB35DE8E6831F24 BED673E1B560E073A030BB41FE748DF4390D757E08B7031BEFD4FE872794D2C4 1E32A70708A651F0B8FB7E733EF31A64B32E5F98761A506240517AF9DEDD662B 10816F00645F13FF275F7D4E0CC124A81194EC8BC48E078A7D4BDDF5D4B7B2DD 0A9301BEC91CB24890FB50599D6555245F1F1EAB7B3A795D999EE38EF652A608 82D0D16B4DC55BEB358BBFAF45F4853E6C264C01D970FDC56DEDAA9E52C89DB3 FA62A8406BD7314F0C894442FCD4897E78D6221C517F488A88DAB0F1AD70EEAD 4F6D280898C9F52D1F8379DF8D9913D8855815188ACE4CFC939ADDEF50E26340 E25DD19BA83B83F93DD10AF8DF2D7266705FBF8542ABD4C87F9DD9EF15924196 F07966E72B6EFB11878E68C299345D622C702DADF0285E47F09A3A3D70A07BB0 F4DF0A8DA9D30E16E84CEFCA563244B34B511C5DB543EBB035E9D4D17BF6445C 30719B7AB9180381A07101451C4DD52A6A73B9513D95D62D79048990B4123FEA 9874B2C62B2AA34C0C89ABBC949F7D7C46447ADBA1904E041DC03372ACCD71E9 F4FDA11A80DE03E01D3BA5E0997C2C7BA6C7E545DDE69BBA4F5407EC62E36D03 1755649986E6611114E8B7DEF9B1C2D5E2EB35CC6061CDB91E90D9A0CEF0B90D 39E0CC5410761DF6E682605919CD47BFB3430322DD6DD633A4D130A299AE4E3A B1A5B94D8C3F7020A41431D5D29A9142A6B1DCA95757C07FB38DE5C5CBBC0C69 A1826D2609385577FF9AA344C52DE955553128BA5575BEF4B57A77A365FD7EB8 6F34F8EF4E1A93F0E7D714AE73E0CC221A1EDF703F3296ED98092E442233F9CD 7AB32141DD30A42884305205FE48737741E10B3CD8B596C8954BCD0C9E859684 C5B9E093E3DAC688EEAF117CDC0DE395824DEF1A36C29F301591E2767084A3E4 F1A257BAED233D07C2ACCBAF068B47B056988DC206C8AF4739A2E2EF3AA1D12C 9AEB31B33AC8A1C1475CC61956BC5AB5943C3A69AE8C1D5C4F0E9DCF0CDE59C5 D55041B4BFC408451CDBD3C0EAF632192BF198BA2112F05C0DA304D7B3F93623 FD16C814C7EF4AD67F2958AEF6E60E19E5103440A6C14633ACD429111D29CEA4 45E7F64B2C53B1858EA47B17938DF8C8FA558A10EB6D67128CD95A17BDAD8EF0 951749BA711B6F3CB0F964B00A436127C9DC4AD6EF6E47018EB6718C1727571B D032FDF5654E30B2F57EC9EAF515BF5A919AFA0CCF790D21AACE034A4DEF402F 3F7453F6E29E029D8B8B2644C1F2FC9B8377CBABD17C9F105D9205B4A0F04D68 0DC8DB39E836A1BDC3639D48D04E93BDA4560F76E6CCF82977EF6FE274672D6D 9FED417BBDC9741F11718026FC1B77CDCF546ABE536B2D36871E7531A97C3571 E30F3DEC5C3E295B5B8E43CDF2A4A69EA8CFAEEBA0A9B242840131E46B48E0A0 6019A42547D8C7EBBE4E95D968D2F6D7760EBB55A01D167825AA471AEEAE5E63 66E02A3D438D8961D12FABAA939CAC35C4AEFBCDD71A661F7200F8C06B4F7D08 8918786B55C16255DDB34AA0AAB6631B3796165ED2CF8C5C43E94B1FB0CB8879 0347980D841A62575F2C561527E0390210133FEC80B47C1936D5071C68073D83 892D0B651D998B1615534138F8DD8881A5F11C305489C9569DEE6EB4A79CC85E 1AD68914303D0A99DDF17256E05283D62E9A5FAF40BC243565BAD4F7BCEFA18E D29414E64EC89C5E2B95773F4410F6550BC41B32DC0FA9B000C54A94206D50CB 6782EC80A281F3D303A5434CE334F69985751A08E77C04C4E0CA7CDA9F82A61C 8D70D0D474D68C84AEB6F620FC74361FD4C7E68FCD866D8246C854D4E8C8AFE2 2E8DAD5C1B04EA2A52B50FC5A0397D9757C186F5DCBF0A61D87EE9A4EEE8D2EA C6F1072C022FB02EE93FAD70BA0F5FBC6BDC6FCC102A0D1A08118C3BE4D63923 94540D3D522142B5EF5191D17CD53CA2A7BBDE2929A1647CCD42834F089CB0B6 DFD1B720524879D64285C901104B2720706CCA8C260EB07FC58D48A60F07E67B 8C973B417840FFF6491C1BEE23DA8697FBEC187F0CD1A3EE3D8F841C8E0B3967 CC093AD66C45FB2C1D5399865E310A0C3AC6A12ADF57EBEF1707138CF26834CE F5919CD38C908C7838F4F21F43F8F454E9AABEE0BFE619483F96DD4EEA6D49B3 29552B9E8C0733009A05890F112ABCFF48DFA2D78393A47344498A0D3C15D1ED 3E2F7AEEF4524EDB587C5EECA2D60A3A30FB45610BF72A91AB842375C220CB5E 36F8DB85AE859727FF3A91D6EFF971C1230D2A473B413879C710EC966F5E496E 231FFB5DE1FBB31538A154BEC2E3B08E84F6B28583257B89A8E90FD35334AF62 3AEBDC978D97406CEC3D9EE1ED93B17C578ED574A30D8CBEA7439C692431D0B5 19F21FB3493F4DCA68D0618CDB56A9EFCCC8FDEBFDBE69DC68396F73E810CE3F B7AD97A5429747122B3E62036D01C8883ED9F75B8057F9537DB523E4B8A529A2 17024D658D51226C0C1C9C26ABA8F40A5BF947AD2B6EA8D3FA99A01F44407862 5AEA73879EEB1405E79B0AA0A19D69AD2609F3C7CA747742EB0554FE3EA3AE93 E7F5177BEC64E3991ED64DE57B2B1130B37EDB3C21ABAF643C9029B25D46CB19 E0482FEF08751EB68167AE5DB2C595E163B731C2D3AA1D1A746F3A9E8ECA4E92 7582DA2EE3CE8D73B6203FFCDA22CE7036DC1458BA00DC2F5BC3F9B4CC570648 0079DEA599BE9011650C2C278032673BAD62BCCB1668B2420619E92937A22515 AE01042D93F60A662B13A5B4656855D20A69F15CBB3A7E421EB9D650C666BA96 5C652BB442AC10ADD8574BF3B3B3E758712EF1B53E20FAE119951BA3C0B712A9 948D6FCE5323D1C61A32930E7A95D379FDD261E7E5021AB3D226DFC1E9316A7D 4D174386511D5E95EB176E3209CB003E0C7DE3BD2F6E5EF145F2B9190BF257F4 BA3A04F64F1EA8E8F442EDD9BA259DEA105788604530A130CA074E5BB91272AB 1FC1221B4E373E91E2B81143FBF191664B5E65371CCC56038776682EBFABC8D8 BAB9F32CB746EFFA3F34A446C4112AFED6A663231B551A99CD8C0555B6548F81 469917A923E975A92775E7A8E993636413E1E4FB23D80217670ADBD7BA928432 ADF96D692A0800501403D2C9A0F380EB2BD63A31E9167C641F087E3FA0483F6C 3E2ABE7C5ADA302EF93C1FA9B7DC5B58B5FB75EECB1F091D39E7BFBBE38A4C7E DF5E70BD5E2BF0DDDEB232CA06A551D557FC7766FA1A8DDAA28D9A905F976730 073DBDE12F9BF76B8CE18280756B07540E63A4AE3FBED314B95C1DFC8DD0DD54 9736CAF4E4DA6811F5A2DD6A4A1F9D9B2E7478ADEECBA39F3E923865C341223D 5619EE8F80CE3DB1420EF673B7218B462F416AFABC491958D58ED138E6367A9E 90E5ECE4666690BB65403C0D074262200D09FC3D9444820E78CB4BE195641E87 FEAE594E1501EDACF1887F02D43D8E2B08A0478300104B8EAF06C3B2A2F8D9B5 9E48C1FF0A4B614076C77CF53D1EED2740E1B716A030A16B2D7FC431708B25AE 2F117867E11BFFA9581967D269317CED3A9A83494B59D9C3B31FF3AA9E31ADF9 72C1DE847E2C159B54326D08330EB4A2F9C198CF52541C8FFB3B7096638D9BFA FBF90FAFBF091401EC2A295A355054BDC46B306EEE1D6BB57EFA3A9C82919F54 B1D23B0AAF163ADFDE3FE845D34A5147F53F5191972E658751221672BF9F74DE 6458ABEF3A496D74936B7DF66EB6BDE8119F2402D5F086D5FC02453DE8B55B90 5602C160A8F7BB4EBD91B4D236FB0A09600D458C05A076C5F55EA2339DCEA3A6 C6CA0AD602654EC9DBF7447EB7C07C50D18C125A4B796CE1FCDFD65ECADE4F0E 814E4A74E8D32BBB63D144F542C623D9F0494B41F95E7557CE6BD8A6626FE1B5 599DB2718F1F2624E8C0782B7FFE6009ED3444796B8A59007AEF885A243232D0 61AF681426CF4292E70DCDE23A78FB4F40E91507A0E43B59C08F2B65F31E41F7 8ECA66C120C8E13C9871DF8225FAC9A70DBE3DE0D46AB24C935774918771E870 27BE1D66C8908E40B7F23210051A02293B65E595AC7609D232333D2DC372E48E CA3B003793B2F38A6FD02C07230097DE2E19B713B7989B183715A35550FD4919 A4DD41821F728DCB71EA9FB7EB58EC34092262A5B2659868936EC05485F625DD C05F941E5F054A6BC5B936106B50910FC4DA37CF58E75F3BD4F2D8E6FDB433D1 65B1E5E4BAC3A512DCB3F4B7341DA97086444E1C0C779D50983915139BA4E708 EAEB93952FCACE01ACA486B9650E540D8416D0F2B3FF85BE8B03A8007192AE50 9F82230AECD436D306D6D3E139E2E2B21C4179CE7863F51F448DDDF73E5DE588 03396314426CEA0BD015E7986D566A92AF709CC9FD8E977E45832D68BDD0B735 E487843379A8358B097C143077FE9C1BE13AD252AD73B91813170A1EEDE40F1B EA816F1EC0D115A0AD46EA89139717965FE6E65D50A3D948C1C736C58BE90092 743CB3D2C896A1A6B4451CF100E1CEEB6940AB6F90B40F9CCB1B34BF9550C981 ADC52608D05E81B9F79EECA760BDF1154EAEA6B414FC12EF38A239FF1EDD45B1 F2532E41F3485F8497D1611AA29903B29B818A3BDB1A9ABA30A8816F01392539 5DCABE87B5D53375352D28668BF09D315C7A81E09CE49AF6419986B2111489A9 0746077BD99A6E3BD318AC80B4DBD3D9C0ED1F5DCD419846F9BF06434711B74C EA90E2EF3377298C39DCEE6A2125E66771D432FF3A2391F51CE44C71EE59C1DB 3875F050069A600D1842354D3D46D036938A00BFFAE3E467BEA91B58941BF007 DDF72129F593B94F0E3F194266F25269F78657E6459DBDD5F098673FCBE1058F E764AA3A7BE37893EB8AFF107A7CF315390320D6A082B11DE3FA3D54B2630E89 43AF6611E29AF2465506778A6050BD24235E6BC078BF26064D23A3E9DC453949 E2962100A3054C2B4B79183D2FFCA25FEF1D2EB506D65B3971FA512B174E9404 E17D7F615B6D10D16F0B0642DF109B28D7C8ADBD38701B7C1A2EE9F66D64492C 36BB3E4534131C4977E20EB13B8E082AE3E537CD19BEA18712AC2B015A0D9FB5 6105C2D29DFB8EA608D14876C2B70D940C564826264511CC9A2F6C2DB7F359E5 18C52544682534F66B57E456161ED9F805DE6EB707C3057203AC21430630D182 D8A6510865216E407C842107F7991165DCCAB03DFDC3A1D10F4C16E31445BA5C A222191EA6D1DB9FEDF54FC6015381C9BD36F2DD7D40F0F52AC0AE817CF84322 AA6671116326BDF83A2D4AFB77C72ECB5D8262220CAB18C0FDA2C068A2B0A959 357F0DCA26E529AA1E265E7D2D2408037A08AE3C12032DDA78499EB3F401CC61 185F333B7FA54A4C233CF9D0AAEF0EA7D714D829000D99C6D67916CBC13F77B3 47362B661C731F1FE2E8CB40285818C2A2349CA2D1CE8C5A8A23FCC839F4D487 36977F1D56EF68CB2EAC4BE045B45A355BD780204FC029767C089A0D2EC210EC 68D8D916ABEBAADB6C34C8CBCF567306BED2F0BF185B1CA87A97273009F7CC43 DB515293F1D96F0BFB3E565CB609EC2FB0CA30684A1015BDBD6DA5BEB74C4A1E 198E27E7ACAB2357CE190E9ECB3FA0E6482FACBAE6F7ED55CEC3893F8B872636 DE8DEAB7A282B5151F6E60AFD2CC0B9AEB020CAB8A06F6E369D375BF18AE2437 4B6BCD547315A79F9D06C6C19FB289183112FD43F864F74C58771C7DA86F10F3 4A8419956F73A0650B1D42F9DB17719A0DD122C1CCAAD2DB719A352FEE48B092 C88821FD5A80A21D9CD52A19B53A5CEC0BA4E12CA3862DBB06333E7967CDF346 0420809AAD013040D0CAC775C5BA94766AD642EAED1984286122DE12FB4EC052 B690638F7E4B1D4098F76A0CC8041612EDF98187F404BBDC21E1454C50A30DA9 A5CCED2C3F8A5302A04203EC98D7F0CED5096885C7E2ABB685D4136469750EAF B7171467945BE6957DFAB66718D485CB0CACB7A4AA2FD573BE04446D3641B445 F206D7ED7DDA77856DFBAE2E2BCAE0544BB391960392A7E7078B30E6374CDDC3 D84145FA5E1CFB3FC678CC801FBF9CB087211036EC3163B213A3C943BFCDA7B1 33D8444C35CBBD735DB0554CE1A0AAC1C960F9733CF21821B3F9EBA98629A0AE 9F78B901D566BA36909DFE43F767EB69822B691E4ADEB5D9912DF00B83875DD1 BA339909AB5B0CBD7059328B057C2479DEA0F7D30969B3798D9791FBE8A5C300 1084B4A37FB1C8E092A1F1500F490B6889333B3D0933CBBADA164B66CCDDD058 1974EAD60EF7A5E1D12AD801D177E8DF6C45662C1421B73493E2B5FCE4FF6EE0 572F856735957317CE2E46FC3852F947B38730BD3C79F2B91B855C8A05EA6217 F350F8EFCA470EAD29CA75A0659D56C99EEEF35586AD14DCDD4DE6564F826FF5 9B104518DA0D9451D0076DC69BEC4C5717BE5D5ADDF0821009F56846AB0EA42A 70B9E592FB09C8B3B4F562A421DF521FC1D4643BCA7DBA767D49C16D08EA703F 56431948182CE03FC006609329C5EFC0DA0AB00747EC83B558E5617C5E57EA79 E62B80BB798F870CB0E5F4372FB16101A9961866B4FC4F67FE297408E5BBA6B3 7973893F42BC5DBF09544A4E2E9E79FA0B18F429C480F52833E3AC0E350D0CF1 858D0BBD416DCBA87811F666928D81C26B9C22ACF3B55A7B62296CE3A6C7AD0A 4CF089E94B62872C46F45C368B6CA8D493D5DB2C1DF40009E67BFAB564E4151B C62F4F36BA1D10429DADB302A23941E87F5E6B29588E9139B6053356C92B0FCC B4FB39B7CB1624F20392D20A4743C02BD1F09C5600E6C90151C0E5E1E971F163 89EABCD20AF83D5FFC6022B0F536FDD16DA3FA77CCE24C5FF4200512E585E90A 748F22ECE06F9BDEAEA923494AFB0E11C649C9AE42F7A2AF0DDE89781E187022 73E0AD18D8297C5B310BA89A29814699A9A6F75F2D764441A1B66FA01D169C58 8384FA3E89CF6105E8FF5AB09D29881057C0C61A359564B05ACB8BF11769DABF A628B03E53F385BB3F99DA04A756D2B89145FB5143736DD76E09C2572A46C3B5 30C81C32F810BC8135CB2F86D7E186573485340A6656CDC1ED3BC6BB5FD7F0E3 6F66A83969D596B7087D1EC5D9E971DD09DD8C6ED6BA35AA68B903DA3F685807 3C68601ED9D2E26A199192BEEDAB5E7CC3BCEA0B4C5CCC17DEE0F39473E9E94C D75563B966F856C70AAF46A02A975BAC28A85C154CCA163D467966EB61927B69 83DA57F613B5972993177ECEAC7A0771DA42206559898C434F266D70F8B9796A F520E8EFBAE685DDDF22C8B4B268E3ACF32D93E8BF96692F3959F319BF397E13 CE13D16552CD85685F31BE90073448BF68A8FF08F35670C6D5E3DC9977F4EC50 5D06AD240063E3FD5F6E11A17BBC9CE908374944068E75D48CC7667412D61341 6642EA0B191F1209C452E35FF50A176273D04F12A6E524D4338140A77BB395CD 956918A470D264A36E813E30F5740DAF3AD14E6A55C8FD419997A15831878731 ACC10B2F552C99582CBDF3BCBA8AF730E27690DB2EA83E7B6F7ACCFE8603C3FE 4818314EEE5595247D6B2B433DB4FA02EC8E73A1B630138C9B03ED2FE9214335 2810180AB7E89CDC1627B787F0E682F7B85F89E22BE09EF3A14072BA7336E83C C429C0B183188323FEADD719AE6CBC769B0283062F85FF8310E6B8C2161D4091 7DCE2E98018383E808A35A5B9F38893DAF081EC1198EEEE19B63391F8E075F02 2ED0A405A71BCB5932730CBAA5761DFF46F7FDA5ED956089738F42F7206926A2 0BB0C41B4F0E0F32DBF5306FE89B3C47E6F4E7D7AD9D8EE773CD1C831A98EB94 52D2D591403813B8C11D892C58FDC81D3E890C277641FBC7A2BDD00668C2C1FB 27EF428F7FD67FAECAAFA06A3EC09A638367FFD13F7E83AAB1FCCEF0CD0E8D9A 3480E7176BC82728D51F48AF03CF625894620F204DB44A0CAE566B6449C9BD86 94D59B9F79D763EB7C119F4507365976289CE5C8C785642F80FB2DF5E5166AC8 D7466B098B8648502573008812ABD6A3A85BA9CE967CEE0E26A20CDFF06FF3DD 97629CDB45C468AB870D58C6FC2B4658A0CDEBA62B7968369E96737FFCC39DC0 599EEB31B801294E9D36B9A54A97DDD90DA57DD726E90EF841DEEF0966083E13 CDF97C81FFD9C9FDB17E96C32D0B8B3D9874B361E6F4E753A713F08859A2BE3D 9497DC6ADD7E9A285DB4F518B255E0752E56FA3536598D859091A9A2A8BB81EE FCAD0095F567D6A57CC7737D073FCA5E551D9BFCA9C981261F19F87626DE7CC8 6304AC68E704A6083297D3A5DE79079C138D18F5B3BEE39E8FAD8783F8BF8CB3 5D4737CA9674A94C165ECF3922F1F421F59B7CDA3E725F6E67191E780063ED30 CC01F952314FBE98A7A7237D25B69B96176E196B5747279BD5A6324749954D2B DC0FA6684F3BC6B88541091F06C9354655480A0AD8F9279FD072380C57346D09 BC443C6B6B6E34FCCB472CF8C633C54A281EC850CBD63D11C10C9DC322B6D27D B9EF881F6DB191B1B732584FA01200F29BF185536965A8561949BAC59A50E903 04D33F1ADAF2DAE3AB61811E63931B6DE791A0E87C633728A812CB9F88AD4224 0903FC9E756A2869F6F0048230387526DE9C1DDB1B6CCBDC51BE12825522E7CF 7521D9A7B499A8CC14B4AB2648A40D5C8D8ACA2A9EC3D0F3619FFB3C1CBA6737 B67B2784C4329D1DB704A0A083A87BB09BB081707EA8B75F15D53B8B488AD985 6DEB5049632526A4E8158EF44CEE56A8CA55072864B07F4E2078E4F7BAEFAFAF E9E0BC1DD5B734F23E57E3B77FDD2B93BB410BAFD9257542CDD4B5804695E6D8 D2C65AE4F024037BB099E9FD16077AF3036B97F6353941F01A27265EB63912DE DEDF5EAABA24F177326D9CCFBA2C360C14470C0458008BB42091344E6CC9E057 9BD8370E04F7783B66C370B6EF23932DF99A1C1C840AF6CFE7C874F198E6BBBB ED973F802FDCFA4FD2179F242ABE5FF2FDD171D7A5C48AA5E39F30AA62910B13 991DCDCA0632AFB4A7B8D2DEB698FA9BEE262D3E796A08C11F4B5DBAB8091840 28D061F8A6CF293D7BEDFF4F26B1305BD24A378764F6015B7D7FD40B038E351D 7929140482B996200D7D6AAE9B7431E85DA600716230A7C48E8E76FEF8127D76 095410A7ADDEFDB9D04A019ADDDD68C4C7A97164B4218C721E6069BA189F912E D0D98577C5110BB3A3ADCAF46F095AFEE3B7119508649A0A5CD950B6AA7FAB2D 9EBFDEB9AB222E4033F0433698B9D3972965E4A6FC4F4F8CC12AF2CA74FD9884 8D3725FA14CD504CF1E6A439CDB22CBA88558E97B5C6E9FD2DF50DF08E4EDD4B 6F6FD5FCAF83D2BCAD758CA480845E0412B0D013C0566071917938BE6D8BC745 48B22D1F8305D88C5FAC4D21E3E2041E46DB9E701DF2775B3581928CF79FA717 CD5D7E0914DAA0CEDC5C50909BD8D9F262C80C17A4AD97CBF20B0CDAFD59EBCD 8504F57C36885BD13952993D64D451B1C3DC070C7585F85058251AF2C1E336B7 1551511DC102295A5B66E16E1FB81ADB280CD0362947097F92F93D1C0AB5F8DD 210682BE092201FC8A908CF2B4AB5CDFBC419899082104891D955F72D2899090 8DA7CD5A0A6BE0818AEA58126CE5F482EFC7033877DC2D029BBFAEC1CA3C40AC 979E4B6694CE5EBA17F829463AA7E6489027425E61B327601FCB7DECF112C4BE 1904479AC72496E7B03D51F3A50EF1DC56259F85E7033648CB02C5A1A21C739F 2423295BE548B2D00EA678F6E20DABC7D3B38989850A26C23E2B995EE20521A8 B6A0C19F16113478495F8092CDB092D9B6A4DC9113E82C6DF873174345CA39F8 7D7C6006DE44473EABFF83064E83FD1B6D1A5FEDE316C6B69D6A6A001B744CD7 D5D953488BD09C9F630D1532253DC33A8F925F5770DCB8534422FA8C58B6E143 42178F9122798908A8B6E1D04F21E668438B211F5EB99901ACCEDE25DDFDE032 4B7FD2FBD842EA15D10E97EF9E6A206B5A7FAD8247498A34E260BB0F0D69032C 07D7E477340DBBE32B5DF907EAECB9C91EDCBAAED33E1732268623EC0D9FC04B 47542516AD530E95720F743E2F6BF708E75F10C987B153 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS10 %!PS-AdobeFont-1.0: CMSS10 003.002 %%Title: CMSS10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup /UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS10 def /FontBBox {-61 -250 999 759 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS10.) readonly def /FullName (CMSS10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F 388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B 4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D 8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF 5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F 1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C 13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA 56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE 3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D 5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D 9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB 73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE 257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA 7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A 94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE 6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB 8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE 207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C 5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A 96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B 48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F 4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A 45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D 491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B 0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D 8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C 8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C 2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A 647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E 6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD 60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE 65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC 7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A 374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F 1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF 9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD 99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B 8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF 51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A 40E84014F5BF40948F05E8562C9CA9DDD71F89021BE238E74781A92D64E5F9E5 AD6C0D954C6686C714BF189E78EE47F1530CDB8376E52631A1A26E3021FAB977 DBF01167266AD68A779C0180E034A90CB77B86747395BE885E484BE4028B4093 8BE191D58D0BF85308C72E6384292A2E1CD06130A091F8AF9DC6C3E12B1E4BA2 BB2C37AB4AAFC0CCC7964C06B9EC1C7E3BDCB6BA265288D9C8625EBA35BD2A49 BC50472D7AE262237FF1EA8D9DEA3C0DBCF7C3B2DF5AFB1F31E46B48E096517A 0CEDD60F43DDB684BC6E4C3F6F3D70BD58AAB5052936EC4ED7140EDE795223D0 4E3B95161D16B0402EB45FE97ADAFA0433FCAF55E22BD7E4AD2030D9DC86F55A 8D7EA00901EB1351EE8A0F1BFE75CE46DA4165D78043F8F0741D4D9DE0CCA00E 5F7D89A849AD0F0CEBBCB948613028CFC39617FE9184753372C375A9896F5F1C 7E24255FD49D2109CFF9ADD9A118CA47CF58975A9CD3A960A8A08A078B98A50E 4DE619C8B2D3E15938C879D785539445AC468AABD6A6576AF0E8ED368A9350EC 717B7D3BB55AF58941B47FF639CA2946028CDDFDB84FF0060D330DCDEDF13BE1 FB1F743317C15C7A9F34408F5FF7CD9745217D9B809DACDDF7DAF9D821C06B37 25738F0D20F4A86A079EDF71583A9640173B3EC529B98899601F0EBDFE45BEF0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 34 /quotedbl put dup 36 /dollar put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 125 /braceright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23 CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176 57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6 788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C C63B5B76ADB05D44BD5BC0BB3EBCE2E74E1AE5F7DE07A59D90C932DAA2553505 27F2AFC05F7CEB39E1C7E54F69FB0BBB069959F2FBD11709F8E81F6E7CA06DBA 1CBDD8E7A78487462596DA288B50B295E46F4C3D9BA862688C68859734B232A7 4B371D2BD786924F186524765E789EEAA30B20C069322D42C893A30BF1BD2C46 F8F3732DDFE80B8FC1789239345944D8B457824FD80D11184E73FBA30EB80A9F 2FD466826D4E6175E9B3AF676603DD8C5F5B037022B38CB7DEA203B11D993027 884012CDC35C4B36242F8D77D188AFE30F09D5D4B9E13A466FB208B9C3B3D269 A12EBE66EF7F6ABFBFC024B72BC06828FA7AEF04633B1A7C93B778D17B0AA1C6 721295869CDDB94DE898C26F40B1E3E93B68B06A63719C44432BDB45C3FDE04E 7EE718BABB4A57C7709D3C41E6A3C997C0E7BFD60854EB52A73DAD8E02F6E43C 4EC19A0D6311293BB240782BA1DBDDC0F65287E6061FD3333718D7CFCDAC4715 589A5ECAD2762C643C0A7B2750C7038F6B8F275D9423DBE3F3A442F625747D58 A26B03775F1EDB35BFAD9ED9C2C341F89804D41A9445EB2BDAFB2043F674EA73 4962020D8641448B253F4C108BB1244279064765CA38869A7EB73377A168E596 1B1E7F573D8C09649963F67CB13DA10D55938E6321008B54FAEEE7AF48EF153B 520A8E750230D50631819EEECB35B69369C888AAB9103BF3A60A7CF6F357E20D EED0F3DD636D920AB08797A37577156E3C56B37604C8DB2744DBE77CCFFF9E9C 150CB37173CC122C366366EDB5847053A74ACDE3AC86A253EF7BF3B90C59647C A265D5F3F9D60352A41DBE682C3091F64C3298369C71197245000C81B17A69BE E8F7AF9BEE7AD5DD407E9C262D52603B16C5B0A87BC7ED85E10FA988DB688A92 470100856BE028C6A8ED4630A58A2C716E79E4AA1C59E99D1B38E65AA30B7BC3 B4FC020B003DBCF97082521BCDDC572969864809C35F0BC5C7A59B86DDE788CF 4544D70446CFD36D388A7BFC0674CEF8E44EA7FC0DA8EEB5B4A8A4D61FB4D8A7 964BD32CF308E0F0A7CAD61670A6E0C0B0377951B7ED60BBA08F874D9E95CDDB D3FED52C51D26800DAB50AA62361C0D1A1757831BB68863A34DCC811ABD1BDED 4F258F2DAC1FAF16061EC47F5F742E507C3A3B72190E56E9B5E403A0771421FB BA346C531A4E12532D0986434EF9655C3E1D9966AC9F9F2DF8B5381E8C764746 D14BB1ED9A0BAF084C74913B3C9D7F90080AB112BBA10812A077E0D090BAA92A 2E88142580FBCA6E5AC62145C7A4FE583A6A1F7212624FAA4BF2B5FCA3CAE188 2F21BF5FDF3BDFE3F72744C3D842117D4ECBB70A98762196BE6D9B2127C5B629 94AF67FFB984878F2DB8F3819AE130F9785522624503B9CBF36A2678B3C9E3D2 79826C464A9D9065659902F630A527EE40BE9CDE25106188E837BCE71D465576 0275556A73BC10E2496B580DA205C1E334B77577A4F2CA9A204C9811B60D89A9 C4746392E83EA6BF260F17003E3D5CEF2BDBE28FD4ACCE6AF7CC9768F726431F C42B143A26C67464E6D24E11AD4ABAF999FD03F2B9D816D51DDD3E3A8E4FF196 4DD14E67A8E9FD2D028D1969F2D9366C404A0C19D6800DCF6A1A1079B45E7E63 3CCD3F2DED5AF585C938A805AF9CA4A3FD6219FC44CD0E303FFA652726DC0145 EC6F96F1B0497C84A6623D32353CD7684A1F4437B892CADF70334FF6D7B4C6F4 97331632FF1FB14388EDF4BD996C2E1563BDA1F17916F2594A12C4176BEEBE9F 1EBA0D351978D9114E360E1E97265EF76FA4123E6ABB60D4EB1C67E7E16CEA41 8ADB60B13F58C8E45D64FF0A49EC86948AFC2A6C2C778D5F3FFC73250A597961 B66368352FB83F2948AA66104BF95D062AF7FA1C5E841724B47DFFC6DE5B4667 59C193D44CE020779A0B6E2E7AD45948B2225F017324471F2E9474AE0185C815 632552ECB91EBF0ED1FA7A4A3BAB2D9C409673850C4C8235DA5F8C164F24B4A8 1242B86EA0D8819E4A6691BA3B2E079D47374D02DEC8C94DBA8B02D496EEFFF2 D9E6B8CE0C5A08EB556702A7948BFEAC76ECEE848BE845F00CF9C96E49C1C8FD E45265271E6E9F502C8BA397253013F7B36669E5A15D4135E96C39075D9EC1A9 87BD4483518FD415861028AADD85995F8CCD4CFD94C7D63FD35E370A8E2A8FE6 8032B72C34E9E46C35733E6174779CDF1D7F5C2021806525D7ECB9CEB57ADB54 B836AC834D57F69EAF2E79C875A1B630138C9B03ED2FC51197FE003A1868F38E 5ED37A4059F02FFB141C9777BADC54034911C9AB27A302E7159AC789FC5E5CE9 EF2FFB5759B3C76AF9E24214CDEBB2918B910C105609EA380514F643E9AB0D57 8534DD2C434F3EFA6C94B7BD3485EB7A78582F459C6A054E126E18C534A2EC03 D628846D3ED6A4C1CD9A8C9AA0639BFF5BE9788EDD3A24389AAF9E7D995EB567 5E54C76D753154EA4A57CDEE9250F59ED11D12826D7439BBB7B70BF8F3CFEE4D 4DF2FA84E2F18D400ECD0D1A78AA64AA9F59E6B219F4047F1C16E861E74481E5 39AE96224C82F799A00C0ED0FA0639680D067AFF647A1941BACD26F508AA6EEB CB9FA43A1FD95383F60429A55B68CFA6410F6E80400F9AC9F012CCB56957CDD0 B9093B7AED6E64971113A3E0F30F0EBBBD7C03E1ECC927BD1C88AA72E0D5D0FF E7F814E3E29934516ACBACA207CC58B83E4C95882B7061CE86EF4D5E77653411 0E77771D733BFD1B44CFA2460615EB10B1B0D593BFC4172DAEC9AF82B8C494D5 4B9A1AB78CF03A6551F9F1B2D2F945524969FF5CE3796E9756902F2645465412 9CBBD99BFAEFDDE78FFB6E6D8882C233355671ACA927B533B84D89680BA3BD37 FAEADF8A1EE2C7D32CA2908051F9CE5336AA67E42AD842F98E8C5D15D1339193 DA36217EC992E4A5CDCA0138CDCA8C80B419A990383E4DAFB7F06CE54C8D2812 CFE50328396E1E484864A9674A24AC6657F47AF780DB3B09CF5270F6FB67F1B6 3AAD016B2CD017C7D6CD5F7C3A6C39C9279097919A225431CFEDD243AD1C3262 45A52A6BB700D5C6BADAC7CC5E325437EF1F238C8CE77973DFA2758AC5DFB0D1 91874A22B11A284FD2685CFA01021377B7DB6EF732E9EA93FA1D52F604D45696 397CFCE2E697B6D8845297F4EAA0DD8DFF3B4169AFE951EEF8B3A0091D31B4D9 96C5B570E0EB109B83F26E4E2D38652776D7C08B8FA74BE4B5EFBDFF0FB1276B C2C38BDE4010A54A2A787355F644CF95463B39C0F30912A18682CD389B114D6B D96092257734422B9B94CF11AC283BA9EBF422086C34FFB080574BC74150B59B 86BCF45476AEB3E070173ADEF15F3D9927DD57898B1AEF83FDF158BB1C1F7D1C 36CF7974311E4EB7AD062FB94446CEEF7A41E5988EBCA5EE039CC187C28D1A07 7153E501CAE9E0765E7108B3E54279E2AAA4D6C8AF8AE7EBB921A762B70CD379 D8BD0C3C2A75D382C7F7CA7EA2386EB3931A013386DC15BDC0CA127DBB50CE4C 55522120A77DD300B20F014E5FD531B2CF7B64C60EFED90931B88D365E15F460 3409DE0EC4AB6828DB307652292BC6E164095F10543FCE8183F3285A0F5A43C6 E5A4F99F013328654BE25FF9F1A00B28C3567DAAE8E4298CAFFF3D23DF7042A9 D16EA73CC66D766BF0F492B7FA78EEAC5F48AABB5CEBEB2EA12D4D4E236C0523 45F3FA88307D43CABCF98D3BECA6B1C66D0E6E7728F9BFDA5F8B00BBB431BB68 B07FBEEA571AC45DC2705507FA1E0AA56736E66D332AE7467649B01791CEF85C 9F5E61EED5917625917D54E64A6D311109C5FC77642BFE690E3436F426F5E8E6 D1C7F0DC69F82A70A6C6B8F4EE56BAD49CB69A1095E9338DD02D0204F6B4A172 65801587FF6A606854C28FA8412ADCB8C9037A75F11825A4B25358C99A3DB841 C8A67BDDBD597BAAC92AA904D56CB71D7FBEDF3D4A28643BC0EDA94FB838F194 B973AE5762FAEDDEBA5E1937359FD8A7322F8FAFC3A9D455CBDB14F871C07D7A 1FBBC2835BE086A6064CE3370C6309091FC1527FFF1737C320D6563676DBFF82 5B854E07FDE16D2EC0FA60ED7400CC42E9DC3D9F393FCF8BF720BE5C40F35EC1 E1AD3A43E4B4F1E6D9F517AE1AE8605EEBBEA5D55845C295B0819A0020124A8F 1230C36D82EAC9F0820947A3D6785FD9188D6EF4493CD4586DC64865CB524DBD 98A6184759803A89790C56FBFF78A6033FA8F9D5D4F4174A8F90B06199C6B64B 2F7F3E4834F08716DBC38752080C0C3634B5939DC11296A628B7C5D0EE52B047 CC0D33E294787D350DAEF2B0AF65C41088BB0D45534ACC945D0A3AF72BD37244 0C4CBCBE8F6FE5C750A2D6362BD31B0BD557B682502049B3F951DCBC2B5073DA 4B40A5F777461276F43795DA60ADD19395C929F7D7FA41B9E37468648F8F257C 0DA9512648DAF02FEF7B66BDBC0231457205A651093B5BC70574DCD97E81EE3D 024ED0F83F65EF66A6675449FCBFC8092F02029253453F3B76988E83EF752556 8F85BA3C5C14FF6DC3BAFB4A70B3E7A52014FE94662E7CE2B72CED3850277A2C 10423E25A7F2A3D320D8F1E60750FC419C124464E59AA4B64ED94A92F68AA079 257626532AAB68BC6BD10FE586388EF64F2813D6CA8BB62D34BCDDAE6EA29DC1 3ACCEDF31DC9D64B9AF3D282CBE18344C70F6051900B11B3E3C463FEDE2A2CD2 042C9052E1555E101B4914254CEB79B356D788D142B6101BF8FC2704982CCEBB 6E7A544CB6AAE38A8D9DB3A82DF63EFC3E8AE4F043B7821762C26F172B65C26F A96C8BA3E3B863EA1E9A83D2E5A64E0C4A5B430F9875641E56BD57F964FC11E3 46FFB31B0E1E4ED6982FD6E0924E49D59702A6B3E3201019B537D75C2CDA942E 2FFFE9E119E775BD2C24C53A65C602FCC2B2A5E9BD6F91D4FB857B294940B381 8F66AC4EC56C14A87575F9C19729216D08896CD9DE00BB216EB775E15844975A 5BFD89F556FC081048EC3B6E6458F760741878F7D8BEDB7FE7B1CB31869B88C8 E5CB264D335E0172D41F97AF6CE9B270EB0ED73FB97A20741C02785E60AFD1DA C1D9EDEB1DAF0B0E08E8B7056415CEB973404CDFB31A56EFE4F561D0F16DE6E1 DE0A6F3A560CF5B8092F7C394475983A5624348845FCE4D2A31DCB0097359329 1A7236A7CED818C5C10BC32862C9A9483FC1B8D28A4ED48D142FB752BCB97144 BBDDAE4444BE8CF003EAC9A72C81E5ED24A22C4AFE36137BF405FA1717E34599 69CB28475A61A0AAC42AE1110A1FC7596EFB94D29913AB8FC433F021DDC99B6F B1297B6D9FEC200EDB3A2C7866C9D48D1CD113894CAB558D1CEED46274F9664B 5B01ADB8C3D2669385B39AF0EDE82F2DC0B1721B87BFB8F8A52DFC012587E4AA CB77D79AE9F1B4A363318B4D68B44B4B9138A4D164A8E6BCE52DEA85E420229E AD6DDD7FA414CB3EB0E6AD6F320E2EB399DA2373194951DCAB8D37994D4CDD96 3A0697CF3EA66657F3132A7718A6A8CA650E1E454597950BAC0D203E0D14E39B 488CCF015BD273DDC4F1962DFFB6C549888E66AF7C12189C4D322C46A1B94811 4E68EC5FE69703E348C5B3E991AAC5A48F35659CC1079944F0FB00831E46531B 76DE3789894C940AF34A6906AE8E6519B21EFD8F0EEDCE95656E9F4FAF4217E8 F6666CFD725AC5E0C8D84765B5B324D03F4C8860B2B67E110F5B7091D3709FB5 01E70588FE0C48051A8AA4DE3EBF08052E1E82421B48B63D08427D3A8341D32C A5099445CD86BFB6A7B2A325F766FD377FE664725E07A9E0C06AC677F716C039 03E7C505D8DD4B53D901500893C9CDD5DD1741EA2FDEEE27D660BD74EAE458EC 1962EEF85B4F5C52A1C35D68AE3F0FA8E05D74685FBE82D5CE3B48DF42495AB6 682FBD474C6A4D6D0B7BAD5A0C8B473385F9F20A6B90114900A357E8C3A5579A EE7C17C5DF4580391B0BDB54095E6AFF70EA373BF6259B5EBC65DD04055AC8AA A551C1375F9A5474415F6BE80DC4F9C33E90BD7054745A43E679B4C31976B677 ECDB117F214BD226141F81E65AD48B9970CBF2979D480B25DB8EB8C4C398E901 9B233314B0451A846215C9114651CE3B281BB456943E845D6991AE7E2887689C 8484921BB3628216A31845A956C74DE35E41F6A52732CE86363BAB159081AE2B 429864EA615983FCC78522F9C044C3C3243997FCD7928685AF789D10A4AFD65C 34B1E170C18DE780875428B197EDFDBCA00F5819DFEA045E89AFC4043C892F39 0F569F2F9F565FA16DF286E9745CA5051A24B31B18D7C3E912F99E2310E61E02 8F3815455A787CD3229C376AC2432BCD5871C7E4295904C631357A8F6D06B1E8 832E72CA53BF79C2CA8CE90DE93C61AAF973165EC8BB718A9608610C57629469 87C2AC93CE52DB00EF76C794B338E076A44ACF09D5F823757547850116C0C9F6 E0CE2469EA405D8E1304268CD471A0DFC668A244AF45916028EC6D643DBA519A C07E0E551B261247AD147A256A523040BC5D36EF8424BCC27D290778E856FD62 30A17E2A55966CC8C9AAE4463CBC3F7A1C232BE92D993B74CCCC5A91FDDCAC20 42ADC63A334B97D988FA5973D9B493C87146443EC417CF4E3280619734B07806 3DFF5982DD1E262711383BA61D08E8E54F5FF58989690E62FC39C304186913F6 27FCDBABA76A648EB4A0497A4470606E02044C4722ECC612FC8E0100ED206D69 C9110C604EA391B33A63719D837EB628D8207F9A531977CEC0A5292C53B8B89F C6A080D70D9ECB4D48153165D2E20F6DBF24E37F2BAB2FCEA5327E3670850368 58276BC6BAB3D2A6E448DAAFF82D2B65EBCE9EFE2D7B906B14A21E11C3F811AF 1736FA7183FA883124028E0FE2568235447960EBA22EC16296F0DAB461339F38 62717140B2C30BAB034B97C5007655B26F402C9559FC2E7A0A6A8881E30DD364 D1DAB7D6C212813E11FB38713572749FD38ED7EDAC1C7D6BA1247362CF12AE7F 34DC3C4520D524F06107CB51A064465A7A7227BCAB01C84422998F9B53BDC547 49A357A3D779ACF4F351A8A20C95D08E6930A2C81614B0424C1577B3A2DCE0B9 275A416E789C4689079B182A5F81EF8642CE885CFC6C5DADAD8F9E4E088FC0B8 8D1444D811ADCE4E886D03D2B055042B52D900854F44BCB6C84094A6223699A5 68C7C749C9224C42132CC1A2162CC1388D42AAF7CEA313CFFC773E3528902080 536948BCEE07BED5CE0311A5BFC377E92A44BEF9ABCDDE0EEE11E536F529E85A CBFF27F0178F00608C191847BCC717D46AE62B8C3CC5F9AAF01BBE1635D94E1D 701F54EACDE52AB6670632E496271D1A2A2A47F08B85F6E8AA6BDCD096250D49 7DA3BDC2CFD002C0859D45D8EAA340FC8BCF33471B7EAC9DC43A870C06584E3E 4A5FF7D96F7601D0DE362D5D4D2555A2E8E297145695C4F785B97AADB96A0860 C93C934B4EC3502479F875E10D9618D349BFB882DD82FBAD6CAF2497654A549E D61D88D37F36F379E4876FA0EB6AFE12B95BC6D4CAB5A986A6967EA29DF54880 B4B12A9F2B79A1834A5CDA98B322DE8AADFBF527C2919B8A3BCDC326D77E76FD 73639226E6CC218220C9D830FDEAEAAB7AF5C0D1328DE62564D95BD81C835B06 BB8083E57135321AFB9877E08CCB020B0C67A9DCB596A5F29080D60EF5D0FE7F 6B79C5ADD43BF8E7EB767AE4C5FD61B5272369E42B73AF889E310C169E38D3DA 4A261ED657A7339130277C0F9EC6CBEF69472477B9212C81A61192D3E0E46686 2641182C16701ECF8409978E2CAD7518012658991E57D28E4AC66D51C5226424 02BECE6555DA1A22700A87573E9AE0E31EC99A8EB5CCA2A993A4B10EF7A3610E DC92826DEE23716AC8892BD57E19BC473DD05D7A0E38B002CD41922B38269974 F25E522576CA16BE833B451D4D1AA1773B37C5697BFE8CD84C9E2E9D56CD2725 C4A1877B40E4767984FDE1C2B37A9725C98584D3FB294C4246881AACBF67A10F BA056B5BABDBBC3FD8703E6FF094E662DC8A2FDDA6D42A53B20E3C9F5B467E76 3059367071EB9E000B1935CD542FDCC761334C7B7FAA9D92C949B307662FD8FF 953184211C28C17A87A9857833551160C734915CC955E2B100AED778708B2234 1DA4CF42420E2F48AC577E37B0215F963FC7844BFA15ECAE83245A850F41571D 7EB94F24F517ED326030FC06C0725AC234BCA5EB709AC94D87852024F50184DC 5424EECD7764A0D20036B28DAD748E2084A0CF1623CEF44165CB787B3CB1842A 47468B5D75B3E0AE1887DF58F7939BBE8907FE09C87B5DC7DD64031D60B972C9 A2701651E350B6FEA8CED3C1026BB7527CEF496C5B6E9FDCDB90BFC820885F86 AEC5AA8A1AB6646B21906C0CBAE9F55BA7F19067197EC9184C35804E0E5F0CD1 B04EC4DC38F49B8A5A9C19187E1DB5CF387A938121F184AF436D7EB5DD8FA12A 9FC81A6A033CF6D578B70359158C1E2D6013618F5F872B52F4FF53918D7836D2 09BA3CB9B54C136B8E4C88E87127470E6455735969D96FDF80F676861CA1B3EA C0B660713CEAD17C58EAB552121E1427C88514350BD4764B13E5A9F7C4743036 43C5366D8E21D5A671FBB8FA9F2624F12CBCD6E091CE2BBDC995F22B5E8BFE79 F004AF81C8F356ED727FEB566FEBCEA9C3492EF8DC96F2F577D83E971A04259C D4854A8082B0D0412187D52A1577258CEA6E5C9C7285A5E25F56D7E6174842D2 6A0DE01BFB8DC07C68D2AEAACBF689B2E04B331688F34905C70FE440DE181813 0794D602A78DA154A0E645A755FE24E9DF53A8B4F088FE37D2605ED5ED7F0AE5 F6A6FB2C217F345655B278963C63824D9EADB59C7B1162C34552458D07297E96 2E5AFEB35AF92F1C80CA21034D1ADC6ACF5CDC8A222CF4F99F7A18835F58ED6E 1F6AAB4C9B87B871597FEC7DDC2E1F5FFA5EE99DF922836271B4A8FC656E8B54 46390B875F620C87C91770D9680014AB56E3FF4DD716B24C37974740D64F8DA3 83090823A2603D738C2BD6D0B5D7AB9327FDD6755D8F7F5A6F1AB1ED99ACD70B 9A484496AF0DD7C685591A9C9E68B4DCF72EAFDB06E17A1AC7DC52B7BD1FFCC9 D9BE7F1B614D78583FB226AF258BC38AA717495F69A6F2A07540751777F8F5D6 48FA795F46D17FDCE22A2C24C90405E24A7A8CF5994216850FDA44F072AB1856 6C3E4BB95CF70387C627A92BB98D83CC90B20A9DB97E812C04B4A4CFB13B698E 364716FC614B11DE2E2E005825F94A7EEEF36BE353DDDECFB6E6DA6B5F8BE620 0DCFAE92106A75B5930473286DBF79ADBF6EAA24CCDFD78CBCD044AA3CEAC5C1 28552ED49D36BD421A7F8850AABFF7BEFDA18E2947AB2123AFF0BF96EE9B79F1 9C7ECFEAD3C0019D2A4B3D38B748F8CFA2DDF7E927CE235B7EDF0D1E537BC93B 49D338C3F7432849BB6D23E9F9156627EEF4B450C24272A28DDC49F3CEE89962 31DE631573BB6E668F5D957909DA00E6709A98ED6144DEDF200DCDD2831DFDB0 DABC6241AD9C20F19A71435669C8BE538F1C30C68080100347C24B57FE747D6E B4053F7185BAA9B34EA42945212026AA852F9002182C8834CA14331792901E33 FAA0BE73BBA726223FF2568281EF66C01A5A607493F0CC5EDDE04C1D5A6524F4 E7D9BE4B705B73B71F2CDC2FCCD1D4667386EEF0D7040BB168F26A123A9367E4 6CAE6F5FEAB9035ED8A33D2990624A49B63725E56D509CC674F517A288DE55A5 D7BDD56550458877C44C79F2C074A0846776C533F675DC7DAC1E29A3A3CEFA2B 0FEC3C803FA8105C6FED3F7057C9EC2009CFC0D6FEA28A074401BAC04BD8A263 171926C38F07B84FA04FEC39815E22D9546307785860038F3525EAB182282F45 1C05BAEBC80F28B606CD069ED3D56C1595DFA3F6E62165DBF1EFEDB802455AAD 96F10430ABE6C2DD44B1F4FC13CC5B45EF3737C272DACCAF2538C3BC50E80C62 C866714B08347B11F8E891F8168F7FB9F6237A1C2E70916AECBDA1516009922F F4D3FE0A3821732AFCCBA5EF377077CB470C271E14DB53E89F5204F925081159 1D3461BC0A6BFF29E96F6B10760C3DEFAA87D1755F50C0CC1C0B40C08587FDF4 32915F8C54139F71CAC33B62D87D322F2F14B8352AC8FCE60F59E7B63DF0E3D5 E1756D0B70565448B6865136385CA8C2FC8643C49082660259402A42D3F3A2BA 0788BA660E3C1B5C42EE028B111606C802E964DDD644435758E05E87B4442C3D 640582C97265F09BCCE96F3ABA0CCA9DB76326AF0282B4D4A6D74E84AC0B6377 5A0B5B5C9758DCB9D9F658C4D773FC4083D911450097CD4A93B504BD6515C0BA D13BAE94B40980D1898D1A6B4075540E9EC15A80F20590B5BC7FAE201DF0E359 E7A65F856E80BE304086DBA7E958353AC24543AAC9209195DC68AFD46FF165FE 342BBC77CF2596578B15197F6A7EBF94E6E76B014817E890677C83EB419419A6 221DF308522D945B5ED34A395167476F1F795AAC0AA84C190C353BE149D50D99 F8F5F2D463CCB6D4C3BD53C0D2FB668D726140295B0255BB8B1A574BB3B72D61 1C2441DBBED31AF04911F1C92E6E615A51C44D7580D859221FADFE07FFD9AEB3 1361A8C071F1DA5F0D4F956BF6C1ACBC1EF9BF3B6C276AA96772C8B1570C0E7A CB001B497A61694344B665B6C8EAB0385E1B27DC2AF97395E0C7315F9EB780B0 9FD3941132BC2E3E7380AF786BF395E51B50C1DD9F2081A3C4A4353BC4C2BF29 E11A522E62B335ED896FE6CD9BFA9061CC9F88CFA976BBF50C75C1D0A788C47C C04002D700AA65BB3CF133304F521D2138108EB7062DC6B430DDFA8B2D9848DC 9B9CB14E3153616229DB50EA2F99BFD76F1AE1F7138BB20EEBBEC936FE2C3AE1 32E23DDB9EDF4FD40BED50913C4516F30BD1C9093BFAE537A4AE4E40929AA924 A82E9DCE7A9E5E657D000F958F8DB7F0D8226D2C0AEEFB2F837A77E7C2BF760C 6728AEFE032A82125B487EC4355DDD9DFB541DC313992CF1E204AF8714C740C8 B096C87DE1000478FAA93C0966B9DD0693EAB6CDF30C1507424998C9C64FFF3B 97002CC08ACB30F05222048EE59FF315D07B458D992365E0EC0C0C8860269A86 4562BF2F8A561CD08DD5C16625FD26708E52A8C6FC065F4CC11B8359695E2B66 2B712387F7DB0B4DE29ACAA503D84B5251F3CDBC64C0B24EE759AA0483BFC67F EB0826C1FF9C4102E2E55788BEE0129731E74F7A1CCD8EFF687D52C36C5EAEAF 39A5DA549C84DC7C2404ABCA432569860F70CEC5C09D5F1F6F7C8E771AE47E43 E0A6EF05B0338D065F9A3AE5F5C802D8ED5A87877E491E3D0FB1C199EE9335E3 5E6FBC17B4C33EAB15A6CEC38E3794B96E838425D7CC961A146808B88DE353F0 09F9813831A6065490E1D3516467DCAAB8B508FE8A24357CE001CE2AACB7117E BD32D2B3818E7F205EC2AB344C4F082570F3955692EDC670EE21A2D4F30C4D2E 5314632B7FBF2A5737D8749281F41191562109809E45766CE933180C0E5AE101 A857E96B1D52FAEFCF6910F1A241C8EAEBF6F5CF73C5FE84EFBB73BACC47DF16 4755F72E62F669C157686EC559AAB485A132CC47D0A34605C06540EC7BE0485A BF7653D4E191CAADB45EAF770901A9E590004524CEADA3A90D644392F2E24577 9EAFDE24F3FF88F54EC4E4CA70EAD012722824C025F202076A33C48B06379F89 6B34C0D0C4D7723B5C130767C64ECE0D40F7AA07676391831FCA5BB4CEAFBF06 FCD07570CB9FED395B2F34F2F06F405D94E8CA048146022467BBBBCE9A45D8B7 A5F0E76AF213C54B6C0E071B6080C4EB603F6ED7B2E3FB7B250DEFAE8F6B0E46 603E7E5AC92D01AEA2DE6C858D2E8E644C705047A3720264904E407E0990C830 249441336188E63108CB8360774CBA9812779156AF52CF9E14F1B25F19EBC646 3F97ECA6E26117065EB974098BD7D3478FEB9E69C80956AF7130B6414DB6A7F6 ACD38BB0798D8E805AD4F8E0DBCE8A2BD64104C9476AF18B51BB62942541A8CB 4769024A2F0B83229C5B0AF5E543C4E4E38870B1F3748226B65602C5898C317C 0984F152FE7915B1A4491290BFA0FBC91D59F2D58F0A0002EFEF77F1AB0AC9D4 B2B1EEF4734ACD37171EF2DF46609B929957F1770D539EC3DF3018E33E3D9D42 E20EBF54A65BBD4605F30AFD12638E768507D92A4D4CD31B146DB78B75A4F8B2 3D1097DB4730CD3A90566987EE22DB64B2B690AA49E38F97D9355AD8547D1AAA DB256F41C2AF211BE2DCBF5112256CDC9DA80DFB1C7512E46BACC94DA61E141D 647C722A913FE8286DF36F3D64ED7103702AEF7497AADABB862FD61D36FEED9A B3D130E5ADBCCDE21B58F8EFE6A36FFAC88846D2FB6E39501FA6FAE4BCF93B6A 4EB312B78FDD01C3E6A93072FB2707D44001BEA2FD1756DA7487538B35FB2583 004331E9895E34CBEF44A061C56E72D841A9DA7BF779178D6D0C8FD5E173DB76 381D9549F09D5297900D73D4D5C1863E7A32C582C76A029B0A3DF60AF84E3C9F 16E8BA6B4F035CB72897C5E400C535E93428DDA70EC35B4598B80461CD3A3CF5 6AC4E410D10D78169481F83DF3DFB33C68060E1CA2044FBE8FBFD8411D811B8A 69736A3B58FD4C8D5F68C9F1B83BF5D1138E8387A8E04F630CFA89D0BDF3C9F7 5494496DF6E70C8D01CE604B376A5C74C1976A54E662262BA8024ECD6E129C44 4C8E07547103C2F7687019F585D3F8878FE9403621EB3DC7D85C2C6F30AE23B4 6C450BCF969B3E31EBDC468376EECCA3D062F7C59654818DAD9A0912012CBA1E 54721C01D4558E2DBD7CFB7FD1E02F1E7F725A181B642B1E9877D715480BE25E 6BFA7A3066216EFEEFEE483843F9C40B5EA04A405ADEB25654A33D1CFE16CF76 2FFB5A55B6DEBC4B9524A8263B49EAA9A9B40A05377007487BA5C504B11CAC39 87A0BE02DA2CFC31A8581D619CF49F5E44F58D74A03CCDF062A11DE29CDFD36C 6A68E596E5A71D2C13B2B67D2F9CAC94A143D4D070462D87709DC8B4CECF7D33 9D4647F496B9F6EA69E61D697ED196CBBD9AEB6345A59A2449F77A387339E501 E74B0F079CB2CB703E3EFFB68285DBDF3F331602FE0FC1F0F2EB38A6C477A78E 58C24DE6381BBE6F7B27B78C5361816BA08A792D7410BD44BAB2766B1A81239D EC2A59B73405B412C2905A45DCEEB97794BE48E19A25D099578D1B8F35152362 D618D20C644ACFAAADFA17E4BE0C7E13709E4D09EF47426CDB57186E86C1E909 A35BBE68B667D0882CDCBAC54F8CFB8F647EF13A302BB43149F9C332E25AB9D7 7860B75D59FEE75664D78E253B4AA3F54250F4A79F1F46ED4C59B9F847521E78 02B0361113A5CB83C17CE2BD5DAA55FA3ABFF44D86FC797DCC1F99EE8CB4CBAB CB8615FF6A914D179AC027C6ECD688206DBA54A2531F1AFBABB6883557E886DF FC5C71451BEFF41376474BCF24DF6E91D01FF6BC178ED39FACCABF65C1E24E30 FFCE97516333FD4D27E1ADB0B91F62E8305F8C153CD378F20EA1D2EF962328DE 5D0FAE0D3996E75042BDEC5B9592F79EFEA5271F032039F412F7C213406A0568 46ED642E9522AC3B33E49F47DBE352D9AACD6E36EE440675DBF404BAF986C51F 63091646F5B33E6ED76A029A7E89CC774F797222BB96B8735D7726F7FC7F1DBB 6085A1899995C603AA59546562B354297ECF3A87ED8C2DED3A3F7BC6B74C429E 15AF13B52DB9EF3494BEF638403F91CC513A578856C0B466D6B3523DD4571F2A 17E508BA1D5EF953AA281B85095BEF79F27764AD20AF1F506DD2E717BA54795C 38A64A5C41DAD526400BFC079482EDA8C4CA95A629BD9C11BE3B64166662C05B 6EC997E65073CA80D5709BBF90D1776C7092C61E989F75E4F7613C63E4495639 07D815795122528D2FBA1A27D2B2188B0E51975FA7BF2D28130D1D1C4339320A 9199A9BF24A7281FD18DBA1E445FABCF1832D125330E64FE673554C44B4CD26A 2186ADF57793CA017167E6699567FF5FA0DE8687F86AFC92A263BA0FCA0A8DB9 9B16311E613472D9FEC5BFD39DC268E0A2D760BC19F6ABE0358A32244916F089 0A6D203D2AF91B9F3FFACA55A9F6FB6B2EB32D3624F12362C09E600EA7A0A643 DE2D6AD0F04D5870E52F2D1CA8179EE3BB9C8323D4ADD3471CE9697338A910D6 8A79B1719822A5864F6E93D01D96E5252DFFAF076A11D8C1FD419E3D92A7A023 1167DC9F87B1355DE64859145D188622F5007A65795E1DDC991BDA29C627EF5E CF55E60EF9ED9666A5E45CFB9CA7825D7E0B679C0D5FE02EAF80C12D14A86AA5 784D77BCA5DF9744A81E68F486AB0996D5DAEC32A1609A718D5FB86663985F50 8AC1CB89A2A3CEC73323E495BC5BACC411B3952C8AE37D84497CA3075ECE6AA3 A4F252A796A4CF4EF6347891FA54E81A21121465B46DF88D590CCE159D0BFB12 246D35E1A6F369E47B5C5CC59FC5BF78DC2FF476D1CFC3C1AA14E6CF679CC658 0294E5622E6F392A0BC4E7BFCD3E54B8FA6B7E476BF2ADC67EFE627899BA746F 0C7312DEE1DBF8B71170EBFB4C3DB37609F3A5B6491C781C169C46B65BD4C7C3 8520F297E1C25749EEEE7C92FC9DF43533FEEB00132CC1B5EFD7CEDF2534B256 912526F12590D8A23924C26A22E8B0F3BBA6DD83E727481F6187C4FC0E026F3D 7EB38E72E1ECC5F4758524E6AB300CAD45F06B34E660233E4EBF73004A6E5D28 F80822FA405CB830C25C6F0D75105DB8A3994BB9257BD1A39DAD2AB2BE814BC8 FBE19C3074799D30ED470BFE77B4D484A9415B52A4B3B748294444831469CBE9 DF73B2B96828273266EE1CE7E233E574F7B2D21DD7CD5E6B755BC54B78E23B62 E3708E8BF213C0E5C3580968CFB0124A91BC461A7132E135F2976D8D49CF1564 ABA2E715D31B2A9F951677F9047B6AC42DEEA1325E63472DAF7374E6914C554E 5EAF8654DF454C89850FB57379F9EE2FB8BBA4C1CE06E5A689349585BDBBBEC7 0F0C29DC31C97F7D9637B673F03973ECAF59FA4537A4A91B483DBBE0FF641DF6 C32E7CB0E2F4783CDDE88E9B71656F8A38D39106263E7D812CF8C9E5302F30F3 B286D28D12D34546D833D63EDBBD301A32E4D84A49ED74020C7EF8D244A4BD8D 76092C90A9C46E4DCC985DC9EB98ADD60AB42D258163A585C2E96A718B1AF3FA F82E65D3F5FA63BEF81D635EA40D715B1B8D41E4680A8FCCC881DF8EBE280C51 9B48514A93693F22624B60E6A408BC4B6E99050533136B7A80BAB4D556D170DB 37943C7867E2F360CD99EECC0941ADAB053C4DABDBE5AA7C51CFCDD5F52BBDD0 0435513D1923FA8EA278B434D98F5C38BDA87F5FA804BB9F3531FB0AD92C7091 36E169A7FB8DD656EAB156CA53B0AE51AE1BA0D9465E0DB14AC6C9317D599B2E 02575E1EF48AE6F9D37DAB1D2FBCC9DED16CD08D031DC37509F2DE2A1C75FF44 3D27D3190EFAA4862C8CC17C5899E2D06758D0CE4FEED4B9904A1B5C59EB3BB2 2CCB6F94A1068A2C0A4312512D09E8E131495F0778B147700947F137DDE49F09 C4E98C9D09DDEC7BCE2028D8DA083005F55DC2F7955F09F3A302B94F14C6BC61 F676B84125753E175FD9566477F456E539C867413F1B0C2821A37B504D03149D 733E17A4635F3BE3A99F21A00718DBDDE36890735BBCD5FD6B79FBCC3C58688D 5AC44904089513A146744DBEFEC3FDAA82AD8461064B9CA1F53F45284B565949 0B5617015FA25AB2F38DC5F425BCDF2B3C3E49ADAC1B74F7FE737CB5E961B005 55153B0DA51CEC202416136984D640E7E913A37619150D45593505DDBEC9D461 A4CB8ADD6F0816DBC3258C39C26D9C23F0A83BEDA744FFFB92BE95862D934084 B02D44CFAD4AF3F43A358F21C3665C201AB87649CC9E6B03008DFAD41533C335 9271F6212F1A3A4CAFD8FFC77393B0F434424F345687D60692E61294B59BE135 A88109012E14C2602B72C783377BFD8C6E08392DD4A917AB29E79D5F470D60D1 09F35A4C53A027D1B037E68C746D9EFF59835A58DC912864D266C0EB6E5791D9 A0FD39024A64C1261CA7D9D4E396241BE808E2C0D2EED9BE545954A02F0B6E4D 63272D0A4BAF74A66A9D7626A6AF21FFD4FA2213D524F6784FF3CAC74FF74922 A4F670CF057032D3036C9A361161BDC356F7AFD58777C90C8CF97776B6D910BC 405E1FD7066792CD137F7E3D52D0188C7AD1BCD67F72657C2F5F4AAD4CF465BE A2529DF2C60E9BB834FE5DECD16D1062095E2BA9D9A316325AF0BBD3800F537B 9FF87C602C104655D2E8B28ED276F20869A9A97244A4FE1705C6D2690A743559 A57790B86CA7C99FAD6ED5BA19A5849CB4888A35302087C015BF38198149936E 76AF06B0EA8F51C90D2D70BD3D1D5711DF6C402CBF050FCCB1BB2F148FFD3698 EC950C59F65BCE68F22029D6244F6E585E160E235E0DAB7BA440FDB7CB21F471 337FAB834131C78327A7D6EF9415F5294DDA616B17FCCA3CD94853C930BA5836 343EC14E60986F5F5A6A5D6915B1C968025B5CADE5C5EF65B0222B81051D07EC B1CFE4BCC052F4AEA5D5A3F1D2C0EF5AA256402B0BE874DFA9C4D8E9BEB7E901 B6E98C58B9BC7AACC592B716D8BE64B9322FD7793B5C759D9B2855E4215EABEB AE54F9DE651E7A108E444F72C7333C10739FB44B69CA887D2AA363A0D3B84537 705EB9B3CF8CF4997917D5D57C9509DC4DD1EE8D03BA5BF280CC89C8DF317A1B 54AF2A6E11630F56C2AA9A1A8F05F49D9BEBFDFDBF163B51D3916706A01B5D14 E9EB155060D09A61A8B302FDFE85C6D62A3FCF8AAE3C525726802F8A1CA5813B F6121ADA8486129AB7A792E791CD6A8987B747F6833930C503D6E530B4B6DC18 87B80CFB0AA87CFF8304C4ECB8A2E404B7A5932A965FFBCAB12BF7B3EF68E2C5 AC089CD88DAD97E6DC4359FAA7EA672DD787A69B07B477D8BAEF29CD1EDD221E AC3980B3D74523ADCE1ED4D5E6426355C6B2B5857359B7B7707ECDD4501A6B70 55CDCD0892D1F28099C331B3A5B3CEC3524189B37AF696E8BF2B19183698D42C 8D9D7294B8A25933E70D514043393CE83CAD9B669D5B65277E1294979C8B5733 510EDD4915BDE3FA9B57EC365662C1B4F3A2276E627895DEECB32E5B05ACAB6F BBCDEB32889F78789862FBB3EAE77E16BD5AF534A3A04AEB484BD500FE942C37 735FA0C3D274F48F96C1F52FCDD1C782CF810EAB485E7D28D6D3A95E6FEA264C 2CE8F66D9A988D3C20A8857A978F48CFD79C5049E6AA36C71EAE67C6A3DFDC81 7FC8D6F3025F7DA2F700B72F16E32A379542F7A9261EA1CEACDFD567B563CBD2 C7B6870D268747D778545F33FBDD128106DF455DFF84AFE5DEFCAD295CCD5941 69CEACC1B3AD661E54217AD7685DE74BBDE56016F3E8F197EFAEA6E00FEF4B27 E6504856A6CD4CF3299BF4257A114CDF40874009730989A4A2E0377B6E5E6A62 452534218DA4FBF9AFA443B1B86986A9BC2185DB02A723502A1936A33287A850 F6C2DD755B62DB4B481EF392BE9244D08826287EB033DA13E0FBC94132874112 C1911B39542805EC001E45AE4B4DF452A77B72DC3EF03349D0092A08031A6B12 3D18BC428FE3CCD6C0446ECC3505248727FD641455F0ADABAAA1AEE0A8B3D00C FE5D6509CA929CE140EE150E790792E847626F98CEE5E17014A0F0F474276E84 622EC6FA348E06115BD2E4B13DB02F53D072573D8479D28C9529ACC224167D2F F0DBFDED9341F6491555331FBCE012033CFA627DE88AF8E25AD19DD4271B39D7 60387D59062E34339A95AFED386833941380127CD9600E7E3F3A27BA9ADC1D35 EC725EC46BA57A63C339E58066FD385583E8958CD45FA99BC77E71FE23E1E338 E014A99AC3915B5FD331BC2387F9FF93081BC0244D03839C2ECF90BEAEE7E522 E65C1F0F2BC9FC52DBD7840A0DE37938419177C6EA2CFE705A804217656521BC FE3B9A64D83BE3CB28E8567689A5FB632A7C0FE2D18C70512EA4D64F87E774AA CD3AA031ACCD9386744695923F0344103276C3AB6F3741AF69604C519901446D 3A12157DE158C06B10BE262907D9AF95F25E9D6D3FDC5FAAF92F3DE042A144E9 D923EF6317D30C115D07E7A53A9356EC375882C8E6AFA0E7A9E7549368D68D79 4660168DB5E0EA39B27E9ABE37D81830A90902ACE346336B4A3553F96FA27FE6 B0D872ED36B85F2C00BAE0EABF40BE377EBFBEBA4BDC7EC9B0E09959CC43988B CA2B44CA18B10CDD9DEDFDE8BF59214F1D9E5E585D457B28DD0F94BCFA601123 97F94118E3A61E67E201C14CE07DE1DFEA766B7AD07F292267E5EC374F9B9395 6D7A3161E903C0D9179E423A98AC006D9C0CB07CE874AE3D6716F05F76409289 83BCFA351684D5918BF0EB05487D534614C3262CDC7FFE1E67D6EFCFA7504C40 8940691630048E7670347EEEE1F5FDEE09ACC413689374DAB4C08846FF2C3EF1 CCA35E50D820BDCCFD9B41373E2B69C5A391AEA1C98CC87E8404F4DDF79F11FE 07C6370B1BDA73DA1103B10FEC9374BFA373416F7AFE313ECD78914E167B4FFD 043796AC7A84C7D0490EB03645EE5464DFA5BEFEBFFAD7ADF83A2FBB315C62CD 29781BAAF0950D71DD863E0F304B214AD56FF42F10F03DA3884A5A30282431DC 85F2A3C84CCD70D1FAA62F0F4A71FC647DBE78437D96E52928591A2157933FCF F2207083D262984DE8B112A5C210337D177F44F9ED3C62A76D9482122E89EF48 B5540FAFDA5FC8CB78B21598F7A1A97E90D9E3899B92D84281A1F0C32545C153 3C6024A3775936D9801C70CA6F91A44C802662A6AEFEC44003BA151459461CB6 74E74195259572 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 40 /parenleft put dup 41 /parenright put dup 46 /period put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 56 /eight put dup 58 /colon put dup 65 /A put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD262BE3D172E2F03F564F1325C9F1E050C83C12E0CE3 C7F58270B5C40B46B3F592FB41FFB7F59EBD69B2F489441E398FEF7F84C85055 531D95FD21629B0E509C2FCEE995D025BAD5D3F28CDBA5CD414405ACBD936C3F AA4CB2620D7426002161F983AE95E542EB8553AFF7E57B82E05FDD5FC433E1DB BBCFFB1ED92299DB0291CAB10A84529B7FE279C62628A24A2FC36B01976E13A9 C528A198B8EC8654AD69CCB5C209964A2B25D6DA9BA0FFB366D19D8C69701D7E 8ECBEA88569601C80E19A4165AC73F32D0ED08C8FD0D0407325DFF60D69BC8FB 95D27536CFD07285E9FA0E957BD98B45C2E7A24AA33635C6683B801BC89AF92B 57BDBD4C4FA2979D6344AC3198440DB1709FAF1D9DBD7EF56D6161464803216E 9866C68434A3533C4372DB3C1CFA11ED5321C3F4CE7CF78E392506AAF7257AFC 7C9AD27EB8EB637A93384B54EAC3BD084571DDF97EB5E82C643FAC667BC3DD3F D981A9E0DDB7320B07F23CCFFC4D74C034EC6C36DD66D907A4D34CB94409D362 04EC03D1FB2A58E607C6ED3FDE67E97D9446876F6C685938EAC48CFE4A228E83 FF5AEB1A4FE7EC29B33D17293570D43B501DA206F7CB0C5AF321C58E21F739B3 49C19AEA6529CC550471E98E84DADA143F571A340759AC0809A695A56EBE8BF7 6074197773630952FC57B9A3EE95B0E63CC4474A6ADB4D9E7FDD3B2B35294CC9 D9F6B1C2786D00FD841BA8007988D6B4DA71736F63B1BA028230C46B0AD6A6AC 8126FAA43863ADCE0DF29E8B4C9EF15CF7D80AF346C45A9C347273FBE528E1D5 389D396B339BD8129B462513B063D931CCDF8F346959483BAB970A4428B9EFBB 0773F9B2DFA2D6566AA2963DA654DC21F8F11EE928A083406353DEF3829EA553 EB6EB0DAD22A4245AC88B5C509DF6C290D93AAE1E5BE9ED6BDA7D04AB0B0998C A1264CE0025B1B2E2463A5CDC5CF0F60AA49AAD32391A5F97E27115223C6D1B8 CA9346C5E650DB86749EE83275610023D41A47D0E5425E74D16A6EB98EC38C6E 00DFCE06B41D2FEAA761F5102718086A15E02717309F7D3B6140293E4B1A46D8 6E8FEBBBAD104DFD4DE26B87E61A3C0043AC2C2DA283E1167D0E07DD24C80C94 CBDDC86A09F86E651BAF3E059217118A0408612BAE85E4253C83E3AA5066CC08 7E6528CCBDBDB5A63297B0BA85E9753B1C968783835EC4006D89F51C3E7D5DD3 31C9CBC83D175E7832A643AA617DC3B38D8BDC98B7E806BA0F224E8AB73100C8 A7ACE961DF33A8D97D6F86D5321B57EB2055525ABC17B676585E0DF57FD4E591 1E6E9C8FB7991EFD37827EF2620B4BC0FDE501354F8ABD9997B508EA7731FFB3 305944D9A5D4241F0A617F28587E7AE09F73C60B4D1FA1C37CB23B10A8E3FBAD A2E067B24AE9AC5715F62BD011EF14B6DEA21DA0F2E8BD27C918683CD1484950 2C5DF9BEEE20A2F79E60B803E8E3D47DCB19F8F24AA44524361B5A8DE4017ED1 0A04EE08C9E9724268FDF318A6D037F8344FB9DD23441CF3ADBE7EE059E00D4F B093E7216014B26A490F3779DC5E0D60635537BC8B0B681A20BC3106D4904947 B6E8F68EC6B10B0B8D1304273BAE5D764FCB8A1C33CB55CA860258773A3C4A67 794668D72813A662BA507A1EDB1316165E5148822ADAF61F31C8B4788D720A8B 6437E764CCCDDFB1206E7B84AF01BFCA1A695B75D96C47DE7C62670DF0FF4C29 D0340782B68BFB6CE59C43F54C83C645138BD08492A5D8DA321703B4FDBE8313 A4C6A13B04618755B5DA2C506CA059B87DF17085F1181FE5A23359C2EC1B27CA E60567F112BAF14E9DAE8B749D28BF8263866E9019A963884A2DBF7F1F0B4A4E B7C7A0E084F4A8F76EF5B001E3052DF0CF80C56DD85057073E7A1C1FE182A81C B72098679C11A375F715270D5D834E94EA4F222F7D3DBAB1AB1AF1EAB16E7675 42C5985A38613C54FF89DAD80417B054A826D5B6F47CC25FE6C5E831447674F6 E7D0637D9E729D1F288075BAD89588DF7AEC9EFAB07A2B73D8245A4990A7DD94 11A1D63F6E1F9934A807BE37EC1A897EFBA4DF6998C910DD75658BF6F133196F 438C818B549AC11198008DEF1548AA8DB6CBBC8980C96513E790F19CC3A3C151 1B12A9B524F6026F3551632A3BA2C9FF376AEFA6BAE9D99A990D6B5714C06D3D 8F68CA21B985E93B0FCDCFB8A39F8DF7B996310B2C1C32FAE1189D6826363B69 AE6B1B7231D8545A0863B20340CDD552B304B98236927CCBA7BABDE112C25380 2D08885E8AD17C915908BBC9786D595A0C33A4E7EC1EB66825AE036892DFCB32 F0576B232F99D99AF3E45D1F26FA0DAB711852AAE2523C6795478BA47E4883FC 92A1223B740DF537FFCAEA617CE3E01DB8518D1B4F60633820F0583187D99EA5 72E4CECAC883823E5F7EFB04E211AB3D3362FE18F9EBC87470E3C62AB782B5AD 518B69458817EC3A7B8B026E624AE303D18E9E18768F3D3CC978DA4DA6926738 678E2F96F751AC5F55FA5069B815AF3E06071937F0D013EB7791E718899D92E0 F13260F6A4F8D6B0BA5405523919E543AE935DD6E1121D4F2DB2C46224CB23BC 39D8537A61DE02008507809DC8906549846FE92F4A835E2217E45CB52E41C696 98171C24A8F4EF4539F8FBD56355DC995E6E2033E6CC70686CBFA59C19E29A08 3FB507DB7262FF4520CC3B9194EF5BEAD93EDD5CBBF775A894EEC324676DCF96 24AEB7824D5B0A506A5838F4E8651795D1611577E86A55393644B2A13E5B075A FDB70F8619D12A0554476531F69011ACBEE38895BB29439BFB469759E13B9595 AD5712F767893E2DA66E73C9A88BF9C131C2E1494B2BD04697CD7655966A2D7F 4591E4FE21C817D5337856B6A17F4C2AB207CE750692DB20A25A13EDE487B3BC 0AB2A5C821DB76C4E9100B0D7C4AAF737495DF622216064C01698126F8F237B6 6016C1FCA6322E7733F0CA0EB83459B143C970CC26EFB1FBA673DE3043FE2489 2B06DF11D30E1984F7B57DE00892890F36C445E0004DD0492D0BFC40D8DFA970 4C18FE162CDA7DD31D69714E55E455399C3DEDE5A9A23151ACE7F23D34E70F98 0F1AF32C7984263F920CDAED21D94CF9DDD72E8EA7AAA7EDDE944F167E318A43 FAEAC3F77026C771C81017AB544FC6F81009D861402817ACA88FA41C36798168 29E7204C78F0A89166C1F27B1151988825CB4330693F33B30E0B006352966677 7FB5E5D522018FA4C7AEB791E84315D67D114481E4427F0D219BDDE0E10AC009 677247624ACA604F41D4074B24DE54B57E9FBCFD202A40EDB497690935AFDE21 0FAC4108BCEB82440D51DD0A0D0D61E3F21204E61AC15BD51061DD72EC27A4F4 7EB24BB58BD6B081C68645E555F9EE3F5B71615BC98F03CE9F059BDE71F3C3B8 C0283919A815DEFC70CD1C8C450C6E9CF1001371EEB6651EAE42C1848C0F271D 0466DFB548B0DBAE1A0F79CC7F9CF5D113CAFA86A04048E0F6A0F6A0E0D42E29 866D8AF62A565F302609905808DD338460BF75A75DDDDE4B38A569149B2EB856 8AC05433CE5DF29CB9F653BAC71270C8BBFDDC4794FBBBD407134C1A2F4D22F3 3D18EC493CAC8BC6EF887B78762B179B038D83C1C96A8F6D2C507AC5DF3E3003 22E63A4F67DC02E2D59A44E5DFE529ACCE3A4CEE2567FBB6FD1CA178DBD1399D 2CE138F853D68514F186EAAD924D9952D551504D7C95449248C979181BA3DF5A 8925BCB229E63DA811716D82B56365629960DE392076FE533516CCE02E341137 EC32EECBC9ECACF92B03BAA83859FBA0584EEA52B3904B69C1ACD8B56CD320B2 3DEC1D1DA1B66741F1C32CB8F4DA6FC6C8C64C5C3D0A0BCED43C5CB88E5E2B84 6C5E062278DF5F323E2BB59CBD5B1F41F43BB3C7AD92A69B048758C90E0D3A52 6FB41FA9EB8BFC592793F45FDD2157DC92B4A910312DC2067C6C5179BC170DC2 1E445045E7E5720410DB949BF761C9EA5830D2C474FAA17431B0B69D504C8F49 52911906240AA7A6E649577251FBA1B694F34F6D382E8FDA76708690341646BB E4C8FC130D1EB7214C56A203983C0AAE490726E24D6CC83F06E29E117DDED606 5ECDBDED5D5DF2F48F642A19F9E59B3A0C39D11050DC4895956B4ED5F71CB7CD 806D50CD68C66C797BBC187FD3313474361A2EC0C30B98A7EAC314BE1049D354 72F2C754771C49A3B8DE3BDD7D332D5FF160D2C128C7B4524B3C2191372AAA1A 0A6BA0D4B8D440B4CB17098A59622AA62423C4F7CDCB2DCD45F7553E61FBD272 EB86A952B821C8A360C531B77C49CE62BD37550DC26DBC8F1060D6710AED5646 FB43A9845023ECE6444B084AC06E83393370C505874C1260117CFAECC1AEB626 B9076582EB7F4BF3F5938AA89A3903E8FC147D4E3B89B06D7B51672391BB7F98 003B1AF7980E84302BB8ED67B4456B6F45BD1F2155ECD5B60C9D8633D2BBA367 2F503192AD0C9F3A204AA41B8AE03DD9D8A8E7FEAAA29F0AE5F18892E64A050F A44185D62296B9CADDBDAF78E769051D212D294B14265D37FD248C2F8370BACA D33E7785D00C79714D6F4C11D512033798826B3B711B7BF306133C9F536E18B0 AC2169060D5B42FE9D70FE52C3CF104F2E28B872AADCB33422A5106EEDC941DC 29FEE0EC5020582C0784556A74E3697EC5BBBFE08B7E878C06A13660F164C740 2B6E26475AB9E4944EDBA4169A9D36B43D2D88948B53B1B9C8ACB8CE7880000B 4226719FB522758866ED95E18B0965FA0BB633FBB79D67F12DC20AF71FEF1A5C 7C895EA14CD857C5C79B5CD31B7A831905E7178E26657AA3026FB65E2FC0E201 5489E6B9B60F361CE78514DA8A89FC3CC7C434EF6AA0E60C215DA385A8910697 4C1B9562FC0016794C2A124E27FCA078404500FB9B3475B7A599F87CE00DD4D2 745292C279F8907DD01EE660B88B41AC46524297065681BD24AA1979E00978D2 7C33725AD1953F5BA713C8ABE20D350B00929A29FC28C5081D9745773108F37B D7064CF53AC0788B5F3445808E1A7FFA9064D1614EEC7D193F137D8BC89D4E4D 7224D2C322B0C35A641ECF98048CF8A750C6CFB4E1EED164C354EF8DEFD02829 0F91E7C1B1F3E98F9EF0C84FFE10197F116278A5EE0330DD552329B1177CC4F7 C6A79F8D96C4392F22815A222BE811B4B81FF99E729F2D74BB86E59144C42092 B2EC7CD29E91788DFFFEB6FC9E777B7638C3CFD777DCCDDF2EE14388482D89EA 9413310C2834290131D8154DA17FD72260D811DE1C82B9761BD0FE86C799A163 99AE61D5A271B610410346F4B9894AD72E9E6F6C63678C1FD1706B118BA4C60E 69236F15FF65459E08D6942250D0A568DA1CCA3F85A0924C4CAEA475467D5D54 B674EABB35604C4337382F8FB16194681FA11EC85677E57DCFCE6B7CF780FBE6 1E8C9FACA71FAF605C03FA5880514AAA760C91C85F2B2190BEC2EAEA4E46EA02 5172F34E607A0846126675E96859B1C657DCCDBB3A64CD8315BA8C88E833D217 D352BF66F5FA87940EE2A1777C9E1E867D8D2DCB33B242C491763629311B1E84 38EF9B80554E5F8DA022BE06F57838FB5327592B97853E6DA510BB5FD2142DF8 E602A1635AA59CAEE7FAE408B381CC505ED188354A7D56707B3B5B7F2A83DE3D 9D3C34B160DE3BBB0602C0102F8BF5D17D739F2FAD17C5E403A0C6E9D3EBB864 39A015CBE7ADADE67C60414A78DC6856AD0EA0998F51352485E48B1539F42531 2E10B6E3FB27E60D445C9755DEF5BFF503573B06FE971C769B0026A866389FD6 6FB25812D7C06D5799BC6A271F1F9B0FB41C0E3F466EB109C8D0DCE23D3D2B6B 3566329ECE6951E6C5AF424C7C7ED0C1F3B1BB7B212BF4A5FC7859465FFB90BB 57BA658CD542A24049F2E6897A812AADE9B1642AA573B6AB80277DEC2A869787 070B4F72EF11D1DE9C79A34858997DB1A7789D7590FEEAC1E6150E01BACE5334 7CFB81CCC5D42E3A395807AC19177AC8667B9C71AC0CA9D048989DE54E6BE675 BAF3F13BC331E3AF75F6AB2B14E234CFC3EC303A22AA64A2A3B21DD02996460A 0BBB2431B58D0667D8EAA51D3E03C27C1CD779FB914D02BEE1E544EC44A0A4AD 936713AB7729B634FE216181F4D5508B680893A2F28EA451EF35701091195A25 2D5C727A723D589EAB2DB1AA45B271FC9AE17C0B387C627510EE80DB03FE64AD A453C9CAEBAB4BDF449FE9A0E00911C10ECDD8A9CE2FF49BB9FD2F92660B31C5 9811ACC24162DBE7992660A880B5493D03F4B7B0FC512B22A33A1E3AB3BABC0F 4B3648E710959103A0D5F6E6E9A86BF3F4EAC6BEF1AFAD3038AA48D0A38B4C90 B0B7005D8D3725C8563FD71DAD5F59E7F14C2E2327BADD45EE4854E4790F8D3E 8F2CF554208DA4789A198489AA1D0FA3B358FB2E8245D6A6E2B449B9F91F2241 E79504B052E33581DC98F440ABB4B48AFDDFF1939DC3F52EB07DB9FA636F5F7C 6A0076210981C77D0126260CE1D224519469AD53E5ECB0FF473F960463A8C353 18033ADC1CECF34BE3D751F59EF711AF0B00188ADC2D215C2BEFD52B63E0478B 553B3BAFF351AF373F3C94B2C279A9E0964FA918719657D270B4DF14CEDF43C0 230F467F10B3B814C7472E7B0301298E67F518DCAE3DD02F34661896828145AD 9CDF4D547747DCC70E1A43ED757B6FBA6BD2D2229F2EE00D5D6DCDDE1A5765C9 532A98A6BA32238AD2767BFDCFD271F009B778D152DFFC5F7B3E93FB30B479D0 95CB3DA664F7037FE20B286C7C21BD14D1C11537097674E4774AE403915DCD42 4BF85C7A06F5C721CD92EFEE90DC0ECDF37F8C4723CAC2ECE44271954B67C721 89634E05E351C4B3F360356B2C02727A46F2A0721CDC42D5FBAD1968DA46B729 E72BE77930740652E4E56CE02DF5A881B61968166F07E36088B5451EB870C14A D9A07E34EF0D7C92156DCEA851F625F933E61F36DA3320F7A4535289FAEC6883 42955C50434FDB86A1830D48FFC598774D502584D6CC867FC50238EC24D2B58A 6CF0AF823822CEFC74F874B84658F4CD54370AFBCAEEBBE60AA457AA5DA1A06C C8F92A48460E94E7CC3E28791F2885E28544FA5ACB0F4125DE6F8D532DDF420B 7283A6591659F5B56E61504B5322B4B1CC80A0463DCD00B6821F56446E43F029 E56E69F8C28B3112EDA3AA5E69046FBA5E57ECF686979BE5B243819BC34CA308 FE1258B6A1127E701593AE44C88715CF4D3547DC6C66E85F8C14494AF4F07F9F 22723D40A8D483B725246DF4757706783AF56C1A953DD68BC97285C5315CCD5A 4350D8742CF7FA13D1A46042ABFA25CC6120EDA9948D262FBB66055C464C14A0 B8977B5BB2DAD142F46CFEB4A36B7EC51D55E728883F50672F3E1D4FFE41E5CF 30571C3EE09101C213AECAF90EE8698B740FA5717FF2198C005568E9DB201600 833437B707AF68F52E9B68EFC36D73E9D4582AB0F135EA890D939FB1BE866144 67CC07007B66C9CE3F7B204E75369E22D09B4F88E6DF4F7918A79AF5819C7A77 3DDA23B3F1242BC2A61545E112255DFD97B86E859EA508CC77577BD9404AC9C6 7A998CC511760C3CBFCD9F6F53A7B1F7B5EB6ECCC074A05E533A67FCA3CA63B0 552D00C4D31149B29173A8667D9713756D64911540A9D4F3D071C90A76E8B9B4 B0066037E9359AB21FF5855ED9E71BD1E9848D6A663694BE34FCC171305B2826 BE177DDDC9B1B97BBC79E45EFC7E70FB11AF79699F373E700CE4D171086461DE D8E061B240997646FFBD6D273FA9604861DBBF3A50DA307E28AE218C3D0818C1 4331CF7C0F448650AD20A77AB23CC5F40C48CCD602D0B32D4C7CD7B4B607E262 D07B5214069C6856D31F40B0D50A63B079D065F79C3ACFA853C2C8A3DC2572D0 B5DD285BB0ADD7596FDED62DF7C68EFF979DB5E0182FD061DF55362EDE0B03CB 70A15526CBE98186701557FFD27556E64DF68EB38234AA13770C733477CE8A39 0B65A272D1DB66EBA12234F1AD36E0F2B0289820CEDCBDD4CC852F53207BED97 CB93E853456D631D7DC397ED5A6ADF59E8D04756921A319E8A85DEE2FD175D86 A5094BFFE6FF5BA43715E2E2941741E63570CF3489C7DDF94AE79A0021F76384 6E76CA3C1AC552EE4B66DFD560EBDA38EF5E93DDA803BD06E2EE8003E2276790 896D51B88E4FA90061EE472BECF58A133B35920E47BBA565727DFBEF612ED98E 895C8936833C52C5703B5F79F58F4C3171F2071040881EEABBD9D4313F246856 AFCCF15AA4A087A9483BD95C260BF5B59485B74E1E3E98F92505B0D27F46F832 CD562D0649886F2CAD709585334B034F3C4B93692C0082EACFFBFF259ADAA6D1 9F863393DC0C772B2A9230FDB5FF02E8F0B5C059DBAC8D8F75BE0B3650AFA3E4 4292F1CF0A4AF45D9BD8856FF82D93AD77ECD217024A8F619A5B8667D286FA94 587224B5CF48327FBA64FDEB58FEE11560EA78252F6F3E3520319090EDF0B565 EECA2CB5FEAD5B42A95B19D4CF41BAC211CEE425FE833DC7F67146FA46AEEAFA 2AC315DD3D7017B652AB372D6941E9AE38D8BF6F48F5032CC938C7F8AAC3ADA8 ABAEDC939E982B4C92C666CB24A5242D5504A788338BC5663222F502094EBEC4 007B13BB67213B30783987029BF3458DD1714F59421AAAD0C298519EA2A4F4E5 38703C5CFFD13C621EB988C6EDEE218B5D5315164FBF0C41F32B5A48E50FF7F4 B60B005B69ACA39396DA5969BFD468B28BEA77413E80A3F7027A31A81FCAC929 108189FD78D3D3B6B22529ACDC418F7D8050A4DA3275FD84E7F2822325CD1E5B B0CD6685FA050D53B892CDD028FBE94BA9E2F1C61BD56DEFD7789C2BAAF164B4 F8FBBF983001B91D0A667F94EE096CC9695C0F84B3BA9BCA6B50787EF1DDC483 C5DEC8B12C00B19F9D1C680BBC3751E3F9C964F3302B4B9CECB9F6DBA34BEAA3 CA2F39CC530488640FC1A7CC894E4AED03A08176F3AC15C3FA26FE85C9D9BAFB 9F4CC02255074CCB951B7E878D7AB997737417BC010499D7F91610D5E2A67AC6 F8D95510738B83B43DFF22C451A3096F758616FF223882017663DA7AB0AA0D87 4CE2C31640489CB32EA91176D5C39531746330ADC7925AAEB086075BBFD5E9E2 4D8967A73090B20310432A8D7FB3D0A756F6D73B36020F040E710792561FA99E 3307619D6B65F1AE55F0B053FA8DE24D54619AA5ED9F0C1A7157AD8B9D97A142 386DB15AC36D6CCF453C2EFA6A4615935D388250A11B296307A45B90D7E76BDA 609198C8FA31C6E5CE1A1AEDD544CBE2D7C6FCEF1CA63BA2D57D2744578956FE D463214CEE5C154966E10F0A64E25DF25BE8538F9CDF5D480BD8004082070F38 C88473561C641E815A6D94820D0CDE56829F0AAE4BE1315D360DEB4CB25B4FBF 791999D4FA7206256B177D8450D50A32A7F806D89471EE96CC7E85356D2C1E35 288B7FBC0036792A4E7DE77DEB347F2168B3BD9AFD31177AB5E4990957869944 243087BC9F048C218368BD6C738832CEC99D7F31159A33026442ED4D27771E12 BF02554203415B1877941037C72CB762B51471C79365C018D506AAD55464A248 7EB6E55D9B0527CAC8A915BA84F4DAE556B427F48E3120142AED5705789C2708 AE94395B1F7B875EFF7F19B9AB8AF28737FC304E32C8633625DAE96D1D732E29 59879BACFBB15ABFE8A6EE1150AEB29713B428FFAFB619206D71FC382B1215EE 759318C5CFEA9C0E5E8E3B7F47DE607B6F93C19AF28467568A3F373AEDC78AC0 CE99A407D97154FD68220CA66F7D3EA77B323A7015FA9D9E8AC5927D0E7F4A4F 1FC871BFA999EC749E09FE2AEB8220705B0AC8CB4DBBC409CEA6B47F98B67CED DED64869A1F9B3BCA0A85D66B1C27301DE7542FDEEAB005F2FB76CA066664B94 968C3E637E055EFB165093574FB6EA732B959FE708C52FFEF012CC1117C85EF6 56B97BA4B30322F7B3F1F95233A3C897E5316BB86E8C331FF1A858429E0D98FC DA67AA525C035606A8ABDBE35B742B53183CE047EA2CDE1C08EDF08E5355F694 1C34925DB0D5314CC0B205F40775A500B76491789B90D4604D3545E2D7DAC1EA 400B2CF72EADCE9C7409900ADD1C6057DBBD97D332F6435C0B91B14D081EBE01 EC9230E6D12B6455E401CB100C7B3590D23CE094C79BE8266F1F24937448FEA7 C74CE914AE8DFE853F3E068433A6DA96F156A0014C457040587BAE7DB4CAE2C0 EC1FF60747BAFB376D5F87DB5CE2A8512453088742214C38F5B6E0D7644A0C1A F67087FA502BB43C27B32931D8315CB8A425341ABC3E7656588AB563E9CC456C E46CC1E57DD4B2A83CEE5FD154001568DB6AFBCEBE8FAA4458AFA35BF37E4C71 1D112063753E5B66C8B4E801A5E46F6053C8B55A95086615D6601924A6633C4A C4D8EB0B7A5C8AA7E49FCFDC8182EEA53DB300AADBCA3836FC88A140A155C726 54CA5DDD926DDD0C1555C26E30AAE25D1CA4A2478D0FDE0EC996A1399D5C0F69 C349AAA9206B2554D7D6C68DA845053641E22B965314B6F28D69628FE8D5C243 E978E6B81B3F916E722DBAF355B18812021267A9E3C324B3D9F6BCF7B5B50CC2 D5B72D9DE9D485E103F25E1F42FF7BF040B3B6B5DFBB36BCD8E8B6379CA3198A 7AEC551899A044FEE3CAAD9A2C3D839DD370C97C194D5A4F2815785E413A0597 C61887CC4842988FBB321DCF73FB977402DA1E3D9EFAA176230295ABFD079DD9 9B2D187B82BD7FCAFF1EA271FF74ED0210D616BCBB443800C9FCA4F467A19717 DD0D36AD7CD6CBA51AEB15755E68789368851FAE22F39F3CBA9CA1DEFC304E17 33BF87828DE7758DADAF45CB27CB0A64DEB8F4CCE7FF05CEB0E4E016B9675CA4 E7E001E16FB153610F077EDE525873CE46E0A3997EF7F73D8DF38B916A8AF808 93C2463BF8B9C5875B76FD983F00311BE872F5CDB5B1647508F422FBF2A56986 6358FA3C232E7E6063C82F74823036BB7AF8F8D545D12D82B2195DCEC5969DF2 0EE8CE3123CB3010FBEF3FCCD7F1920ACC42FFB593697B786E6A6F52E10C1A15 208783D4280FC31CC679F9E4A00E684B74EF11900CCBF5554CFCE34B65A9A999 68AB22E0A438B4DC1CBFC32755F7DC8FE58A7956C1BBBD29983200DDDAA59C5B 4CE550F5E0AB048E98DA80BDEBA63ADD9DB6C7DC3A3F6E25C1FB6B638120925D C897B2C05C4179A0E48740439BEA3FFCD35C71B21ADFD7C8412706D3868C4BDE 30F6B8CAE82D86AF842CFEDCAB3CF67BDF0AF7FCE6A0E7AD2D247446C38B2CF3 26CD3D7E09F5CE2535283C43D04C9391C7A1CDFA6F2571F786A1F0189B9BAFCB AB1CDDF8190D7CE364F8FF8EBCBBD5F646C095CF27A34B7235566BFE8B012E01 CC721A7B3FFD795A0EBAF81A8A0A7820B99E98166C1AF177B87446927CC0C239 54BBAE855E9FBD704DE67917FABE3034A953930949AFCF79A59AD8A387CA1FA4 58131723EB2935C02EBBE6F9554BDDBEA5EA55E3FD6BCF25DA52765D65054BB8 4A5C2AD1312892297E1C45570F0622D145BE35C8758391F28C04B3AC4282D1AE 084E080892C76C1B9C9F738760879908EC5B3A90DAB7A6538080A484E54B9FF0 1C2885E93F1F16E52E0A3C9F6802E6345BBC5DBC5E7C57C85104427CA3182C7A 54E95B22D149BFBA403CC8A960EC62EDABA1881F31B92C54DD21C96298A7703E E9D2DBA4B91A23C4E5F3D225A38C07818DA8C2F261D950FC8AB6042023248E37 6BA0AE50B9A85F04EB48523143AE40695F127E34E070331620415B95A5ECB24F C46696AC6F75020F6322DFD03B42788C535DB541FEA6F846380E8F5800B7E060 51A387FC9AAF598C88CEF209FA38E008D8707A34245EFB722BB373D7E6B1E6CF BDF2DBCE22FD2C85F78C4C4FC31F3C2F6B553C4295A1E26665BD166FFB7DF6BE A6E9D18FB735F2DA53138A4A4352B36A08B662528FE0237FF37FFF218D88F2EC 50741BC5E98E856B17D8015869044657657BDB90D69A0FD5D5D0CF4A6A091E56 938D444D0618D7B45C22F65E18B034282849355ACE83A188D164FA36367AE6C3 35C775F72A89A4017A4071EAE1118B88C58CB1DE4E20EE1955BE0BFE8646CCF7 05322E5566D14B5318A2328648CE7C1AC36B077D1A8AF17AC827E500B09FF496 69CF7446403EF7B00C4F1832F1F6692B5FBACFA7FF9A719E5DDC8F25A798CEE9 F4F114E522F00B7A415AFBCE48D09958DE98CAAF427FFDFD635A7ED5DCFD5F7B 6D7AF2B5E78F4446753C8CE59F923D4728ACE448F35BF3FBBC8B2ABCF49432D3 AA49924191FC8AFDAD01863EE8716B6D76A6512B40BDE9C18C7D321646539DB5 A09047ACE1815F462E82DC593548CF68B78D52049AED0E44627779613BC02BCD 2B5BDC8D2091271D44BA1362DE0E44E46CAA9D966D429848FA422A73061A12F2 B1BE7A81533D810479F91C9656D3AB7F00B9332AB851743C0F25E32F37E943FA 370B4EB25781068D8DFAAEC50CF86028610CDB59CEEC4AB547EB3908897AF9ED CA74EA35D2CA70A70BC83B0AC2E4A5E558098AE2B12EB42397CFCA0F9C9E15BC 9431FB2F10224F22F0E191291110FC5E1313A99EA12B3E3318263AAD516BCF66 C71C825091984E21010B29025E3FBDC518E8960AABEAE236F03611CAB6F87D03 EF0DA8DAC4D2C58A9ABD40E592B2756FB21E4D7D2F2D3259F51CEB6BCBB1B4E2 33BC3B474D779565D69F0FF19113A20553F85DFDB4FF9E175606240A7562B12D 4B8B8F938AFDCFDAD721A64972573F6251D363FA971FDC41F2E02F7DF28C0AED EAD3A9CBBED541FA7E6AD7BEA83945118B83564782FBCEC5B466B96DA7809BFD A86907AA67FCC568533218DDB3D201301379A1B9EA8A32DE36B1F7F93F99F0BB FA3F4D002793063ADB685A8935EA4A5E549767853A6488C6DFC2E70B3A455D0A 29E8F6FD949E810C0EC0F6F835DDD975EF68B4DA83F23A14945195248F667B32 EF2F958253C7F5FD49AD7E545911E963D76006C57322D2CE2FF3F1DD1256152B 3226C0CA03B72F409C91151FF59EC80C2B7431C656E94E19904AB842D63BC797 1C6552AB4B265ABC2AA8B66096AEC22E778232043288EE0F60D6ABB319B9D2BD 0FBF6F0BFFF5DEDC3A39AECD6821EDE1B213F7A2E6A7BA475389D647F663642D E4C5C3F0DE1C0030EE381006CB01B5E5947AE6E837DD2ADBFC967557A0182EDD 16B10FE9BDD490CA0A3C351B025FC63A08D1415163EBD31ECEFC3F50586142BB 205E41E1ECEC46CD2209D760D75E743AD13AF1E761A8B7F996ABCAEA43645546 F42C87F6909258CC74419B96A39D6DA3233834894CC60B03F867B6ADAA2C18F6 0040A9D8E70BAB12221217095DFC57117CDEB536FDA09E11787D4F7B448F88 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22 CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744 3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8 404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84 262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953 084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341 E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D 5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6 40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D 2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE 710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45 FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8 FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736 5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 13 /circlecopyrt put dup 15 /bullet put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B15A0 657F5ED27D204449A841ED19E01432CFFE928E921321113780D036D34F2797DE D4459CFD15BB117B5C9745EF3CD2B296D91FAD48C80B136D94476967E255F808 AD2B5D522ADEC64176833756510391815A1D4A8DA1D0AEE7CAD36A1D161889F2 3347D5B6BC503300FDDD48F594F391D5FB42C42113C538E707C16EE24A3F375E 7C506E8F49CE50FF9DEF3B4A4C1BEB3848EAA3477349833BA22D2A9012287D8B A8C4CB4307A1188ACC0E6E9338E1559BE5FAFF381BD82A6C71C267409468B3C0 2C1A29F4281D565836EAE57F680490FEA4A952FF64C8CD11C377C294DCD1EC25 CEFB2B6DCE959D0208F85B6E32E9B44FD455F9B134A5306D95EA29F37BB8B86D 9E592159338E1293F449380E13C21AE42E6861DBBF4AE99A7469F871A3940835 FFBE7F316FA9BB834EAB18625F0960352C75105A92F175850289B1AE177E0D52 E43635C41B85F75CFB706BC92B0BF90367E180A141703EF69FD064C0FA34618A 5D9684895C3EF50F4AAF6E0F78D483280942D3F9C1A18FE7FA657928477AAC74 ABCC21B622EBE2C0AD9EDEDAEDAA9A6E3D96E01CC837668FAC44FB52307CE618 BE8399078154C80E7DB52F0CD16717DC59203497E89D69B390E9966C19D36188 E47270673493F7DFC14C72B5B4737AD52783C573B5F12D50E9D54AD65C2C310C 72BAF2A8ADAD81ACF0C49DF971775F2DB7404FC9AD6B30C947A348B28B0C042F CD9756359BA6942D643D8B7BC54E6047DFE25215CE5EE74CC3076975A3F324DF E8D80F42AE4A1C00B155FE56A61CCC09924E4D7DA7EE07987C2EF9E91AED55CF 524C54E553030B5F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT12 %!PS-AdobeFont-1.0: CMTT12 003.002 %%Title: CMTT12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup /UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT12 def /FontBBox {-1 -234 524 695 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT12.) readonly def /FullName (CMTT12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 45 /hyphen put dup 46 /period put dup 49 /one put dup 64 /at put dup 97 /a put dup 98 /b put dup 101 /e put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0 7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3 A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3 4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251 75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0 9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507 098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02 ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581 DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B 5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2 F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914 2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4 E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21 C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23 42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D 4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068 95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9 830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FBE3 FC1F39A39F5613D50934419B95A4A2FE1B6C18912CECB86726926F6B77B5C3AF F38F85F974A2D2145BE010EBB4A390B842BC222AD4A0B7FDD882668C04C51F19 13FF91E7CFA0A0F4E99A1944B272E0291BBF3F9ADFCF3F625B87377AFEBD9F11 6385726E908BAB7D1357504048C0F5B26251A1FA52F08BAE1D64B9FC32A684AE 896F3DD0AAE9624050D4DFDA25E581FB2630E8840AC5322D38B92F3E77B55CE2 91ACB8321BE53A2C7D274D63CF0C68AC833BAF4B22B26EFC197D4A893A5AE492 660D995DA9294C16BED1113CBCC18AFCB5968175EE2FB374B1AA261F22CD75F6 6E7295A254FEFC41A66EA6833A6A4EE0E75EF6B6FAF292DC5D2AFB61D5203DB5 4BAEAABAF39E9F98B45F22F2E37F337A7BA412807A31B4A5A4E1627BAA964B77 6AA397D368985045244ACE969799A9489CCA8FEFCF2EAF262ECE08BBD9573C79 2785F1004C34F4D728E9E820B4133FD5F823B067F6686C82BCD35123E4831E38 CDD5ADB098BC3F1B4162F45B11ED39CFB65DB1A10646D0B9FB5BBE475031B2AC 9E0769CB063B82D1232E24CAA86D9D5DBB9737B1E69608106D34CFEE3FFB4213 5DBFB88BF9012F430D55CEFEDD5CC1D28B8EFE3C133F1A0E241CD2D0D58B0ADB AB93AA7B1E312CCCD8E06297A5F698A55D9B7E19979C06675953B4E2B7FE860B 60B8A3DF7F12B1FE54E0D9BA9EFB53BA76FFBE54E140B94FF41FBD7937FBE7B4 1793C8CF35C92915A6F47F6513B74F9F6C1F6C44D2D82B80C2262C7F86CC6C45 426AD4602CBA422E55FCCC58DC17CF3C2F68E393BFA04605EA06279D2B96B458 394495413B5C9864F865CCBCB290B4A064C74FE5367FF5A397AFFD3C1CA41B36 B80204B315496B84452E91C2FA59A36836E01419147C5174EB4A58DA454F5097 BA64EE9B8F88B56DD1DA088A8AB19259083F064F7394F15A135B36FBADB0EC07 8B9040FD797CD026EC077DDEB665A7BF575C3FE620D5D4AE74BE2B0D7CD5D507 6C0859246278D92425CCF174C2E80A6998FE14371FFA63D81ADB8373950CB08C 92CF8F65B73B97725BB875F3E66F0BF3669F875186970E2DD1A8B28D8CC1BBF0 E3530AC0D2BE7719C48277382E624EF7D90BA5F927EB674E1D6FC4382C32C808 2DA4901E93B1CFF340652C44396BC4C76BE4B6512D2B56FA1420636B3F714891 8C7A5543A4B0101C8161C237A842482831ABD0593ECE98F42D80FE070E60B6B3 4E93C4498239324AC4E3FA4406A035C7BE26B0086BED3AFCDD331F7D1B7D02FD 1AD03EFF049A2F90B85F30901014118EAB318DF795CDB289770D51C9261994FB BC65DEB07C434D6E332373BD0DADD7A06781218DE5E32B7CB002DE4337251413 48416F8489C37D39F61F639AC54F6E2D0A5B7949B29B3A8754FEE5E1A8A4019B 30ACBB895C90AD7D94D70F48CDB3AE3FE60488E867A6CE5521F6C123D389B6B3 540FE72436B7BD5826B731CC6B5A5C397F3347F4979132C67C2695EBCD7FFFFE 98C943FA7AC98AB500866BD7906F62D1E9FCB6D3C28D10A9CE61CE4A023E79AF EECAD72DD7B61802329D255563129DE5DE81F3E6D6D47E10893AC5929FCE2357 EA2A84635A3FA92DD77C0A4B8C62CE26D5FAB880E7B974F7C843EA8BAFAFA4BE 5FD97AF9602CF1FABF41DF555DCD8C23DDF0ACFE58DC92D83F13775CFD453AB8 AB3C4A9180ED6851246C4E58B5187F82CB98FB92FE17720679207130C8EBE243 66F44050BFB10DB7A7B151EA5F90C2A5889599BAB1A6D1AE4C023FCB0BF495CD F2C3CD3FBBFF8DF3AD63F5716194F5E382FBF2BA32567D10CB75433DA871E13D 94BB94F4E6F58658C04C764DF512229AACFD4985EA952AD56E0D592A9D408C64 BD22046AE570216940CA422DB6BBB375A653A5B1D3BD5C0A6A4EB9438F33F9E7 9B7AE1EC2D56DDA6E84127A4A47E9466A5CF70AE376E9B92B1F0528FAAA73AFA 268085C35C818ADBE05B241FBEE328A83EC622F1FC694D3EFD539C76A4807E07 A4D2F49437B9DC18E21D621CFD31432659FFBA4DC702B91D4205030D89449381 B7964BD73E96C4CCADC84680216482CC4578781B57028C023D63849F705E54C7 2D652A48565B5B6AFAEC1174B331EC00EB7C528AE30297EAD23237E0DA25D83D 2254B13EE297478C5C9D7013AAD70416035EB9D9D7116609CAF1C5523CA28512 D721627DF21F83487989F6CA9457D25181A0BFC6F072BCBB202135EE8612B14B BF88CBAED2700C4D067B5AAFB33AE61E106091EFE34B61C58F938BA3705F91E6 500258C054591BE8DAA18D55BB68FB131AFD7E55E7E1FF9234C08768E95D258A 700B8890BB4DF7B805684DE78230F0AF49C0A2222948D4F6E087B6CF1DF0FF47 0ED967F5C3F417E0AFD4AF3547BCF8624302DF187512A35E569626ABE3FFDF7D 938B0D47BE9301EE955F6344F3D597CD33CCAAE12ECE2A1EA661EAAAC990823A A34B5E982469151CF1737FC478879B75A4F1A4C4D94DB447EA53AE052B981ADA 3772B6536ADCA2AC1FEE3FAF27112714BEC13C6FA033BCEB5F8CAEAEBAD0B8E7 2F4513F724BD2C5A1A22ADA7C90361C06B0CF1C92243DCF099BF786CE67F0C6C 7179B2E1572F7359A7AE6327C50AE1B55B2F5B035ED799A0C1283408CBCE62B4 4151E03692E10D5E889BA8D0CA0489E8EFFF65BEE997D47FDDA5858F064BA96E 4709EEFCF60FCCE763A5E97D264200A4BF05AF02E0A932233FF14A1DB2EEAAA2 D5C92243B284E40938265745D66F9776360E8BD59C1F5C18622B52FC9F499D03 5C98EE8FEB34A5DBEC3F796C0B0C30B2B97EA5A2F7305005497F0424FE3EA4E0 D53B54A745A91337BB054A350E481838E2018D8D129A07757FF8868E47A565AC F1A13CCC73804B3F15B0E4B85AC88CA29441AA98237C6C38CB011D3DF2FCEA1E B1E66D0F99073BCCC56E7CC897A9EC0F18D7766CA957298E54B1D1300E2E084F E7016C6F59098D1520DD64EBB7CDDC67B3584F56E65E3217C4345E0CAE956E37 95ABEDAEF1176AF7BFF82419D5677FD3AF166A93C39378ABC473794F7EE0328B 766E975B33D433D0CF4BF557FCF7947F0383DEEE280FE89CEF22CD97B81D3885 43F0D2622025E2A75D9267EDF1CBB550099040BC567BA08CF196884658C1911F E770576F4593A178DFFED391C24CF8E2D7075F34AD7A523F3395699C638BA120 7B283483A0FDF760050D652A81A13570822B40CDD16BEED9A91966E2C5C28AB0 7763CEA5E2D431C847D39CE52DC7E260CD7519AFF39BAEDA081AFC8DBED06E98 29D9BBF552758E86DECB8C194EB6ADD7DDAFE5D58C57BA5F503585E7C24127B1 105A6C97068483D77D25955EE3E0993E0F9DAE5298A2431EBAD28AE8E45C09FB D89A396F83802C07E7F9BDBCED7D8360E704FA59B179F19908A36064230B503B 3B0B7FCC2ED0455E15533771DE613F2BEC8EC308A24EFA5EE37A0169B4721BF4 881C0632FDF2D24D32F031686CABF7B04BF0BEDA2729C249426200E6948BBFAF EB5A1F7654894571260D014E8AD2A84ABABA5806B0811EFFC3143946442BCC20 19F428A66193BBBAE1F42D665630DBF98ED5FD7BB7E5E9315B4AFC92C6539884 6873112145638C8B49AB9B69C1C375D0990976CBFF33EDC5A12282DD6DF068F9 9C911EB366090F4A8E18A742E47044C9F3CE6B3B0868E05547B291B11DB75615 3AD37193123C6B0EDE151AF8F4367A33B3E0A61027D8017006BD21FED4829C25 50A7582D055B4391ABC43BB00F1398C0CC2CC02732C2593550EB0DF5DCA08263 24D34186707037E229C0645D0088CDBFD06A1C852F1612F027DF7B6C4F2E4644 4E69CFA4FF355F7A2B4147D0063EEB414E5449CD88C0A928FF5C58F5EF48DFF0 D804D1BA5A4AF4E6415A75BD211BF564787B8BF9976EEA6872CDD75D313EF1BB 8C70B32CD81205F8ABF4EAB77729B34B20A9216B9F0083A2DBEED75D1D6D8536 D86BA6F0F8FA76AE2A6DF3BBF815666E9975A5141A0B23499A40FC94519F30AA A7E1A8B5FFBF2DF9F1E14F5ADC13F3F0617BABDDE5153CCB18CA9EA53EA4408F AE16444F3F916B1AC1F0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 33 /exclam put dup 34 /quotedblright put dup 36 /dollar put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E299575EF2ECAAC7649193843D694E 6CA59318C01132C361A3E43BE637B70B9966664E12EF4707F6B100BC37778D1C F1806B1DE081D2C9B995BF1EE3842EFFBB8416161FE31633A6EDA118E563BDC1 C42F403BE8A009FC756406669E34C6A08668808E0C31A589D0720BE32F3181F9 8039645643E15D25917F38DFFD8BD08A420854DE15AF291ED675A634C151193D 29AA6E04E84A598350AF17E71973854842AFEC3EB1B58E4D4433309BF5ED9D86 32C4BD136C89169D45718A88BABE25072D8E552AA4CA3F840ECB11519B06EB44 13026DD6800BFE15E90592641FE99BCD18039598DC7B08AA89EE6792B576B29F 787176E0CE92270D872A5988E8CB83661FE8E8FD331668DDF9A87EA0FCB904E9 FC2B5F090705C9CC49A85453967C697A72F27326FCF642B945A85944A34E460C 7E173819BABE5F350CD7E792B9CAE496423F13BBD49CB9F4E39D27A26395B983 259BA11CECF2AB41FDD22698FC491906217FFC0F76FEB03DEA39BC8396874506 EFC8A06F0F7EA849168C00D81728C739ADEC153F5A13A46FD1263D937A9EA004 743883705AD534722FF109146B9E567225A16C4CD76EB07661DA821464D89187 6369A5381C669E1741F7E40D5DE218554B7A51DDC4563E0F5AE07CF0A0966ECF 940E042C3B4DB2FCD8FCE4282EB39B5A164C35432A49165860AD65A0F555FAE6 8D75B6400BC802A021411BFC4ABA5671F5BDB495EFF99DE8AEF14E78E8B6EDCD C8C1E80B548817F55A6013554AD7715A7340F0C1768E26D564F397DAEE458E60 E6850880E9E01C8D7B9A44418303A6563D84C33161045BAD96270F0C23D49233 A469A1480B694F268C275A7750E3157C34BA420C338B9DB2E608AA18D0305BBF 875D7087C2DDF908883EAD6F518231408ED09DDCAB966E1673371DCB4DC4B04B 86215140470BED1FF40FC55A94AAFFBAFD9547DFB6E7441F6F18DD0CDAAAD67F 1C3DDF4A1A7E192BFECA9058986AEAC3F88D3DB996AE492FC54574037CDE8865 4BF8FB8E7C60A284B0CDDC7A2ED1CC6EF05E054163BA55331C8F47F596B4EA6A D29F48FA8167AB4AC152B091AD4296CEC91A73ED481864AFD7C9D8F85A00E6C4 72E1589F2D647A483A51BA47CD9ACD8DD2CA4B3708C3EBA20AC324DEB563E615 5A18BC810529D06C3726B892A054C65D1233FE771549F1E7A55BF993492C3652 41F32BA17242A4167169EC84AB54891ABBAB7980B1B1CAD2C43493C10ABF5345 53E8752D615673E5ABF7D3CF2687DEB3FAAD963C890C5781E272CFA67F94EC19 C3EC4C5C017F5A2AC23DD671EAE66A013051689E887C20BBB90B79A821F5227F 9C8A17CB202849141A1F213F2D5912955DFA0D8FF1D8395DEFFF1E716739F246 66C276AAF9EF371377AC7B45386A18D452DCED16EC5AF86017252D059DFCA837 D14D41823F03E91830D6C17BEB76A16623AAC58A9FEAAA07D3BFCE05B6DCBFE1 152EF48D4F01F9F4C2221E457DB19D77CD878AD8FED8BFDB27007903D49A177A E1C1F837B105D9B64BDFD5A084820A161D75FFAC8F8EA78CC6D148F1442F1384 7661502B92469D4BC8FF30DF9234D29F453310878E2AA72F293DB0618E0A1BE7 54949F6488FB99AF0D7FA4DA1316C3C5279767142D132F62ECD52FBBC0D754AD 58FBF92629DC8866A0698E72EBE2F2C0A09F68895770EC42B469B08C7092733A 20452669523E73E7D5423DBE0776FA931871C65158C01E28758239390507C37F 337101AC139F611354123A5FBB4A0CDD161BE84AD71BE2DEA92FD943B1D0E2BB C195472D10E123CEF708FFC2D5D16596990C20A062A2A358EE110B7EEBEBF697 7DFA3351785BCCD59B4B3B349146BE9655842F51E82A44F0C6CA75B1CA5DD9F3 D3BA6F0E89A63DFEBB88C96BCC680D3C03CA447409D52B19EEAEDDC49285AE8B 7087326C4F6517C3C9B02C10D1EADC6DB9D4943E0080A6024A24C791748AA798 478EDCA0FC6B150DE7F8D50030A5A0F7EBBED6B1E29CDD745FCED01ACABDF295 91D77AB0DD370D77E5EEA4A9472D14C6ABE29431E85C642F239150FCB0FD6DE2 E74E8B47BE08F21DE99A181F16CE0CE0F1D72C4E96EDB597095038AED8CCB91F B008F4EFC07E0361F8EA96BF0A4F3E8973249AFE0478D26BB1B5C5B3F8307508 702DAEA6C2A88BFA33BE2046E61FFEAAD917E7F290E61760D5282C6BF357908E 644DF3F0BC7458C4F183F981AFB53440609E21DCDF05445629F196BF168366E3 6623A868D4872655A2BD4FB87D3C932A44B9E07EA5CCEC059F7CB48D0051F3EC 1ADDCE1B474EE33580A5EE6ABE33479FC9E0916D418090EDB58EA45CEC2AFB75 6B69E6D768EC8C82886A801A9DEF5ECD07AFB3C480144A602FAE78B968D26324 734EBFBFA159B07ED5C94355E2B3BBEFC0C5E465F9FE403CAAC6A1C29F0D5895 D51ECA2720C697D103B20F96993BB98AF649914F29527629DCEA100374B6120C DD89264B95468EF1801F71550220B035B6A8E7B9F01BD6CBB30775DC75B1594F 8217B9A85D5E041C605C3C78D25CCDA88656F64C44A839C9C15EB8D5B00DB7BA 78FB0FD1D38E0521BF734C146A7D10D12B5079AF87467FFE9FD9445DAD66A569 F3530B95CDACC4AEC5ADB5A77EEA86ED95F3811AD2A502FF553ED90BCC8A2C4B 968A7AE8D42F9B5350F7E81D09228398FCDA1106977FAA9A4370CBCC6A3B6066 DAABE9C89AFC879E17DA9D60E86735975AB42349B4E37AF180E6FA628D056602 E7EADDBF20707AEA86ED95F3811AD2DDF1A71C902662E2236641EB26C6DCEE68 DE612EC635B3413ABDC2777C4930031F36ABE7BD07A54E5B551B90E4C1C49E74 66413712A7FBBCA79D2FDABE1C7FEAA054C40C469B09385B88D9E163AD864BD8 C7A95BC217EBBF0B9BDC9A30E8C8FDBC987307740E0186759F296F25FE60AE5F 5F4F3DE80062B8D95BB3851BC1CF1BFB30FF521940D4119108FDD2D1038ADC68 C70D7175476917012FBF01163B4F13119754DAEB4C88C67D4FE859D927E0E6CE A0332DB9F6F17A639ACB871032ED406DE854C900FC91F942CE5D0AAB28D29B2D 45B4975BEFD7CDAD2FCEE66DD889E47371A677AC6F4922CC21BD95A0707D2617 08E5E6CCD078D7F9F3F61D889666F8AC7AC87A367EF9FFD4BDA2E48C7E5A10B6 E3F942D03B8DBF4AF73074469DCACB20E24A6DFD76A069C9775A00E4A1A6D411 1306326604E56F26766ABB680F60D676592306D8BC3083B06765C7D1D84B0F34 9C57342972549BA8BADE4B571230AE6DA656922D74D5E2B23186163ACA97C7DB C2269B8FE1AB9ED38E709D15DC351B7CFF110480B09786384B0E19F7F0C20B11 FDB0F4A7D9552A5ED697D69314BF898C1C28CE865AB509C6B4C0EA755BD1980C 36D3455F588556CBC4B24764D050C69D000FC26EB800D16745C5E877A24E0D9A F8B58AEC57969F5233E2AB4CF85048789BE20ED902017BCFA6A9CCCC6BBA1D3D DD417FDEBD304FE32E2C6FC4F32392E8936325CF2A102DC6987CF2D8090BA7D3 F1B16D8417B607F842FEC77F0570DD4AA98D8BEDBD3A5F962FA8BAF58DF43A39 DF4F494458A2969EABF685A634431D9F3C63D5BE1A5C36ABEE60E3E1188B69F0 C8D4B8A9C469B32C9ED1980C4CB5C34A4743415E2C941F291BE9931CCEA75CD3 ECE1A04EBF44CCC1CA894957FD2498D84BAC4D6490ADB8D70DCE7A8462EA4D0A 2EBC632FFD96A6EB49A8E75EDFC1818C66A3A3E9415BE35C9DFC6B499F9FA286 33C57BF883777AD1303366AEDB794CF2656A1729DF422189455C5FF2D23C1A5B 17EB0604F9AC1C484FB10FD194704BB2C426C55671372515A8F5FDE717BDD52F 97832A24AE9413B8C7B18D4B6DA7E01B21C53A8A1661CDA7C26290C67E3994C7 7E833C1720D5FD1EC1C284015CDE18CEAB3867E917C98CE6C0779DAAA1422A57 E98AD4D7CED96488C463B3A2FF79DB14D5999DF00E240548B918AA5E62E5A350 B0EE6B87CFD1AA40DE86470F131CD145379EC562BEDCD4DB77132F8E6CCD47A6 E71EFB7075790A3AEE5CCA6955EF3E43AC17191F202257AA0DA9383D8667CEAF CC575961B1906BD44A9A652307B7EF8BFDBB7FBCF13C3B599FDBBB774F7272C8 492ECF2B562A200D633B0FC7ABE5BF2E6C34ACDC5E5B0E351AAD9155CC3AC213 4D7E7FBE2A98DC8F23BC236AD4161E5A44503A563F06AE338B9637B600F8514C 34C5E0AC65D85B53B18C99512BDA1619B1E0A54FC1CAC0F095C29B50B083E4D0 458BB51FB51548B8A94A0290E121BEFE8C3E1720BA52FE118C79F8DA266F89F3 2B9AA41CEF288BBE9905F191DF058B1700A5D79FD0452BA27898573929069189 D5851D2D72794E883821B9A157CF685641A99FC0D7CB15E2DFD2F6459FF88757 0B3DA85186B878777DED4FFDCC47019E52461C67B3240705C19A10B538CC9FE1 7E24F3D2AECF62EE446194C687E5912D550BC96BC0610A93CC0E261DB8ABD77E D0E8AF55678E261DD2E57767F045BCF8BC54BCA3800F83AA1B7CB194FBE4B27A F60F60498E7D31F50947C86CCDD07710EBD56908E048ACDDAB2E08316401D8B1 81EE22BC79035632E6F3D5BEEB8A2D8B7CE61B83270BE6D3A996D0F7028AC1B2 6AA9510AFB2C804AA4A34ADD935932FF2D48C9E29D4BA44201CF03A765A772C1 3941242BF84DF465C1E569145E6051FDE8EC2BEC97F0ECAB1B4DB17DA98F3388 22A119DA37BC20C5A23E03EBEAA6B0F3D06F91A39ACA120792704A8363BF66AC 6EBA491BAE27702071FC1636B5CEDEF9431A5D7952CC1B50E39E6D615219A7E1 0CBCAA8F832C827516C1A6B4935F4301AC7AAE77183C14FA5B76B08C3D154265 A22CD8602239E2B32CE919AF44BC79005815B1D2C65378405645FCD9C5E125CF B3E3DA1B660E5D1129031466E74A50D27E8F9A47ABF9F7DF911B50DFB497BAA3 74638EFDB6E4C10FE3C5E7010CBF7A45582DFC0EB253B2F036A68A737A1A560E 8ED6B2D834045D61A03BDC63D641835DF3132F2D25A368590AD47310066954E1 21701C915003C885E577E9097CE4186BE217A2F3D7A38325D20C60358C55E4CC 8EEC502D0C44A9B6828B7F1780DEF8060D7DAF7474926A63A6F73A85D5595125 B964E95FAE6315C4BB0926CED5F7930F3C8C5F5E19FF44103E7A8324E14A75A5 1E8883D1E8ACFB0580F0FA5C3C72F4B1F4CCB137705DA7E04938A5C9499709F7 C85F07715651765921F017176B028A832560766631E307AF7F2BC5BC6FE2F8F8 5BBB01D9FD44CD3B745454F6D3C8A57BF24C94BFAF5D43E0DB17CCC998E696CD 96E60FD8EAFC2AD77513900E07D00C705EC6388EAF26373E931425A333F06B6F CDB93259DAF1D24D6EB0C53FD42447B49C723FEE17CC806342545AEE71E16A2E C47905B31E052F4A95FE1375C77D62EFBEC3F2B57AD54524BFA4D11AAB4F8853 323C8816DC662BD77E861AD3CAA8A3B0EBC1E43A5C1A88B0D510C486B03F9A18 500A65894BED74898ED02FF14D29F561FF22B2095A63FBF9F73DC9DA46C03682 DDE3C7F3E3D03C092F4AED3001E326570EC7A588A546DACF76CB14EBE8C7960D 0F13DF6E8C3B6C991D4E7E15881D4F8BCE999E31F55FF6088E7937A4E70B166F 7EEF5728CB89313B463A6295389531F30F1FF3033636F365D0464DE72CFD498D EEB8CBD021C52D73CD659821A69D164B0CE8B2BAF5C35CDB1E964033836D2E38 0B7577DEC6EAB35B8F4CE239D2259164F21B92AA53591B2387FFD46F21B18BCA 1817A627188C59EBA49A4BDA43B6C11F480EA54E583D0C5AD125BAA7D6C45C30 5D4E5E9F003A2BA9F69523A88ADA4AD77F0F17B6231F6CDD3B65CE78E1E6E101 B7C02295F60B5B33BF0867995A8037A9305D2F00D8C0693C7BEA51C82E5BAF05 FC43B2C67ECCF0C96993E112F294CEB38383D63FF4CE2879A361D332630357E3 07B111B8B91EB30CC14D31520EB574CBE1F1C5AE370CE1C7012417E9D0E081F8 BF21E2B5B9DFCB452C98056DF1A31AD385163AFAB9A874DC6E344E7BBAA04202 AB129DD4F8F78C10C346EC6878535A7566ED562387E9DCD3F920550A78CD3E2B 43FD9E5EFED97A541D8916E5AC7634327D48B9FC52332E827D593943063FBE28 10635C18C7666E5BF3B33D78D9A633D6F3C4B442E0144E020F668E91DA73132C 6A1641AB98C5CB25CFF36F9D07C294627F1BFE1D0F328DFACF2A412DA1484B87 63BA9326DD9494095045E652F0B91CF654A62521266536A14387E3164EADE1EF 55331B0C06D2C95524D388DA05E583D22606A8ECD8484B2AD0E4D6EF64A30456 48CC571B65EBF0EA6033858BE43059075FBFB1592CFED2248DFB1ABB920132CD 36E6791B2015823FDC64FF7CE796E7A26B9A5AB859E42B12F69A905B2CB2F9D1 223DFEA464E8CCF03881C5181819A48F9424774E04E429C30241066661038CF2 C93BEF67F9F0B197A6C27B7179650BBF709591382A44E9382079C8B59291E0F1 5FB82804985D453D2FDAB0E1AE990CBBCAF196AE7C63E2338D907EE63CC6CAC1 703882EA95A137AC6F633255BA19E2A651B901DC8A44C77024C089E77AE8ABA7 5309E0E8458F67AA264140D21EDF0DE67F24D7F5BA3A908D8923413B476303C7 C3B8D68D41119827CF436FAE3348AD96414C1A6AF5308E8BC344818284DFD28C 6F227A98273FA15B054786FFC37ACEFF660C0B7B92BD2B482CDFDEE82A4EBC8A 04DC835F6720A4AA064A5E12D8D23E33690159E9B9672520358862685CB5800D D6E24EE5B06DEA0D4CEB482F384904D21563A1DD0BD62FB9ED5EDBA8738E90A3 782F94AAD44200652873239F07009E86AC3E80D7496684040B32289ECD009117 91A81A6C0F84ECAEF8A4E6845F715917CF19E0596F72F71710D649CFE12BDCD5 A936E48B8FDF57F8289EA61ECCC07DED2405EE4902940AA292014429A736095A 2063A0EFB9C51A05E8656F65ECA56588DEFD523FD855EC13B28C716B66015813 AE3795854769ABC2DA719924E1AC8B295AEC0A6FA683BBCEF338566E8E3561E8 3EF63E5B3518751291EF27BBFC695480622539F82495BA74058A6AA62F5E0FCE 460DA156D2C5B2F97D0F43661F1E47686BF8CFD2FB19C3CED38BF2D29F015D3B 511721A4D30642208E92B9E13A0D1F8ED44A701773D14DF0CB0E032FA0793789 8731FAE6F07F80B68B9952C5067E3051B6B92CFCE6FDA116D04C6D42DB304834 4589C43B695AA80AD63ADE37E0022AFE98D3A8754AC543C883825F71B3C1940E DD56E6592AD60AA728F2937E23CF9280E9BD21300387AD687142E954EF567C1B B22038D1B311A3C09E4DDBCE9F51F4ECF83E01D51F782E10B620750E2C4422CB 80970C04DE72DDF2D79C24F77A3B5D8D1FD1A4A60CF964C507E70F36C94FC49C 40281C092F51E15D134C025F48CB242466FA6BC67A043A2B51375E49B5E23A65 056D27230A209105505FF1EC4385F03B972C5EF54B1D68D1F880832D1617889B E3992494886663211A2AAE74E5F222786B294E7F407CF56B0E5BC8EC7CBE8530 BBDE27B9096F2B26C4E34CD2F1ECF212CE844CD0837CA857B05B698E39B6F28F C6726DFCC4AB93563E13B27689153341BC606532640DF6578271B0C79C78D6D6 DCA8F81F3E1A5E51A2C079F6360AFECE8D78F5FBA770D0B5DB9950E38715B682 E12307AF08FEA673C350A720C998374D858364EDD89338CE98B6F6EDA54E9DBA 8282237CDC03F3FACDEFFEB144E4515B262C7AD44086A38797B4A8AF0EC1EE2A F76E9D37B8F95E9D2E9470EBDD681F1680705BFFBC47E7BF436E2EE112E6C32C F1A79ADF8A04C6CDE3AF914051262F8476A3C98C9413388E7C2CA43C2815AF6B 4118CF875EFCE5198FF3992A6E2132D04C2877B78CB2462CD9AEDC8B1FAB3BA4 AE9B88218ADFD18C20A27D45535672225C8314D9374F71A37FE89BC2B1653F2C 9BA81FB8302E456D3D70D746DCB50C8AD964B73257D3D029BD257426A3AE0F91 247CAFCDA9A58D3DCD8008603A5DE0521B302E4D4D09B1223571FE8B1A4F5E28 D86427BC862A62B609784D1DE7AD977738F5B057BD986ADA869E15D9D584FC9E 78EEE2F63AEE8DE0F6F70C60A6FA5909EE36207D17CFD7A525BE444125388FA3 B4EC467D63E6AEFA796DC56C8FD8D2DC570C851B70411891A1CF2B2563E39BC7 5668922B661DEF5A805B9516C1D8C4548186E9FA937A00931295B2A5241E23D9 D14CAED32A28F016276A996737B9043B69D135C4EC5315F8B18FF168EC1657D6 9EE29F8B214C32241B47ED1D21BCD2C55C7D7ECA13A297BF58F56E78A3C5F718 9F937888483402D1B69DB5B159837260F1E58F895080EC30FE323D1791C2F1C2 E25C919074D6485F10B9B608C3A0FBECE628D2A07BF81710119FDDB6C70937C2 DCB42D82297C762C2CE8B16C2274728D5F1795DA49076F55A03AAA3B39E3EE63 5F26F787F605C610D0FFFD8EF07F08249E4367D4FC5A72A6729190F6C5392689 D894518367ED02B283EAF68ABDA35BF03637A9EEA0991B170BA4E94A483D9702 6FC921DAE58B59164C3863C59ABC971E8C7E95FDC7242CC2871265B0C214DBAB 44920C2BE36820C375C0583DF09CF4341DC7A047A277FA8742AE36D942E9C95E 74BD1AC87BFBFD6EAAEF6509528FF9512910A89AE00CF891D61DF8950736E909 7B4F40717A7A7C3C84CAE4F2D2C25D7390F8DD1B61964B92D763B431EC43E4BB 55C6BABBA783DDC400452573195C3D0AB0F49D50A77C5BC17890E2FD63064917 DF2DD12AF76D8403427306446DE37D8853D4462EA2B0A67FDBB974A78AC6B7D3 702047C1BD247C2C443E7D0944EA05741910083A06529F27BD6CD02C25FDA535 2C16D351AB0ECF6DCD090D80AFEA59FCCBA9014D4BB4093C8A8DBF6CD8473492 64559A000D55C7C55376D66603F3112DA770A2995DC39BA4EB348FFC96DC7A74 595F2F7320DC650A7EB4349F2D4119B5E6F176B2D82E96C27251BD3D0E20498A 6CCC26E21BDCEC8F4FDF45E36257749C97E5D730A4D4698277A7B39460314E86 4091F86394DC6ABD399B8750B55455FC68643C937C94A3D4DC63EF4DFC1772C7 2993FE3C7A807EFBAE415258ABC674D537C21F84335AD02A9E4FFA99F55B8CE6 5F1E19C90A187F99828BD85229C64451228057BF6FD848C897FD56A5903063EE 935DFEB4E4FA8EE80D2618388C7EF5EF12B6F10AF274371F45CF0A1EEF3FD649 D25871125A7F3D125C54DD247075B508667EEEF405CD7FE5505B40D42251B0BC FA700B95013DD0D2955CDD13EE6C8940E5BEA7DF36C3CA6E905E27788C6C2E35 416961A3EF9A831D7876C4930CEED5B0F2EB65869969F2658AB50449E627237A 1EE56ADC5B2A7F3DADF90ECC0179705A0049BD3A7844C3D8F792439C85A8CD09 9AB53D3DC13C85D0112FD877B3983A0EE39277EEE1FF627200BE573719402944 16352A7A430090B6E9DEF2B388002B8EFCFA9448FB9B9379BB47832DC466B6E2 C228835DBC59F672D3F63BD0909C6128DB46F6EBA560A227D5A91F6B52F81EA4 5F2912C2119022150780B3B69C0224C40FBDD0FA0E216671526361ED2C379A9A 63743D302DD08FE437CC63E7078B6990D6AEBDBDD49789B328C5478D36BF2C2B 1B39BED5627E742AF084D63C2CE77E5666ADBD58C0563872537EB827E072DB9F 22EE512FAD2D3F3A638C89FA689C36B7BF0D6A8B1881174B6134C41967B7F539 82891B10684AF751A5143C17B444E5FFD715A52FB88A504C37FACDFDE5852569 23F98A7060F16F264B52690E030A05A03FC365A25B4F2CBCD00864A5075AFC24 5C7E17609D1B045F84696C42063DB18788C5368FC1CA77C5BE509556D4A2F78B E5E3267286367FC5D8AF6B94F0C8D6AD27DD21FB6A8B8360004F82ACD4496253 D31B544CE8D5BDADDB81CAE0EB5E072AC6CC4DD3FD495115354AB93067CBB6E3 560AAD419A4445528B5316E7D0198825DDFE73628FA4B0CA39F8A88CFCA923AF 2346E469D4002CE612FB6B71F213E2F183AF448DEC02E04BB7DFE662572C87AD EB3C52A9795F8C9AD1DE39F05D6AF9781E34F191EE5044FB30D3B733CA40EDC5 8547FCD0297E8AE949D1A3FF703CFD66D4B7FC94E88C42394D99B79AAD2329AD E7A589552EBFAE3F07376467B7BBCB08A0F90071A154F5E51399CEAD2D291F39 0CCA15489876D6617E6928872895E46A51DCCFC2D230B160E54AAA7DECD7066C 5A70C11B2704EAB8132F1B7D6262551215EECE958ABCF01ACC98B1CA1484642B 96B3B254A63778C385E92F249978AEC54511BA3F36CF60D058919414C1800605 57B45DC98B556A350B99C5E0488ECCDCBB8D9607CDF40FC2FFDDF6D9B9032299 009352CD70B5E7F89F69960B2359B910C31851C9478E4340479263B6DFB52F96 C64007C7FB5489D6E421DF86E7A4207BD83C69F567BC0887BB58F1EE69351DAB B7512B0C015B8CB97591F7391F584C08CBC3AB58658118486E77D64F0AB9C269 6BE51B5C2BB6DAD8D7544A1A0B193C3AA33527B5461B23A7EA9C5E622BA43C1A 2867ED9F4B0BF1195476C6C0EC5017266CF262B192F80F794D88BE78AB09EB98 B5BD32FED7F47AA7DB208B5AD86F78A5730DCDE533B1A7ECA8ABC3B0EF02ADDF CE0B9967B2865E13DD17F3C2B89111FF6EC170D1992242654B8F31605BFD5164 44DEE30EEE588718A15299C93C7E862DBB3ED2204D5E04F19740FE75A7441380 F554BD5FF4A65D59CD6666825113C4C9BE2978DCC651B5A9B49E371DF112DDA7 78B1E5AB7CA9166F1C563BE7B0C3194899993554F063E42FFE0772CE3296ED0C C4A04A6CCF168BAC5660A8571E858D5B0F539F541258A6B5DDDA73E09AB4A76F 9F2F3C88999C5ECCA90E9A8EDB3C7FF5C7FD207D93DC1FECCC650157C24A8E93 5727DCF4D05497575122E59237EFA9A415B0780684B752072E05E453B83A678A 7D5D5C3350DF128572364D93CB4B714C53AE7652D8169CBC4BE48F5A622AC156 75FF33D2CD347D849D7F4014E39F6E4A8FB4789B1B2AE9F3A87AB86148EF3FCE 45ED77E90F445D217495696827A429285FA47C3E354E35089916FEE4EA1867EF C6BDC2AF437D6AFECA803BDA1D8CC26B167FC8BC0B765E6C4FFABDCB486E7544 C9DAEDFD6ECAA9E900F5CF7023CC8AC7AB951C91CCF7A18FF33ED6179704CDF5 EC6E9FEE72E88936E7CF3B4E14E52CDB046E18E7DD7A7622EA804F31D9F072B8 99AF8495782D70CB3D445848D607A3BCFAD05FD16B8BB3470B211F3967354B88 87D554B30A78BF185D2890F38A1BBE0C7FBEA09EF87008A89F301800AD9CCE1C 4C9FB2ADE6B3739FA207BB2C70CE7F6A19793B6508B6C19739D47FE0C6D7B3A3 D2A9FFF6F8AE4458ABC9BA6167C8B31107C119BC0250494A59897FE380772A4C 0B60C20D44C218A9042BFD7393DDDDB6B6EDFF203AC1BA06D53683E9CC93C557 8DD8395C85F8ADDB3BBF5A15F6812755C88EDC58A1104E643F9C81693B70E98C 180103127A6D961E0B41759DA615D317680399B30CFD39D3DD1311CD36EFE597 FD8485DC0FF421D31F1912930BDABF8877950752B9FD2557A74EBEA591CF6D45 487251DBB4C19B2D12795EEADA7A4A89C2AB877B9D14551EFD649B7868963F26 D8462C12256B122B7F56AEF135C88021CE8ABEFC1D42CFB7DC62784C25121B72 E5792A3CF4E51A5515CC2363E123E27AEA04B0D3C92E5C2719E202654DF7F093 E67C0A7EB730EB302E4D69BC25236252B6AEDD1996D69F8FD52CE72184FB8B80 396C24CDDC54F2CA5E27839DE141299FB7BC8509F9874C4BED39B1D6551BC6F8 AACBCF458336E95F4D87375B4FD0476C7C8553E116CC281D74E71DADDADE6D42 75ED626FBC9F9D637A823531F3C194DFDC6B19CD129FEFC0A3D8978F49DCCA5B 2F54B45C85DF463F65E9982246FF70E11CAB3B011F8645419D07615F900D77B5 45180E311E0C6C1FFA38F4916C92205E2A26B559C00CE8798D853BCA814C31CD 2C00A445B22328C5ABE1858AE7D45A37B762F21AEFC382E026BCF18BEFC22C07 1F5E5359FB89C8079EBE1E61C2E947B42B60591465FDF2068C9548934812B394 8288405C376429709CC2F0A790A676312A1F7B6A2C201A835D23F7915AF31C9E D16AE13C31245412952085C6511983B603D5A9C4D948ED4E5688D444B92040D9 799E567CE717B7D10212A4CDE7196A055E661155A06D5BAF79ABECB174D1314C 9BFA608B4A1BF31F3298BD908EE724A656356037573F643696C7E50229A02801 4F869145725CC69457D983A9EF5A091D52D089B81FE9447358A275D1AD2D5FC1 C174122BCC8C7D6AC9B9CB78962314A9DD8FB8F2DEB144A6B041D160C9095D25 F72984D6191AF657489DB7A787067700522FBDEC3A25D13CAD71DA2E44A5F9C3 B8F5983A564EAC8E7840366BC6045D4885AA5278A704AA73742E7DBA94245260 587BB24460D421703E6A279F8F583F1385FE0729622A17A070D9AB48AB371A10 A6D0A5DF77250137667BD4B96F13B55B07B6D2477B1EADF3F55BBED7C7D1330B 073AE7BB89D1A4F5062A4A3B2B0EE53B21EB748D1353FEE8DB441446127BE568 9440CDAA3C1EE4FFFCAE52ADFA631475438CBEDFBAF3CB40A1D65D47F27A48AF E88F57F50FAC2CB424A9F35C93C7473D2E9E361125D92642D2C25CBC9BE82D79 E62507CEB5093DA15CF3EC2E4C99BF6DB1B84AC71720544DF2F4CA7C00046DA3 60D2254C7320B2ECA36A68E92ACDAE4E3DB361F115C6C82C24EF3C0E773A42D5 0AD85ED3A753A70DA18AE80B34C590BF0F787A60F6A06412E4D5B169FAA5AE73 3FF4D5F97AEE71FC0EE1FE6D8C39AE67E9B599D4547F85DF41C5BEDD0BD876B7 F632549BD6E4CA2D041DCB92DF49269B2847405A6C2908EBEBE3E23398C00749 616A087F403C0F7A904402844A9F3F8D12ADC69B62040676E5E7471F3037BBEE B702C43E180647CB3B204F74B9C352BBAE635DE85696690CC58BC3C5DBF00540 88B756FFB12843D8A477B81BE67263A46350B690E754988E24DB1C03B2EF9A98 F6138987079C2DF69E4FEF592FC203445BABE7001DD2DB39E9F3C3080DA2ED50 77F717628868E0021A5E9233E61FB3C3389583D83C22B1AA0391CAFFD924430C 88DA60D5F27F7BA6C8FE1980DBC7717D726F799FD710EEFD2BBE10FD89650E1C 756CAD4438B0A64ED5CDFEA5D0C0D1E6B3E69D279DF532F73AD95D11181D9DFF A3E9489C6BCB2EDD8B807F9431080047ECA1F1DEB062130B04CCD30DEB378095 12DC6D807C64164663DB8A54768FAD151DD8A6465CC0421E00CF88BA29E7D010 86992FAABA0691B2FE05454AB656190AF690143008D4476DC3B66C69FEB150C2 70FC9E986D7A82CDE0A24BA276DDF300EA9656A8970744BEBC5A864FA3CF9956 2D2621AAF180783FCDB677A7DB384B0A92CD42C10AEF2A9D8843388B059C9AE8 F020FD785AC36F258D75BE391B7E085C85C14EB3E9AFAF18AFB7A4E8B8B79CC1 136070F037E37BC1B62E37A77FBA9FB2F46BFE7196B17D6B84F49959819DD1D0 1C2ED8034D3E34EC34CEEE4EB129AA5BA15A0D4DB4D8796C50363AF98E460100 0ED834F1FFEDFA99DA4678784D50DF9A5D11148E7E79E8FEA75D9BA7F5CDF435 A145DD3BE0C8B711AFD17CF7F909EA1FB9CFD4C1717545A59FDF0BD14AB7DAB4 795EC7C47EA8195D1C49AA123D0769F276FE1C61A4168FB7328B173EE86B6BD1 B43BE66C925135EDBC52A3828BA722AC70C21AD47EBCB8389D5F2CCC6B458F9E 304027EB16C70E4AF5E876D73AC63B62FB286BEAFDF3A8FD4A90814C9511AA18 13BCD561D54E86C0ACB8FBDA3FA8712D746D261AE0E2A3831196F227CAB7A847 FA1D9D6B3C16ABD37D826433F2E0733B55CF8C01FF41265903CB1D8124FDDF53 08CCA5FAEF161B11B73566AF119C1E3B46771DA6E64A5D38357CEB8FFEBEC145 3F6C04D2391BE10CED95526744A7254860B862328ED2882DEAF17B785BAD0CF9 CE68162ED656AE163928E851235434DE64544B21EBC47BB9682CE60E17947EC5 AABBAD6722DC8473B18A07DF13391DCB29E0169354454B0652A0DBC955844906 139BDA0BE4EEE9DE6EBDE41CE534C9740A75D079974B8A75B0B6A90FA55766A1 5B5BF32BDAEE12311BAB2831ACA44CD3953649803DF0A57A5555B33E2CCAA124 4FAFE2953F67D3B891444C4210419C589EF3A4860FFA77442634CEFF8AAEE32D BD9E2BBD1726DB317638D497BA8F34958F5D947AC24E89BCA6689CD0178233CD ADA6E10649966FD2E7A40FB877F9FB2ED1E98043847C4089CCA5C02D6BF671EC DDC0AB16A1B96D4D3F46B0BDDBD6CBC08E78A1F0FE0BE577F5C2658E56E76411 2AE3E36B4489125B30C34F50B2FF086FC52C07FAA51C7374FEED8FA2E499116B 62DEECD96152EC9F97BA2840DE630D9FF069908CBA92DC4478D6AF9873E84C49 8372CE8BED20411E90A7E80F919C25DC44EE7019D4BC928985DA5DE620481AFA A13B66A64025D97E365FE5335AD4AF076408350BA62D1BD9434B008BD4E64773 CF6CD42F176DE673805F052E4050D7B4810FE0340BDB4D517018C9A4F4C357C4 6C4D0FD14723248FE456B091587AC404D293D885885ED7A4657E36F76C9FAE9C C3D80604023DE93CDA65726C8CAC2B9106D0615132F70A8D23BC43E5E475712A 1078EC1EA16801732127AADF396A0028B3296D6D1769AD7773BB03A8272EEDED E36F76030DDA855E25B5753025D7C405BD95873BC32972AB992998F5B5A46108 4F5AD890665234A77DCFEB4F3336D0936A59CB05C4814FD743CF1B5C44528872 3EEDB0B7D0C6D621CC38B1745F3072244D5DA13FE3859980120029A1EAE2421C C5C14C3BD89D58A1D7F93ECA5DE9685F54F4E64833FCF95BE8C5AB2026554398 E8F787DB595F1B5661D0E69C7357DF82CB478BF52055C73DD6C9987A0E3FF814 B3A62235A1E38EA066F2DF9A01D52CC3162BBDC7C9290C093BACFAFB35BE4965 3D4A82A2456381E8C69D7303B9D6C95C1FBCBA7A5B886870C590A3EFFEE9916E 1FD5EE9C00BB1712A05D625B3B75D63C449EAF96438DE3D56905879B39C338D5 1801E834A438361ECAD75D85579CACA00C83DDD8F53A587DA9463BA3DB07052A 539DACB330560FA30AE77E239ADC1E1ADE16FF555AA32195EA2DC865D1173A72 34EBE565B08C25E6D2E012DEE128ECD369410AD22F2354DDDBA62461C0B25DAA 28A61F7CA33A5D405253921E83916C01E5ECC9BDCCDE9A8E9F83028F47F61154 549ED5E9211CA29E46553BFBC1A066BDAA0F6988F420764C3A102D1CF352A4E5 4A649EBDD587D56FB89FD9BECD7F1DA1FE2A0E5FDCC9F741B624B0C641B6F174 14B0F0E9791E794C4FD628577F55F7F480640362A61280CF59699EFDC74B6183 30C720457BD73038C8514DBD4B479A7AE28317348C5016A2FB5795CC7D0EE466 46BFBD0FABC8D9D20BBF133A4C2456A51BD68A4696A528534AF2ABE6A503DC76 D2C6633BD227A02ACC62A5313B9DA70B4BE5BAD8BFEFF3DD4224A6C6D96BD232 2217DB0450A68C788EAA618404CB7AEF9CB75BAD39F59092A13C9EFF7FEDDD5F 1C872B80000949C6FF418F40838CC3371AD625BF2A51F46EA2F451F29381AE8C 719E96B544772E43DC60DBE33575ED357C59BF146469C50880EFCEB8D91A76A9 42A52C5E20BA7213ED6D12580D4E12F8D5C8D0E731ADCB6DA94D1C498A1C8CA3 B88F5DC29063E043CB1610ED9CC0EFEA122B3F9DEBD2FAF31FA8C16D39B41049 D5586DBAE9F3BB680CCE74A053416241090D0179929A5D17047641E9E01145EF 04C59DCA92C99C72A6E450FDD462AA97CD724F91E452A6C7BAF10F9663F370BD 82F1DF6821808F3EE971F8AD22F10129B55D3C69E43F8EFD8DCFE64D191BDCEB 6F3813ECFEC667021FE72EBAA04083F8773490ED73F110C094FD55BED46748C2 2BFD936C952ADFAEFDD97BD87B20D791780AD6CDAA8652BE4F068EB14040FA01 CAF3F15246AD0487A2728432B37CDE9ADE14DC6D8AC1DD9CD3A5333C5F1A0ACD CC181A050655CFDB8596083A64E819D17C5E5ADD32462B04B346523B1D2FE542 BB3267C06C3A45F451BF28E32A8930D145CD4B394119EC00A4502DEE350BA643 EFB74F01F32A7015975DBC98B448530A6779E6638E42999F51636FDABD6B58F8 E3995339F7FF3A9F52241F9917E32A3F610B66C711882BE72751B7B73886C167 C626D934DDA1387E89D9A13B88628935C5E6991032DB69EE9D00EE530D2BB5F5 B45053FED98719EEE851E1A36DDBD83FF86B80F5FC12216105DCECF8C4AF41A9 6E412E0C2F1866F53139131638AE35A73911B1D96C8B8FA40C246CA8E9279527 1F99EF9285EFDA72715F52300D473FBBE977F5C5DAFE04BDA286BCEA940E3FA2 BD7FAAF157480021D1211C2096AB1974A154D0091121E018EA0399880B21A260 81670B26887BF14959D4A21FD139836F4126544A51084977F044FEB4810393F8 418C32E0A2A0C03302D333D1EC32C188F311A1924CF48A2FDE0700430AEAD23F 3FA4B230472208A940EBBDB7826237F4B6F73071268A49C220DFA4B9FC0144CD FBAA4602E33EF7541AFC3D5472F4525FE4F74ED4CE53389021E711C9AA8F0FAF B674A8F62C2D317FD8091258DF35B0D69A0ACF64C2BC79342811FD4D8A04E08A 5D6DE5B96C1900E69370B6D0321A2A8D315D785F761E5BDD3343A66D5CD0C809 827F0265C6FDB14EEFBB75A907967AF5ED715E149A91F8213D915C6C60FD33FE 48C36645F4F476A130319A1AE332F73DD76EDEFE02F7E97ABB3D11F2E8504356 99C0747A3CBDDF002C25C051E1C7DB92E011470F9E309FDCE30E6ED8D78F1583 F5F8F74A2BC4355B6D9DD29AA0D57D9A8652C86F9F33766FF16CDABD7799ED6B D399950C2C728EE95AD880B1A4EA0042E5B198BF647F5BAB61CB57F8F2450E26 5BFEE67F5BDC4A8C97779F64B6959AB1E23A2BF752CEDEAE0834ADDAAF780986 A11687EC66FE8FA4610D606713788A0C34EE603E3A9538B618AC2EFFCF16E5BB 18DFDC3EBB84602E03743E72E7D0CC314FB59554929DA6924DCCBE64045721CE 6A9A5116A3F2B7D78B8E7FBE7B79FC55EC16451655C9087A602D1CC33010CD8C 369E7DC96FA6FCDAC2EC05ABBF5DB82E1718D05AF629101D5D7635E1E2D378EE A123456E311F4237F4A165CFAE5F2E2F83A0F39A0BFAF5C7B6AA4CF14E40590D 3DC9A7C67395092377734DE58E150427CC6BDE166ACE44227ECB056AFC5A11BD F44260CEEF1C53B8935978197789967A92B1F3575B41613D87E926B9B1AF03E6 8648392B7CB2BEA66D0D7619BA23B47EBC5DB07DC2A8997B30BB7F63F98E9D70 DD2F945777A74D7B36F8BC00571C96CCDC1397CC4E531507B135C71F263AB868 F87E02A47C7D8A95E4638E7E3BF14180DA09BDEF281A8ABFA5DFEA3F412C87E5 B45F24D87418C1E397824D73C2D785650ED15D868B011E1AEE36AFB32DAB82F2 8AC23958148447CBD2E57283AF4742299D8B865FAB70AF4ACBD8FE6C00CD6292 2FF0A88E9B3B95EEEF82A31322E79D8E3548F582899214A4A862FABBD1937E4E 3FE6CCFFAEDA522E9EF53E33BEDF7EFFC992CB8CEA8DABE083475DB864376158 931D93B618F8D98CDED544817DCDB2345C9F769B307736432DEFE14FB16735AD 7B87C42EA7844A47AEF6DAD0CADFC78780E5B980D00C2BAA6BC12F94AAF87C2F 863D3392D9F92AA698BB6DF8D6B8F18D87BCEA4C7EE1686F079F72EE73464042 8B001491E8EACADA1CEF26D90A007E056D8549A0BBC0E350FD74B4253FA84608 F6AA0823472BE190F6A7B948F68D5369103BBD85C3510CEE91926FE5F96A8907 C6AB5B3D7A8B6EA04F03F3113B3A06A01D7D7AEA934D5B664727CB5552E26336 426D31BD1191A1F9BD3CAC8AF1B63087F0280C0F3AA2D139E58912BDDD402938 BDCB9FCF874D286E2945C8E90EAF47335277AD275B6E0BCB59EEE72E6D8CDDEC 3974294C1422C0961AAE2812AB1C43EC9F4AC1B3E81D1FC06DACF6FF4F17693F AD1662AD2462B44B4157A687038C0913FB7DE2E25559696F3F2AF579ABB9E4D3 3E41D238E64A2C1A9C21E2118846B3C8E48F3BF1F4F6EB1F3BF2C0EA8E279DC6 70A7B1606C72E283B575A8C4375477BE6D63F2E71CDB071900A281D3CDCE997D 01C166295DB3700213BEBA265240675D20B478240368C8B82710F6602E833E20 C924347FE3953FB574F6EB6BD969FBD04B4FBA3C5D9536FCAABE187875550DDC 2D5F9A446D0951859114659A448E38A36BD37D0CF79B13EB5D68B45B2316DCA3 DE2C015C318462D7C201AEEDB5C932B22950097475850EEAFB7916BB8D4EE2F3 1EE3FA20E85B28A3C34168D23272DE3F6A9786138FCE8F18E6337C10744B64E6 A9D1571FD2724A1D2310DBE3C96ABF6CF93DB3B3DC537E66E5D4DE83DC21B416 BA779D6448B7C9EDB85F3E71E7393392A0542FE9F5DF4C10B54D54A7D0439359 B4606E0E56DF9842953E29BAE7AFB52A12DBA546B41EE7DC5EC3968D8C8C0847 57A145590AA930CD23030C155D3A2FAF64DF4E0C4D1D0F1AB80F64CEEE326F72 948DAB18CC90BE7E996DD2CCDCBDAE0CBF853B27B44212A298068D18D6DC4444 D48581E65C28BF8FB9DCF10A7F50CE2840B1A4F451203983E10C4D59C07E6B31 C35DC6D02A4856E2A6D3FD63B36C9C2BB173F5D5097241D97DEE4BC152873489 B2E08848165B619F84BB425E29F9A661C772C45774EC3F0260309FEE571E954A B77B06E59228808FBA8F8D6EF67541697CB4E736FAF12CF1AD56C1AF3EEE2F53 B7E837630C9E2EED1680783F523375E387DA32184F061DBDEC0C7582B3E9EDE3 8B35BC9EA4C95731C3093507AFDA346C47B5F5A59FD126C5684AA4C487FE5543 ACC5CDAC42A58AF0B8BB78FE767C96BF200C1806C5495818304F13596F8EBDEF EA38FEBD5144593F8CC99CD0B5554BB262120C5CA0035038C8D573EA43696E6B 9E8273A62C8C937DC7FE34BF4AA143171024659796E12E3E3A38F05039FAC149 B5632CAA9DBC7FE569D7DFE18F57C98400B39FB9D00B7826F4C5522C431A7A60 0DA851DC945B494CD977767C5FFB69623CEF38C19C3A3D5689CE2A287FF22EE6 DBD82AE1C7791E2C15EC430B00083DE7E672B9795A1CFD5A8E8CAA7F0CA0E7A8 B6631A3F943362D862A114C8FE66255B882E82DD604F1B723C05F8DFDF2EE6D4 39C21F35D99ABF1E1FF19BD0B327DC6A0AE410D1DAE017CFACCC7E8286EC4125 7F86E2951A4B4D01FB058F785397F079D370682282D164264801D3A5F59D8FD3 514E781EB5BD1656AA04ABA65F0525F366B792982124D6861E2861A6E3D44455 4331C8B9B129AF407A56A6D5C29632F1994CB864F5978ACA86E56382C5D74AFA 8A05EC9B136950C3AAFFE587573F1F3E16CBD110C30076D082B29666A5E45CF9 3F52A4B405E0167D24052ADA9E98853D3455220E8640E1CBE4854FBA97462893 88D824148DF46933044D09F3B03007AE8DB2A52A22DF786D6AA7E990B0772E47 231F7865B1E394BADB1DD501EA736778C75EEFA1F9A54B42522A1804A9CE08F0 A7E82E14BC4D4991995BC16CDE6E7915B8710711A18B9FB97A32DCF69CA8078E 716ACFC562603FF79A7B0D7E87A60DA33C0E3C50EBD3229EE1B7461EBA4994AB 0D391441FF59661836D3617738C44AE20B494035C46709FEACBAC37C51DF0ADD 937441C9E1509C1465C86C08CB2DA4028E873968ACC5E0EF8683EBC9280152F9 69011E2075941CA66DB2110C971D5778FBC13ED24470BAED6565C244DEFCF245 797B16127CBC1C08A4B6C4F7D4A9DFC92DBFF7B59C64ABA51243129287F85886 DE1926D3232A035CBAB7B47266B4A1084BE1DDD7FB7D0E4591345F039502C727 486712BE3BD19DEEBE744CE2FEFEB6F26C3C17C54A21581A51D4DA8A1AA11056 5109D5936109AA310ED6499B0E5D40CE7B2361F955816A2599509C2C74F16500 F74D8CCF0E7F0B6ABFECAEA687E037E5117D97B20DF518643251A0E460B4F6EE 84F171DF6E51F0566D797026E96C1B1B607D5FCBFF7736E780636B1EBBC93826 AF5665D8F5ADD711B47628DE98DB2C04BAD30BB7D585C116D97A5F55B517658A 24E9325EEC3956E66151ED897102036DA56B80C8FFD40644B78B1AE1265EF578 17053339690655C02BEDC59321C51BDCC90A17908E21275318292101AFF192D0 B966D7F13FD49C0A4B6DC01D0B7CC7787D549409E8A4A9DA24E7DA5C6F736A23 6C82FFFA8E80A9AC290FE9D9C8F480B15252D8BEF76A8E16E106B82C8BA1762E 70D3EC0D8CE7FCD065098D9777C456BA6F35F5E382B05BCBCC25725A8BF15CE9 ECB6B5263D064AB44EF669C8E0547CB22E0950D513BBB39D9329E6388512A58B C3FAD349A20A1AACB0A5B43130DED84D63C9AFE1DEC1AF4DCA7CE23529D5DF3C A183F9085F0E21541B14D0262B2C5A8CBC093A5888A607D80C7930C211274F98 41145F821C06DA96099AE2466C5E15D95C203FD918DF0464E8F9FED955873277 EE903EFECEFF313E863BA272A489E1C98B4DCDE2481968F69EE63BAFC75EE724 07AF31DEC2C8040BFB39E0F370C377345C196539E2A50596253BA5D173296E82 5AA562591C39697668689B03DECE87E2865029A9937E14612BD86F52A25689C3 A216C44F11760E65D0115ADF2DE08AF7B3B877F317D190CDC54C451881A9375B 47A033559A12D40AF985662431B9AD2D2D3C375CD51D2674AD9968610C072E1D F73984B844D97C6B4D48A2134180044022745582EA5CA4EC26E73A3FCF265FFC B42F2A53C3BD3E483CCEBA578A078B3E3D37CEEDD06295559E7AC740C43C8580 39E9C988B4972D5F53FAF9B9223BDDEB42CE2EADCEDED117FA4A1E5141915C74 3E6713988FFADB9C101E7EA4E32926D602B4C71CC4E74E2B6ED2C5DCADD466FE 6E59CECB040107E032E8C41C7E8EDC9AA14C19A7BE0AB050B80FCD1724297215 55FE58D604ED04F2BEF433E4E8D743CCEC8A140C3B88CA2B37783DD21CC210D9 118843AAF5F1E42C971522B208C7A5EBA00D6C28AEFD2C7CEB27DFEB34C4F616 E761C946A6485F7A5DBFD921E1C3FA41F927B0714F5549923B1C27F6C704DCE8 CC14D43F5E61C16BE2030B378DDBB3C28B2F31EB3A9B2DE4125D9CB589803E70 E1F9FA1D93D9000C9699B28BF58A9B833B66179BD143DF97F4E24226D7521ABF 3FFBD47D0DD8783373FD30EC663646BE383B662A11CA47E53EAB63D102D2D9D4 6EF28DB89DCD5301654506704455A708CF5AB954536CB43935CBE2621305C53F 8356DE33BB289807C2F25A91855D3EEE681965ED4231B5068A223116300CE8C2 312618208F8C1E5ACCFB8FDEA53FA3B63167AF02135CC4CCE66A18220BABEF94 71202D27835A4B33BD1AFAD7FD36F3DA41A48D2424BCD5353D0B5C9AEAE3FB20 FD00FCE101C595F41B96B18DA7F963A77C1B6F11809C5D5B7047DD7B7ED4F62B B7333EC8E40F432A9E323DBC7E03FE6E77A80133A731F42698B610B773CEDB2A 03EF63BDE89D3EA8483C7D9D6A3CDD6136D5B59215B5E8A7342F69556C3A3DB4 7F10148CA111550A9EF89CA6B124A427C270DBC8A87BA8368DE2ADAA2192CF8B 6871079E8E4443615EFF3D40563B7DD45D61F9059895E4915405D085865092B2 CB3696AD723FB57419FCDB1971DAFC7F0C60DDC9641674162626319268DB3590 43D1A0B795D92F34FA3B53359BDBAAB0E8AD87880F750E2AC05DDD8EA50FD7C2 DADE975A9D383DACB1D4BD91CC064808825687E1EB47383BF09E639075446075 F6D1DA2201F3C9919CF8247F03694671F653A2681048EB85AD38364CC41E6BC7 B7C320EB0BFFCD328E8ACA2EC0DC397EDD9710A888BDFFB5D7F4C18C9145E604 7DACEED08D365B9BC4544F06F19AD3E452A468901182D2FB1D86AAAE7D7CCC27 4D38D73921F3A8BDE658C5D0EC4028F2BFADC53945976FD7DCBA7621CEF2532E 129FAE3421163C288CAC50ADC7E4D9F903C668FA533ED2970ABF1155772C0503 DA2DAFDC9AE2B9C3E3F69A368E335FA1AE61DB86E3103110D94BC0E579811BCB A73AEF0D63FA1286F8DF9C3BF0B4CC39A8DD1235763E2E41BF295215303663E1 089ED4A32C7BA6298D3869758873C687AEB356F9FB7259AFDAE54872D5569F12 5504DAA00675BED893051226EE0F8CFE97FCF34486DBE79A83138F0C17A4D446 1DD177C06611752E681DF48A5BA9FD18BBBB4CF93BB4378DA3F94BEC2E499DE7 301C3C35C1EAC523422A62AE984AFEEB5A3AC132164CE9CD7B6CCA854DBEC672 5A6E85D0A2929655453B1F8D899B31214416E0DC6408BBC7726F466A75483B9E 82A809966554FD7DA7D129FEF19CCD36485C0C8111C0F65445AE8FA18A88F65B 3FE53F0288488F7FAC353C3D4148316AC6CCB58E54ECC1DF8B1F0A5BE79C037C 1D66B2773C16497D104F5B8FF98997673D0E17D1302010B1EC836AA936BCB8C9 ECE8021CBB7AA4EDE0807B0E1CC9C73D6063817F37D2E6ADD4213BE9F2FA7F3D 1A905D272D40F2667D0294F06A528E002231ADCCE93EE8D8C83DB1D60177F181 C9EE9F67644A6DBF72DEB4D6BFBF2F4482EF642FA539FA9B11064017D4E2BE24 CC88CACF66A8985A5553283ED33DA5F0E0E54A3932FB9F7F7E261ACAC5DBD46F A0A60BA41D14F5040BFDD6C9ED7B54F1E54C1DA55955815CF354F47DA7E6E2B5 B64B48650C2205A807683514711EF6D77ACD8BD7F424A189AB88570B1A511157 F0F3FDDF868AC6E0F0AEFE887E1B962198CE9AD45FE86CD904FEA50730B6D256 979FFEF083080A0402FABF95848D194235EE82581079E13DD35391EF2798A87C 046F2D8F22FB936BFD373A7B42202DCE9AB3649CA62DA38F86202699F1BF925F E4EB251D4E62A3715F946EA1EAFAC067FA3A5CB857A683D62BFB3693CE879195 D566E6303BCF90CF402D61882D8C69B4EB10EA808101D040D1BED63E31DCD339 BCB74DFD079B9A9B6D6640EFB13271E933FA0ADFEDE7A87538432F6EAB4FE095 1E6DE7E738ACEBC87D8AAE22E2ABDE4C93800B639FDE1DFF522C7914F23BC412 AE85BCE949CB0EA61DC23465631126166E79F8F6F5283CF8065EBF661724AC75 26300339112D345AF28CCF08FCFB79DFD18FE29E46A3635D2A7679EC332C0977 D990F9FC23974FDEC676EA3103C511303FF0E0E2124FDBC4654C71DC1EF66939 869F82E023A824A78F2AA914D66DB7766DF78385F1C5A02F06B460E592F38E25 11D88F3C7C6CDD7778304BB2A7B5034A230F6FD79434B8482E44B5EA0504D4F1 E1FAC676C1931DF6117C984408693D8347E241BAA7F0C65DB7BA695553BF4756 7054F0DE33C6C4E8A0C2DB192A738DEC60453F7BDA82698491910126F9762F66 17B40D677AB73FC5A69D021A3289160A03FABBCF3F5CC97A802B8AE852C95C4C 4F87101381363761D803A9450D2DE0FCE3AB48F13BD859D41BD884A7865174DF 6FE24A98CFAD6B64FF0C2790CFA2E602A4FE1780982982A55A06EBDA791DFC9E FB456E31FA716ADF758CBAFB7FE82175483B72697F2754ECE0D451386A6C55B4 7CD891EF8CB7EA1DD3118A2FD37EBB4EF8C6EBDE568AE2EBCB7083937CFB44F8 D22A0874DF470229839C6B16724F24A6078BFEC824375C550B1000D3491735AB 63BA324E193AAF31FBDA29E4542DAF129275847AB0E01F4D0D0EB02B8B13BBB6 7BB8B63A9CAA73AD1AEB412A20062EEAA0BE81C9C8D7B6931A7958AEE0F39BFE 7C3FB88133273B600662DA77954C64E4EF8753ABD0537FEBC836EED5D7FA6E94 B8732A6829536BAC09567036082AA5DC5E2FC04F81FD09CCC2E06A38777E9B55 3B1B1CABD695328CBD62884B2F3967DBFAD2B34D05EAE84A9D26D3AC5E06137E 029A3DD224DD394A083EAE22983493EDA8E79D44593F2FCE1AD619DF37098882 56B364BCC055BB078AC5C64FECED4772A3AD84C5F118F72BBE0EC662F711C781 FF06E7FDF967E976CE2C4AC70C6DF29AB01AD6D24D45BD096361D01F2164D956 F1817C88F84C20295A78296307CF499B32719D081919B869188CA8F1BE38E78B 036105BE04BBAF24D2D903842C139919961DEC745F9C311C019802024A7DC772 A2B4298D951A3B32694C680B0838428348CFAA55C4E434290C8F8829A58AD442 D70095B3EF67AEAD84CC8B5EE39B242DA8AF17CC368109FE09A8255597C93E78 B55E37529BE1FFB9EC7B130AFA22616E02832D45D20B0D3D724AFBA85D123EF5 B821F5AD338666B99473238F7D0CC629D84CB5F1E319820BAFE6A9E87D84C47F F7FEE41C0A4B07DDC4D36F41C5BF46AD6ACF1B7129A2EDAF5B005173AA7E43A0 5CB99AA0B6BB2A25DD4CAB130511401EC745C2AB6B3CEA7110853B55311CE6A8 7CEA42FDD8D483B3C05FF2C1BA20F504343B03A84258B30FD0525D323A3671B9 18C15363EF8CECFD3FFD93170E427820847FB9E5270FEDCE5E00BE05349A721F 552CEE50DABA48AB98631555C6B9C05965E9650C3E8189954957F83D366EA95C 123E37C9AE58F141959767508FE7DAEE0A2797B992E78DE4B79E1FCA9E7C91CD 91C77EC2E1090069D1DE25968290BE7CCC80E1B9B2823EAD8FD92E45C1D44C7C AC8DACA28397C3DA27DA5D67B706C003A8507F3A1E85F4004C27DB20FEF9CEAA 4D3904E7AD7F556B5F777B843ACE2D6FE00CF8492C101E232E8BBA0F9E9D50A2 6ED9FD235F8D3DE2272D98836AD4394AC669A855A16125FA754CD81A23B753A4 638DC517C0762030D93F7F91D0933D197960350551A4748DC67C6E51A3C03D7E 1BDBD11F624AD9DB1E8EAE650783731A176EB7F4F6FDF972F09723689508DB0D 79B1B335DDE06CDE1B2CC182B7F142CD7690AAFE1C0A65B0147C64AD3C4B779D 4C8B99668D3258FABB40ECAF0D8030C030A25DB7835012C03AD5D32C71B16D29 D8CE2A2402B9EDF8F5FCA404FF49AE12FD47F3A65DE77AF571A4C9BBFF6EFC1D 15EC16083AF4F28C3C2CF6A3C38A3E255C90BF5CD91AE886EF07613CEF333B6C 08EABE48D7D9A3BBD92955FF6960DB410849946B1D769853D6F1CA89E405A8FF F96E7B3E7845567B4D639D058447B793902544A125F76421E6760701E50BB9B9 B2DF78815C771F3EBFDEBB80E415C29D661A2095793F93325F4DD948E78F2EED DC7295EA159C9102806E0FB888284AD7D128AA9CCA6971245CB62695B1731355 F0818ACEC8681721C36DFC80ECF0E9D59589080E941B049C772194E83DE1E26E D05087746F3EF6595180C4480008CFEF2F0AB926519BA31392E3A84A07F2C0B8 5890AF6485B5AF0C01DD099D6E8C46A1C177E592EFB1AA43A4C225136D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (libtasn1.dvi) @start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 134[41 2[41 43 30 30 30 1[43 38 43 64 21 2[21 43 38 23 34 43 34 43 38 11[58 1[43 2[52 1[58 70 48 3[58 60 50 1[59 55 1[58 7[38 38 38 38 38 38 38 38 38 38 1[21 1[21 31[43 12[{}45 74.7198 /CMR9 rf /Fc 134[39 3[39 39 39 39 2[39 39 39 39 2[39 39 2[39 3[39 97[{}13 74.7198 /CMSLTT10 rf /Fd 134[39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 8[39 39 39 39 2[39 1[39 1[39 2[39 1[39 39 39 39 39 39 39 5[39 7[39 39 39 1[39 39 39 39 2[39 39 39 39[{}52 74.7198 /CMTT9 rf /Fe 133[40 4[51 35 36 39 3[51 76 25 2[25 1[45 1[42 51 40 1[44 7[69 3[70 63 51 69 2[68 71 86 55 2[36 71 71 1[60 70 66 65 69 6[25 58[{}32 90.9091 /CMB10 rf /Ff 133[40 48 48 1[48 51 35 36 36 48 51 45 51 76 25 1[28 25 1[45 28 40 51 40 51 45 10[68 7[68 7[59 62 69 54[51 51 12[{}30 90.9091 /CMSL10 rf /Fg 133[52 52 52 1[52 52 52 52 52 52 52 52 52 52 52 1[52 52 1[52 52 52 52 52 52 52 1[52 8[52 7[52 7[52 52 52 68[{}29 99.6264 /CMSLTT10 rf /Fh 137[53 55 39 39 39 2[50 55 1[28 2[28 55 50 1[44 55 44 1[50 20[62 2[36 2[65 68 19[50 4[28 1[50 42[{}22 99.6264 /CMSL10 rf /Fi 214[35 35 40[{}2 90.9091 /CMSS10 rf /Fj 134[52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 1[52 25[52 18[52 52 6[52 42[{}29 99.6264 /CMTT10 rf /Fk 134[65 65 89 65 68 48 48 50 1[68 61 68 102 34 65 37 34 68 61 37 56 68 55 68 60 27[81 18[61 61 36[68 12[{}28 109.091 /CMBX12 rf /Fl 130[48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 2[48 1[48 34[{}83 90.9091 /CMTT10 rf /Fm 197[25 58[{}1 90.9091 /CMMI10 rf /Fn 197[33 58[{}1 119.552 /CMMI12 rf /Fo 134[85 85 2[90 63 64 66 1[90 81 90 134 45 2[45 90 81 49 74 90 72 90 78 11[124 112 90 4[126 4[60 2[101 1[124 117 1[122 12[81 81 81 81 2[45 46[{}34 143.462 /CMBX12 rf /Fp 240[45 1[91 13[{}2 90.9091 /CMSY10 rf /Fq 138[62 62 62 62 1[62 62 62 1[62 2[62 62 62 1[62 2[62 62 32[62 14[62 2[62 62 45[{}18 119.552 /CMTT12 rf /Fr 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 71 1[37 75 67 41 61 75 60 75 65 11[103 94 75 100 1[92 1[105 128 81 1[69 50 105 106 85 88 103 97 1[102 6[37 1[67 2[67 67 67 67 67 2[37 4[52 52 27[75 12[{}51 119.552 /CMBX12 rf /Fs 131[91 1[40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 1[71 1[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 1[45 35 35 25 2[45 1[45 25 19[51 51 53 11[{}85 90.9091 /CMR10 rf /Ft 139[75 76 4[108 4[54 6[108 94 20[116 26[97 49[{}8 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter /setpagedevice where { pop << /PageSize [612 792] >> setpagedevice } { /letter where { pop letter } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a Ft(Libtasn1)p 150 1385 3600 34 v 1035 1486 a Fs(Abstract)31 b(Syn)m(tax)f(Notation)j(One)d (\(ASN.1\))h(library)f(for)g(the)h(GNU)g(system)2407 1594 y(for)f(v)m(ersion)h(4.16.0,)h(3)f(Jan)m(uary)f(2020)150 4779 y Fr(F)-11 b(abio)45 b(Fiorina)150 4920 y(Simon)g(Josefsson)150 5061 y(Nik)l(os)h(Ma)l(vrogiannop)t(oulos)g(\()p Fq(help-libtasn1@)o (gn)o(u.o)o(rg)o Fr(\))p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4413 a Fs(This)34 b(man)m(ual)h(is)f(for)h (GNU)g(Libtasn1)g(\(v)m(ersion)g(4.16.0,)j(3)d(Jan)m(uary)f(2020\),)k (whic)m(h)c(is)h(a)g(library)f(for)150 4523 y(Abstract)e(Syn)m(tax)f (Notation)j(One)d(\(ASN.1\))h(and)f(Distinguished)g(Enco)s(ding)g (Rules)g(\(DER\))h(manip-)150 4633 y(ulation.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 y Fp(\015)e Fs(2001-2020)k(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(Inc.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h(to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s(cumen)m(t)f (under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26 b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43 b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46 b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er)31 b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390 5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end %%Page: -1 3 TeXDict begin -1 2 bop 3725 -116 a Fs(i)150 299 y Fo(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 649 y Fr(1)135 b(In)l(tro)t (duction)31 b Fn(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)g(:)44 b Fr(1)150 927 y(2)135 b(ASN.1)45 b(structure)g(handling)34 b Fn(:)19 b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)47 b Fr(2)275 1064 y Fs(2.1)92 b(ASN.1)30 b(syn)m(tax)8 b Fm(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)22 b Fs(2)275 1174 y(2.2)92 b(Naming)26 b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)40 b Fs(3)275 1284 y(2.3)92 b(Simple)30 b(parsing)9 b Fm(:)15 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)23 b Fs(4)275 1393 y(2.4)92 b(Library)29 b(Notes)f Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)40 b Fs(4)275 1503 y(2.5)92 b(F)-8 b(uture)30 b(dev)m(elopmen)m(ts)10 b Fm(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)23 b Fs(4)150 1753 y Fr(3)135 b(Utilities)36 b Fn(:)20 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)47 b Fr(5)275 1890 y Fs(3.1)92 b(In)m(v)m(oking)31 b(asn1P)m(arser)24 b Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)37 b Fs(5)275 2000 y(3.2)92 b(In)m(v)m(oking)31 b(asn1Co)s(ding)26 b Fm(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)41 b Fs(5)275 2110 y(3.3)92 b(In)m(v)m(oking)31 b(asn1Deco)s(ding)26 b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)39 b Fs(6)150 2360 y Fr(4)135 b(F)-11 b(unction)44 b(reference)13 b Fn(:)20 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)f(:)26 b Fr(8)275 2497 y Fs(4.1)92 b(ASN.1)30 b(sc)m(hema)i(functions)22 b Fm(:)14 b(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)35 b Fs(8)275 2607 y(4.2)92 b(ASN.1)30 b(\014eld)g(functions)21 b Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)34 b Fs(8)275 2716 y(4.3)92 b(DER)30 b(functions)25 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)38 b Fs(15)275 2826 y(4.4)92 b(Error)29 b(handling)h(functions)12 b Fm(:)j(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)25 b Fs(22)275 2936 y(4.5)92 b(Auxilliary)31 b(functions)26 b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b Fs(23)150 3186 y Fr(App)t(endix)k(A) 119 b(Cop)l(ying)46 b(Information)11 b Fn(:)20 b(:)g(:)f(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)24 b Fr(24)275 3323 y Fs(A.1)91 b(GNU)31 b(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)10 b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)23 b Fs(24)150 3574 y Fr(Concept)45 b(Index)36 b Fn(:)19 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) h(:)49 b Fr(32)150 3852 y(F)-11 b(unction)44 b(and)h(Data)h(Index)16 b Fn(:)j(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)29 b Fr(33)p eop end %%Page: 1 4 TeXDict begin 1 3 bop 3705 -116 a Fs(1)150 299 y Fo(1)80 b(In)l(tro)t(duction)150 533 y Fs(This)27 b(do)s(cumen)m(t)h(describ)s (es)g(the)g(Libtasn1)g(library)g(that)h(pro)m(vides)f(Abstract)h(Syn)m (tax)f(Notation)i(One)150 643 y(\(ASN.1,)42 b(as)c(sp)s(eci\014ed)g(b)m (y)h(the)f(X.680)i(ITU-T)f(recommendation\))g(parsing)f(and)g (structures)g(man-)150 752 y(agemen)m(t,)g(and)c(Distinguished)h(Enco)s (ding)f(Rules)h(\(DER,)g(as)g(p)s(er)f(X.690\))j(enco)s(ding)e(and)f (deco)s(ding)150 862 y(functions.)275 996 y(The)29 b(main)i(features)f (of)h(this)f(library)g(are:)225 1131 y Fp(\017)60 b Fs(On-line)30 b(ASN.1)h(structure)f(managemen)m(t)i(that)f(do)s(esn't)f(require)g(an) m(y)h(C)f(co)s(de)g(\014le)h(generation.)225 1265 y Fp(\017)60 b Fs(O\013-line)30 b(ASN.1)f(structure)g(managemen)m(t)h(with)f(C)g(co) s(de)g(\014le)h(generation)g(con)m(taining)h(an)e(arra)m(y)-8 b(.)225 1400 y Fp(\017)60 b Fs(Distinguished)30 b(Enco)s(ding)g(Rules)g (\(DER\))i(enco)s(ding)e(supp)s(ort.)225 1534 y Fp(\017)60 b Fs(No)31 b(limits)g(for)f(INTEGER)g(and)g(ENUMERA)-8 b(TED)31 b(v)-5 b(alues.)225 1669 y Fp(\017)60 b Fs(It's)36 b(F)-8 b(ree)38 b(Soft)m(w)m(are.)59 b(An)m(yb)s(o)s(dy)35 b(can)h(use,)i(mo)s(dify)-8 b(,)38 b(and)d(redistribute)h(the)g (library)g(under)f(the)330 1778 y(terms)g(of)f(the)h(GNU)h(Lesser)e (General)i(Public)e(License)i(v)m(ersion)f(2.1)h(or)e(later.)55 b(The)34 b(command)330 1888 y(line)23 b(to)s(ols,)j(self-tests)e(and)e (build)g(infrastructure)f(are)j(licensed)f(under)e(the)i(GNU)h(General) f(Public)330 1998 y(License)31 b(v)m(ersion)g(3.0)g(or)g(later.)225 2132 y Fp(\017)60 b Fs(Thread-safet)m(y)-8 b(.)56 b(No)36 b(global)g(v)-5 b(ariables)36 b(are)f(used)g(and)f(m)m(ultiple)i (library)f(handles)f(and)h(session)330 2242 y(handles)30 b(ma)m(y)h(b)s(e)e(used)h(in)g(parallel.)225 2376 y Fp(\017)60 b Fs(P)m(ortabilit)m(y)-8 b(.)54 b(The)33 b(co)s(de)h(should)f(w)m(ork) h(on)g(all)g(Unix)g(lik)m(e)h(op)s(erating)f(systems,)h(and)f(Windo)m (ws.)330 2486 y(The)c(library)g(itself)h(should)e(b)s(e)h(p)s(ortable)h (to)g(an)m(y)f(C89)h(system,)g(not)g(ev)m(en)g(POSIX)e(is)h(required.)p eop end %%Page: 2 5 TeXDict begin 2 4 bop 3705 -116 a Fs(2)150 299 y Fo(2)80 b(ASN.1)53 b(structure)f(handling)150 639 y Fr(2.1)68 b(ASN.1)45 b(syn)l(tax)150 798 y Fs(The)30 b(parser)f(is)h(case)h (sensitiv)m(e.)42 b(The)30 b(commen)m(ts)h(b)s(egin)e(with)h Fl(--)g Fs(and)f(end)h(either)g(with)g(another)g Fl(--)p Fs(,)150 908 y(or)35 b(at)h(the)g(end)f(of)g(the)h(resp)s(ectiv)m(e)g (line,)h(whic)m(hev)m(er)f(comes)h(\014rst.)55 b(The)34 b(C-st)m(yle)j Fl(/*)p Fs(,)f Fl(*/)f Fs(commen)m(ts)150 1018 y(are)c(not)f(supp)s(orted.)275 1152 y(F)-8 b(or)31 b(an)f(example)h(of)g(the)f(syn)m(tax,)h(c)m(hec)m(k)h(the)f Fl(pkix.asn)d Fs(\014le)i(distributed)g(with)g(the)g(library)-8 b(.)275 1286 y(ASN.1)30 b(de\014nitions)g(m)m(ust)h(follo)m(w)g(the)g (syn)m(tax)g(b)s(elo)m(w:)436 1421 y Fl(definitions_name)44 b({})436 1640 y(DEFINITIONS)g()d(TAGS)h(::=)436 1859 y(BEGIN)436 2078 y()436 2298 y(END)275 2432 y Fs(The)39 b Fl(::=)g Fs(tok)m(en)i(m)m(ust)f(b)s(e)f(separate)i(from)f(other)g (elemen)m(ts,)k(so)c(the)g(follo)m(wing)h(declaration)h(is)150 2542 y(in)m(v)-5 b(alid:)533 2676 y Fl(--)47 b(INCORRECT)533 2786 y(Version)f(::=INTEGER)275 2920 y Fs(The)29 b(correct)j(form)e (is:)533 3054 y Fl(Version)46 b(::=)h(INTEGER)275 3189 y Fs(Here)30 b(is)h(the)f(list)h(of)g(t)m(yp)s(es)f(that)h(the)g (parser)f(can)g(manage:)225 3323 y Fp(\017)60 b Fl(INTEGER)p Fs(;)225 3458 y Fp(\017)g Fl(ENUMERATED)p Fs(;)225 3592 y Fp(\017)g Fl(BOOLEAN)p Fs(;)225 3727 y Fp(\017)g Fl(OBJECT)29 b(IDENTIFIER)p Fs(;)225 3861 y Fp(\017)60 b Fl(NULL)p Fs(;)225 3996 y Fp(\017)g Fl(BIT)29 b(STRING)p Fs(;)225 4130 y Fp(\017)60 b Fl(OCTET)29 b(STRING)p Fs(;)225 4264 y Fp(\017)60 b Fl(UTCTime)p Fs(;)225 4399 y Fp(\017)g Fl(GeneralizedTime)p Fs(;)225 4533 y Fp(\017)g Fl(GeneralString)p Fs(;)225 4668 y Fp(\017)g Fl(NumericString)p Fs(;)225 4802 y Fp(\017)g Fl(IA5String)p Fs(;)225 4937 y Fp(\017)g Fl(TeletexString)p Fs(;)225 5071 y Fp(\017)g Fl(PrintableString)p Fs(;)225 5206 y Fp(\017)g Fl(UniversalString)p Fs(;)225 5340 y Fp(\017)g Fl(BMPString)p Fs(;)p eop end %%Page: 3 6 TeXDict begin 3 5 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(ASN.1)31 b(structure)f(handling)2068 b(3)225 299 y Fp(\017)60 b Fl(UTF8String)p Fs(;)225 437 y Fp(\017)g Fl(VisibleString)p Fs(;)225 575 y Fp(\017)g Fl(SEQUENCE)p Fs(;)225 714 y Fp(\017)g Fl(SEQUENCE)28 b(OF)p Fs(;)225 852 y Fp(\017)60 b Fl(SET)p Fs(;)225 990 y Fp(\017)g Fl(SET)29 b(OF)p Fs(;)225 1128 y Fp(\017)60 b Fl(CHOICE)p Fs(;)225 1267 y Fp(\017)g Fl(ANY)p Fs(;)225 1405 y Fp(\017)g Fl(ANY)29 b(DEFINED)g(BY)p Fs(.)275 1576 y(This)42 b(v)m(ersion)j(do)s (esn't)e(handle)g(the)h Fl(REAL)f Fs(t)m(yp)s(e.)81 b(It)44 b(do)s(esn't)f(supp)s(ort)f(the)i Fl(AUTOMATIC)28 b(TAGS)150 1685 y Fs(option,)j(and)f(the)g Fl(EXPORT)f Fs(and)h Fl(IMPORT)f Fs(sections,)i(either.)275 1827 y(The)e Fl(SIZE)h Fs(constrain)m(ts)h(are)g(allo)m(w)m(ed,)h(but)e(no)g(c)m(hec)m(k)i(is) f(done)f(on)g(them.)150 2079 y Fr(2.2)68 b(Naming)150 2239 y Fs(Consider)30 b(this)g(de\014nition:)436 2381 y Fl(Example)46 b({)i(1)f(2)h(3)f(4)g(})436 2600 y(DEFINITIONS)e (EXPLICIT)h(TAGS)g(::=)436 2819 y(BEGIN)436 3038 y(Group)h(::=)g (SEQUENCE)e({)580 3148 y(id)142 b(OBJECT)46 b(IDENTIFIER,)580 3257 y(value)94 b(Value)436 3367 y(})436 3586 y(Value)47 b(::=)g(SEQUENCE)e({)580 3696 y(value1)93 b(INTEGER,)580 3805 y(value2)g(BOOLEAN)436 3915 y(})436 4134 y(END)275 4276 y Fs(The)68 b(notation)j(to)f(access)g(the)g(`)p Fl(Group)p Fs(')e(t)m(yp)s(e)i(of)f(the)h(`)p Fl(Example)p Fs(')d(de\014nition)i(ab)s(o)m(v)m(e)i(is)150 4386 y(`)p Fl(Example.Group)p Fs(')40 b(\(as)j(a)g(NUL-terminated)h(string.\))78 b(Suc)m(h)42 b(strings)h(are)g(used)f(in)g(the)h(functions)150 4495 y(describ)s(ed)29 b(b)s(elo)m(w.)275 4637 y(Others)g(examples:)225 4779 y Fp(\017)60 b Fs(\014eld)30 b(`)p Fl(id)p Fs(')g(of)h(the)f(`)p Fl(Group)p Fs(')g(t)m(yp)s(e:)41 b(`)p Fl(Example.Group.id)p Fs(';)225 4918 y Fp(\017)60 b Fs(\014eld)24 b(`)p Fl(value1)p Fs(')f(of)i(the)f(`)p Fl(value)p Fs(')g(\014eld)g(of)g(the)h(`)p Fl(Group)p Fs(')e(t)m(yp)s(e:)38 b(`)p Fl(Example.Group.value.value1)o Fs('.)275 5088 y(Elemen)m(ts)26 b(of)f(structured)g(t)m(yp)s(es)g (unnamed)f(b)m(y)i(the)f(resp)s(ectiv)m(e)i(de\014nition)e(receiv)m(e)i (the)f(names)f Fl(?1)p Fs(,)150 5198 y Fl(?2)p Fs(,)30 b(and)g(so)g(on.)275 5340 y(The)f Fl(?LAST)g Fs(name)i(indicates)g(the) g(last)g(elemen)m(t)h(of)e(a)h Fl(SET)e(OF)h Fs(or)h Fl(SEQUENCE)d(OF)p Fs(.)p eop end %%Page: 4 7 TeXDict begin 4 6 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(ASN.1)31 b(structure)f(handling)2068 b(4)150 299 y Fr(2.3)68 b(Simple)46 b(parsing)150 458 y Fs(F)-8 b(or)32 b(simple)f(t)m(yp)s(es)h(lik)m(e)g Fl(OCTET)d(STRING)h Fs(the)h(simple)g(parsing)g(functions)g(listed)h(b)s(elo)m(w)f(ma)m(y)h (b)s(e)f(used)150 568 y(instead.)225 702 y Fp(\017)60 b Fs([asn1)p 538 702 28 4 v 41 w(deco)s(de)p 849 702 V 40 w(simple)p 1142 702 V 40 w(der],)30 b(page)h(22,)225 837 y Fp(\017)60 b Fs([asn1)p 538 837 V 41 w(enco)s(de)p 849 837 V 40 w(simple)p 1142 837 V 40 w(der],)30 b(page)h(16,)150 1078 y Fr(2.4)68 b(Library)45 b(Notes)150 1237 y Fs(The)30 b(header)g(\014le)h(of)f(this)g(library)g(is)h Fl(libtasn1.h)p Fs(.)275 1372 y(The)d(main)g(t)m(yp)s(e)h(used)f(in)h(it)g(is)g Fl(asn1_node)p Fs(,)e(and)h(it's)h(used)f(to)i(store)f(the)g(ASN.1)g (de\014nitions)g(and)150 1481 y(structures)h(\(instances\).)275 1616 y(The)f Fl(NULL)h Fs(constan)m(t)h(can)g(b)s(e)f(used)f(for)h(the) h(v)-5 b(ariable)31 b(initialization.)44 b(F)-8 b(or)31 b(example:)438 1750 y Fl(asn1_node)45 b(definitions)g(=)i(NULL;)275 1885 y Fs(Some)35 b(functions)h(require)f(an)h Fl(errorDescription)31 b Fs(argumen)m(t)36 b(of)g(t)m(yp)s(e)g Fl(char)29 b(*)p Fs(,)37 b(p)s(oin)m(ting)f(to)h(a)150 1994 y(pre-allo)s(cated)f (bu\013er)c(of)i(at)h(least)g Fl(ASN1_MAX_ERROR_DESCRIPT)o(ION_)o(SIZ)o (E)28 b Fs(b)m(ytes)34 b(size)h(\(e.g.,)h(as)e(in)150 2104 y(`)p Fl(char)29 b(description[ASN1_MAX_ERROR)o(_DES)o(CRI)o(PTIO) o(N_SI)o(ZE])o(;)p Fs('\).)275 2238 y Fl(ASN1_MAX_NAME_SIZE)22 b Fs(is)28 b(the)h(maxim)m(um)e(n)m(um)m(b)s(er)g(of)h(c)m(haracters)h (allo)m(w)m(ed)h(for)e(an)g(ASN.1)g(iden-)150 2348 y(ti\014er.)150 2589 y Fr(2.5)68 b(F)-11 b(uture)44 b(dev)l(elopmen)l(ts)225 2748 y Fp(\017)60 b Fs(Add)27 b(functions)g(for)h(a)g(C)g(co)s(de)g (\014le)g(generation)h(con)m(taining)h(equiv)-5 b(alen)m(t)29 b(data)g(structures)e(\(not)i(a)330 2858 y(single)i(arra)m(y)g(lik)m(e) h(no)m(w\).)225 2992 y Fp(\017)60 b Fs(The)30 b Fl(REAL)f Fs(t)m(yp)s(e.)p eop end %%Page: 5 8 TeXDict begin 5 7 bop 3705 -116 a Fs(5)150 299 y Fo(3)80 b(Utilities)150 638 y Fr(3.1)68 b(In)l(v)l(oking)46 b(asn1P)l(arser)150 797 y Fl(asn1Parser)27 b Fs(reads)j(a)g(single)h(\014le)f(with)f(ASN.1) i(de\014nitions)e(and)h(generates)h(a)f(\014le)g(with)g(an)g(arra)m(y)g (to)150 907 y(use)g(with)g(libtasn1)h(functions.)150 1041 y Fl(Usage:)94 b(asn1Parser)45 b([options])g(file)150 1260 y(Options:)198 1370 y(-h)i(:)g(shows)g(the)g(help)f(message.)198 1480 y(-v)h(:)g(shows)g(version)f(information)e(and)j(exit.)198 1589 y(-c)g(:)g(checks)f(the)h(syntax)f(only.)198 1699 y(-o)h(file)g(:)g(output)f(file.)198 1808 y(-n)h(name)g(:)g(array)f (name.)150 2049 y Fr(3.2)68 b(In)l(v)l(oking)46 b(asn1Co)t(ding)150 2208 y Fl(asn1Coding)27 b Fs(generates)k(a)e(DER)h(enco)s(ding)f(from)g (a)h(\014le)g(with)f(ASN.1)h(de\014nitions)f(and)g(another)h(one)150 2318 y(with)g(assignmen)m(ts.)275 2452 y(The)f(\014le)i(with)f (assignmen)m(ts)h(m)m(ust)f(ha)m(v)m(e)i(this)e(syn)m(tax:)150 2586 y Fl(InstanceName)92 b(Asn1Definition)150 2806 y(nameString)h (value)150 3025 y(nameString)g(value)150 3134 y(...)275 3269 y Fs(T)-8 b(o)35 b(sp)s(ecify)f(the)h(\014eld)f(of)h(a)g Fl(CHOICE)d Fs(to)k(b)s(e)e(used,)h(sp)s(ecify)f(its)h(name)g(as)f(a)h (v)-5 b(alue)36 b(to)f(the)g Fl(CHOICE)150 3378 y Fs(elemen)m(t)d (itself.)41 b(Use)31 b Fl('')f Fs(to)h(denote)g(the)g(ro)s(ot)f(elemen) m(t)i(itself.)42 b(\(as)31 b(in)f(the)g(example)h(b)s(elo)m(w.\))275 3512 y(The)e(output)h(\014le)h(is)f(a)h(binary)f(\014le)g(with)g(the)h (DER)f(enco)s(ding.)150 3647 y Fl(Usage:)94 b(asn1Coding)45 b([options])g(file1)h(file2)198 3756 y(file1)g(:)i(file)e(with)h(ASN1)f (definitions.)198 3866 y(file2)g(:)i(file)e(with)h(assignments.)150 3976 y(Options:)198 4085 y(-h)g(:)g(shows)g(the)g(help)f(message.)198 4195 y(-v)h(:)g(shows)g(version)f(information)e(and)j(exit.)198 4304 y(-c)g(:)g(checks)f(the)h(syntax)f(only.)198 4414 y(-o)h(file)g(:)g(output)f(file.)275 4548 y Fs(F)-8 b(or)31 b(example,)g(consider)f(an)h(ASN.1)f(de\014nitions)g(\014le)h(as)f (follo)m(ws:)150 4682 y Fl(MYPKIX1)46 b({)h(})150 4902 y(DEFINITIONS)e(IMPLICIT)g(TAGS)i(::=)150 5121 y(BEGIN)150 5340 y(OtherStruct)e(:=)i(SEQUENCE)e({)p eop end %%Page: 6 9 TeXDict begin 6 8 bop 150 -116 a Fs(Chapter)30 b(3:)41 b(Utilities)2776 b(6)389 299 y Fl(x)333 b(INTEGER,)389 408 y(y)g(CHOICE)47 b({)580 518 y(y1)g(INTEGER,)580 628 y(y2)g(OCTET)f(STRING)g(},)150 737 y(})150 956 y(Dss-Sig-Value)e(::=)j (SEQUENCE)f({)389 1066 y(r)333 b(INTEGER,)389 1176 y(s)g(INTEGER,)389 1285 y(other)141 b(OtherStruct)389 1395 y(z)333 b(INTEGER)46 b(OPTIONAL,)150 1504 y(})150 1724 y(END)275 1868 y Fs(And)29 b(a)i(assignmen)m(ts)g(\014le)f(as)h(follo)m(ws:)150 2012 y Fl(dp)47 b(MYPKIX1.Dss-Sig-Value)150 2231 y(r)g(42)150 2341 y(s)g(47)150 2450 y(other.x)f(66)150 2560 y(other.y)g(y1)150 2670 y(other.y.y1)f(15)150 2779 y(z)i(\(NULL\))275 2923 y Fs(Running)32 b(the)h(command)h(b)s(elo)m(w)f(will)h(generate)h(a)f Fl(assign.out)d Fs(\014le,)j(con)m(taining)h(the)f(DER)g(en-)150 3033 y(co)s(ding)c(of)h Fl(PKIX1.Dss-Sig-Value)p Fs(.)150 3177 y Fl($)47 b(asn1Coding)e(pkix.asn)h(assign.asn1)275 3322 y Fs(If)38 b(the)h(ro)s(ot)h(elemen)m(t)g(is)f(of)h(the)f Fl(CHOICE)e Fs(t)m(yp)s(e,)42 b(the)d(assignmen)m(t)h(\014le)f(ma)m(y)h (b)s(e)e(lik)m(e)j(\(using)e(the)150 3431 y(t)m(yp)s(es)30 b(de\014ned)g(in)g Fl(pkix.asn)p Fs(\):)150 3575 y Fl(elt)47 b(PKIX1Implicit88.GeneralN)o(ame)150 3795 y('')286 b(dNSName)150 3904 y(dNSName)46 b(example.org)150 4160 y Fr(3.3)68 b(In)l(v)l(oking)46 b(asn1Deco)t(ding)150 4319 y Fl(asn1Decoding)20 b Fs(generates)25 b(an)f(ASN.1)g(structure)g(from)f(a)h(\014le)g(with)f (ASN.1)h(de\014nitions)f(and)h(a)g(binary)150 4429 y(\014le)30 b(with)h(a)f(DER)h(enco)s(ding.)150 4573 y Fl(Usage:)94 b(asn1Decoding)44 b([options])i(file1)g(file2)g(type)198 4682 y(file1)g(:)i(file)e(with)h(ASN1)f(definitions.)198 4792 y(file2)g(:)i(binary)e(file)g(with)h(a)g(DER)g(encoding.)198 4902 y(type)f(:)i(ASN1)e(definition)f(name.)150 5011 y(Options:)198 5121 y(-h)i(:)g(shows)g(the)g(help)f(message.)198 5230 y(-v)h(:)g(shows)g(version)f(information)e(and)j(exit.)198 5340 y(-o)g(file)g(:)g(output)f(file.)p eop end %%Page: 7 10 TeXDict begin 7 9 bop 3705 -116 a Fs(7)275 299 y(F)-8 b(or)47 b(example,)52 b(after)47 b(generating)h(the)f Fl(assign.out)d Fs(\014le)j(from)f(the)h(example)g(section)h(of)f(the) 150 408 y Fl(asn1Coding)28 b Fs(command)i(ab)s(o)m(v)m(e,)i(the)e (follo)m(wing)i(in)m(v)m(o)s(cation)g(will)f(deco)s(de)g(the)f(DER)h (data.)150 543 y Fl($)47 b(asn1Decoding)e(pkix.asn)g(assign.out)g (PKIX1.Dss-Sig-Value)p eop end %%Page: 8 11 TeXDict begin 8 10 bop 3705 -116 a Fs(8)150 299 y Fo(4)80 b(F)-13 b(unction)52 b(reference)150 686 y Fr(4.1)68 b(ASN.1)45 b(sc)l(hema)g(functions)150 911 y Fk(asn1)p 396 911 37 5 v 55 w(parser2tree)3350 1121 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_parser2tree)e Fi(\()p Fh(const)34 b(c)m(har)f(*)g Fg(file)p Fh(,)i(asn1)p 2311 1121 30 5 v 44 w(no)s(de)e(*)565 1230 y Fg(definitions)p Fh(,)j(c)m(har)e(*)f Fg(error_desc)p Fi(\))390 1340 y Ff(\014le)5 b Fs(:)41 b(sp)s(ecify)30 b(the)g(path)h(and)e(the)i(name)f (of)h(\014le)f(that)h(con)m(tains)h(ASN.1)f(declarations.)390 1488 y Ff(de\014nitions)t Fs(:)36 b(return)21 b(the)h(p)s(oin)m(ter)g (to)g(the)g(structure)g(created)h(from)e Fl(")p Fs(\014le)p Fl(")h Fs(ASN.1)g(declarations.)390 1636 y Ff(error)p 589 1636 28 4 v 40 w(desc)6 b Fs(:)40 b(return)29 b(the)i(error)f (description)g(or)h(an)f(empt)m(y)h(string)f(if)g(success.)390 1784 y(F)-8 b(unction)28 b(used)f(to)i(start)f(the)g(parse)g (algorithm.)41 b(Creates)28 b(the)g(structures)f(needed)g(to)i(manage) 390 1894 y(the)i(de\014nitions)e(included)h(in)g Fl(file)f Fs(\014le.)390 2042 y Fe(Returns:)39 b Fl(ASN1_SUCCESS)26 b Fs(if)i(the)h(\014le)g(has)f(a)h(correct)g(syn)m(tax)h(and)e(ev)m (ery)h(iden)m(ti\014er)g(is)f(kno)m(wn,)390 2151 y Fl (ASN1_ELEMENT_NOT_EMPTY)35 b Fs(if)41 b Fl(definitions)c Fs(not)k Fl(NULL)f Fs(,)k Fl(ASN1_FILE_NOT_FOUND)35 b Fs(if)41 b(an)390 2261 y(error)29 b(o)s(ccurred)f(while)i(op)s(ening)e Fl(file)g Fs(,)i Fl(ASN1_SYNTAX_ERROR)24 b Fs(if)30 b(the)f(syn)m(tax)h (is)f(not)h(correct,)390 2370 y Fl(ASN1_IDENTIFIER_NOT_FOUN)o(D)f Fs(if)35 b(in)f(the)h(\014le)g(there)h(is)f(an)f(iden)m(ti\014er)h (that)h(is)f(not)g(de\014ned,)390 2480 y Fl(ASN1_NAME_TOO_LONG)c Fs(if)36 b(in)g(the)h(\014le)f(there)g(is)h(an)f(iden)m(ti\014er)g (with)g(more)g(than)g Fl(ASN1_MAX_)390 2590 y(NAME_SIZE)28 b Fs(c)m(haracters.)150 2802 y Fk(asn1)p 396 2802 37 5 v 55 w(parser2arra)m(y)3350 3013 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_parser2array)e Fi(\()p Fh(const)34 b(c)m(har)g(*)f Fg(inputFileName)p Fh(,)k(const)c(c)m(har)h(*)565 3122 y Fg(outputFileName)p Fh(,)j(const)d(c)m(har)g(*)f Fg(vectorName)p Fh(,)j(c)m(har)e(*)f Fg(error_desc)p Fi(\))390 3232 y Ff(inputFileName)5 b Fs(:)49 b(sp)s(ecify)34 b(the)g(path)g(and)f(the)h(name)g(of)g(\014le)g(that)h(con)m(tains)g (ASN.1)g(declara-)390 3341 y(tions.)390 3489 y Ff(outputFileName)5 b Fs(:)41 b(sp)s(ecify)27 b(the)h(path)f(and)g(the)h(name)f(of)h (\014le)g(that)g(will)g(con)m(tain)h(the)e(C)g(v)m(ector)390 3599 y(de\014nition.)390 3747 y Ff(v)m(ectorName)5 b Fs(:)43 b(sp)s(ecify)30 b(the)h(name)f(of)h(the)f(C)g(v)m(ector.)390 3895 y Ff(error)p 589 3895 28 4 v 40 w(desc)6 b Fs(:)40 b(return)29 b(the)i(error)f(description)g(or)h(an)f(empt)m(y)h(string)f (if)g(success.)390 4043 y(F)-8 b(unction)42 b(that)g(generates)h(a)e(C) g(structure)g(from)g(an)g(ASN1)h(\014le.)73 b(Creates)42 b(a)g(\014le)f(con)m(tain-)390 4152 y(ing)k(a)h(C)f(v)m(ector)i(to)e (use)g(to)h(manage)g(the)g(de\014nitions)f(included)f(in)h Fl(inputFileName)d Fs(\014le.)390 4262 y(If)i Fl(inputFileName)e Fs(is)i Fl(")p Fs(/aa/bb/xx.yy)p Fl(")i Fs(and)e Fl(outputFileName)d Fs(is)k Fl(NULL)f Fs(,)k(the)d(\014le)g(cre-)390 4372 y(ated)g(is)f Fl(")p Fs(/aa/bb/xx)p 1188 4372 V 41 w(asn1)p 1406 4372 V 40 w(tab.c)p Fl(")p Fs(.)83 b(If)43 b Fl(vectorName)f Fs(is)i Fl(NULL)f Fs(the)h(v)m(ector)i(name)e(will)h(b)s(e)390 4481 y Fl(")p Fs(xx)p 540 4481 V 40 w(asn1)p 757 4481 V 40 w(tab)p Fl(")p Fs(.)390 4629 y Fe(Returns:)39 b Fl(ASN1_SUCCESS)26 b Fs(if)i(the)h(\014le)g(has)f(a)h(correct)g(syn)m (tax)h(and)e(ev)m(ery)h(iden)m(ti\014er)g(is)f(kno)m(wn,)390 4739 y Fl(ASN1_FILE_NOT_FOUND)35 b Fs(if)41 b(an)g(error)f(o)s(ccurred) g(while)h(op)s(ening)f Fl(inputFileName)d Fs(,)43 b Fl(ASN1_)390 4848 y(SYNTAX_ERROR)23 b Fs(if)k(the)f(syn)m(tax)i(is)e(not)h(correct,) i Fl(ASN1_IDENTIFIER_NOT_FOU)o(ND)20 b Fs(if)27 b(in)f(the)h(\014le)390 4958 y(there)35 b(is)g(an)g(iden)m(ti\014er)g(that)g(is)g(not)g (de\014ned,)g Fl(ASN1_NAME_TOO_LONG)30 b Fs(if)35 b(in)g(the)g(\014le)g (there)g(is)390 5068 y(an)30 b(iden)m(ti\014er)h(with)f(more)g(than)h Fl(ASN1_MAX_NAME_SIZE)25 b Fs(c)m(haracters.)150 5329 y Fr(4.2)68 b(ASN.1)45 b(\014eld)g(functions)p eop end %%Page: 9 12 TeXDict begin 9 11 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2359 b(9)150 299 y Fk(asn1)p 396 299 37 5 v 55 w(arra)m(y2tree)3350 517 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_array2tree)d Fi(\()p Fh(const)34 b(asn1)p 1686 517 30 5 v 44 w(static)p 1969 517 V 44 w(no)s(de)g(*)f Fg(array)p Fh(,)h(asn1)p 2853 517 V 44 w(no)s(de)g(*)565 626 y Fg(definitions)p Fh(,)i(c)m(har)e(*)f Fg(errorDescription)p Fi(\))390 736 y Ff(arra)m(y)8 b Fs(:)41 b(sp)s(ecify)30 b(the)h(arra)m(y)f(that)h(con)m(tains)h(ASN.1)f (declarations)390 891 y Ff(de\014nitions)t Fs(:)44 b(return)31 b(the)h(p)s(oin)m(ter)h(to)g(the)f(structure)g(created)h(b)m(y)f(*ARRA) -8 b(Y)34 b(ASN.1)f(declara-)390 1001 y(tions)390 1156 y Ff(errorDescription)p Fs(:)41 b(return)30 b(the)g(error)g (description.)390 1312 y(Creates)38 b(the)g(structures)f(needed)h(to)g (manage)h(the)f(ASN.1)g(de\014nitions.)62 b Fl(array)36 b Fs(is)i(a)g(v)m(ector)390 1421 y(created)31 b(b)m(y)g Fl(asn1_parser2array\(\))25 b Fs(.)390 1577 y Fe(Returns:)37 b Fl(ASN1_SUCCESS)20 b Fs(if)k(structure)f(w)m(as)h(created)h (correctly)-8 b(,)27 b Fl(ASN1_ELEMENT_NOT_EMPTY)390 1686 y Fs(if)34 b(*)g Fl(definitions)d Fs(not)j(NULL,)g Fl(ASN1_IDENTIFIER_NOT_FOUND)27 b Fs(if)34 b(in)g(the)g(\014le)g(there) g(is)g(an)390 1796 y(iden)m(ti\014er)k(that)h(is)f(not)h(de\014ned)e (\(see)i Fl(errorDescription)34 b Fs(for)k(more)g(information\),)j Fl(ASN1_)390 1906 y(ARRAY_ERROR)27 b Fs(if)k(the)f(arra)m(y)h(p)s(oin)m (ted)f(b)m(y)h Fl(array)e Fs(is)h(wrong.)150 2126 y Fk(asn1)p 396 2126 37 5 v 55 w(delete)p 769 2126 V 54 w(structure)3350 2344 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_delete_structure)f Fi(\()p Fh(asn1)p 1739 2344 30 5 v 45 w(no)s(de)33 b(*)g Fg(structure)p Fi(\))390 2453 y Ff(structure)5 b Fs(:)40 b(p)s(oin)m(ter)31 b(to)g(the)f(structure)g(that)h(y)m(ou)g(w)m(an)m(t) g(to)g(delete.)390 2609 y(Deletes)h(the)f(structure)f(*)h Fl(structure)c Fs(.)41 b(A)m(t)31 b(the)g(end,)f(*)h Fl(structure)d Fs(is)i(set)h(to)g(NULL.)390 2764 y Fe(Returns:)41 b Fl(ASN1_SUCCESS)27 b Fs(if)k(successful,)g Fl(ASN1_ELEMENT_NOT_FOUND) 25 b Fs(if)30 b(*)h Fl(structure)e Fs(w)m(as)390 2874 y(NULL.)150 3094 y Fk(asn1)p 396 3094 37 5 v 55 w(delete)p 769 3094 V 54 w(structure2)3350 3312 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_delete_structure)q(2)e Fi(\()p Fh(asn1)p 1791 3312 30 5 v 45 w(no)s(de)34 b(*)f Fg(structure)p Fh(,)i(unsigned)565 3421 y(in)m(t)e Fg(flags)p Fi(\))390 3531 y Ff(structure)5 b Fs(:)40 b(p)s(oin)m(ter)31 b(to)g(the)f (structure)g(that)h(y)m(ou)g(w)m(an)m(t)g(to)g(delete.)390 3686 y Ff(\015ags)t Fs(:)41 b(additional)31 b(\015ags)g(\(see)g Fl(ASN1_DELETE_FLAG)26 b Fs(\))390 3842 y(Deletes)32 b(the)f(structure)f(*)h Fl(structure)c Fs(.)41 b(A)m(t)31 b(the)g(end,)f(*)h Fl(structure)d Fs(is)i(set)h(to)g(NULL.)390 3997 y Fe(Returns:)41 b Fl(ASN1_SUCCESS)27 b Fs(if)k(successful,)g Fl(ASN1_ELEMENT_NOT_FOUND)25 b Fs(if)30 b(*)h Fl(structure)e Fs(w)m(as)390 4107 y(NULL.)150 4327 y Fk(asn1)p 396 4327 37 5 v 55 w(delete)p 769 4327 V 54 w(elemen)m(t)3350 4545 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_delete_element)e Fi(\()p Fh(asn1)p 1634 4545 30 5 v 45 w(no)s(de)34 b Fg(structure)p Fh(,)h(const)f(c)m(har)g(*)565 4654 y Fg(element_name)p Fi(\))390 4764 y Ff(structure)5 b Fs(:)40 b(p)s(oin)m(ter)31 b(to)g(the)f(structure)g(that)h(con)m(tains)h(the)e (elemen)m(t)i(y)m(ou)f(w)m(an)m(t)g(to)g(delete.)390 4919 y Ff(elemen)m(t)p 700 4919 28 4 v 42 w(name)5 b Fs(:)40 b(elemen)m(t's)32 b(name)f(y)m(ou)g(w)m(an)m(t)g(to)g(delete.) 390 5075 y(Deletes)h(the)f(elemen)m(t)h(named)e(*)h Fl(element_name)c Fs(inside)j(*)g Fl(structure)e Fs(.)390 5230 y Fe(Returns:)37 b Fl(ASN1_SUCCESS)19 b Fs(if)k(successful,)i Fl(ASN1_ELEMENT_NOT_FOUND) 17 b Fs(if)23 b(the)g Fl(element_name)390 5340 y Fs(w)m(as)31 b(not)f(found.)p eop end %%Page: 10 13 TeXDict begin 10 12 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(10)150 299 y Fk(asn1)p 396 299 37 5 v 55 w(create)p 776 299 V 53 w(elemen)m(t)3350 492 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_create_element)e Fi(\()p Fh(asn1)p 1634 492 30 5 v 45 w(no)s(de)p 1886 492 V 44 w(const)34 b Fg(definitions)p Fh(,)i(const)565 602 y(c)m(har)e(*)f Fg(source_name)p Fh(,)j(asn1)p 1704 602 V 44 w(no)s(de)e(*)f Fg(element)p Fi(\))390 712 y Ff(de\014nitions)t Fs(:)40 b(p)s(oin)m(ter)30 b(to)h(the)g(structure)f (returned)f(b)m(y)h Fl(")p Fs(parser)p 2633 712 28 4 v 40 w(asn1)p Fl(")g Fs(function)390 845 y Ff(source)p 644 845 V 40 w(name)5 b Fs(:)39 b(the)25 b(name)g(of)g(the)h(t)m(yp)s (e)f(of)h(the)f(new)g(structure)f(\(m)m(ust)i(b)s(e)e(inside)h(p)p 3296 845 V 40 w(structure\).)390 977 y Ff(elemen)m(t)r Fs(:)42 b(p)s(oin)m(ter)31 b(to)g(the)f(structure)g(created.)390 1110 y(Creates)h(a)g(structure)f(of)g(t)m(yp)s(e)h Fl(source_name)c Fs(.)41 b(Example)30 b(using)g Fl(")p Fs(pkix.asn)p Fl(")p Fs(:)390 1243 y(rc)g(=)g(asn1)p 780 1243 V 41 w(create)p 1057 1243 V 41 w(elemen)m(t\(cert)p 1588 1243 V 43 w(def,)g Fl(")p Fs(PKIX1.Certi\014cate)p Fl(")p Fs(,)i(certptr\);)390 1376 y Fe(Returns:)53 b Fl(ASN1_SUCCESS)34 b Fs(if)i(creation)i(OK,)f Fl(ASN1_ELEMENT_NOT_FOUND)30 b Fs(if)37 b Fl(source_name)390 1486 y Fs(is)30 b(not)h(kno)m(wn.)150 1682 y Fk(asn1)p 396 1682 37 5 v 55 w(prin)m(t)p 716 1682 V 54 w(structure)3350 1875 y Fs([F)-8 b(unction])-3599 b Fj(void)54 b(asn1_print_structure)d Fi(\()p Fh(FILE)34 b(*)f Fg(out)p Fh(,)g(asn1)p 2304 1875 30 5 v 45 w(no)s(de)p 2556 1875 V 44 w(const)565 1985 y Fg(structure)p Fh(,)j(const)d(c)m(har)h(*)f Fg(name)p Fh(,)h(in)m(t)g Fg(mode)p Fi(\))390 2095 y Ff(out)r Fs(:)41 b(p)s(oin)m(ter)30 b(to)h(the)g(output)f(\014le)g(\(e.g.)43 b(stdout\).)390 2228 y Ff(structure)5 b Fs(:)40 b(p)s(oin)m(ter)31 b(to)g(the)f(structure)g(that)h(y)m(ou)g(w)m(an)m(t)g(to)g(visit.)390 2360 y Ff(name)5 b Fs(:)41 b(an)30 b(elemen)m(t)i(of)f(the)f(structure) 390 2493 y Ff(mo)s(de)5 b Fs(:)40 b(sp)s(ecify)30 b(ho)m(w)h(m)m(uc)m (h)f(of)h(the)f(structure)g(to)h(prin)m(t,)f(can)h(b)s(e)f Fl(ASN1_PRINT_NAME)c Fs(,)k Fl(ASN1_)390 2603 y(PRINT_NAME_TYPE)c Fs(,)31 b Fl(ASN1_PRINT_NAME_TYPE_VA)o(LUE)24 b Fs(,)31 b(or)f Fl(ASN1_PRINT_ALL)c Fs(.)390 2736 y(Prin)m(ts)33 b(on)g(the)g Fl(out)f Fs(\014le)h(descriptor)f(the)h(structure's)g (tree)h(starting)f(from)g(the)g Fl(name)e Fs(elemen)m(t)390 2845 y(inside)f(the)h(structure)f Fl(structure)d Fs(.)150 3042 y Fk(asn1)p 396 3042 37 5 v 55 w(n)m(um)m(b)s(er)p 860 3042 V 54 w(of)p 1012 3042 V 55 w(elemen)m(ts)3350 3235 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_number_of_elemen)q (ts)f Fi(\()p Fh(asn1)p 1844 3235 30 5 v 44 w(no)s(de)p 2095 3235 V 45 w(const)33 b Fg(element)p Fh(,)i(const)565 3345 y(c)m(har)f(*)f Fg(name)p Fh(,)h(in)m(t)f(*)g Fg(num)p Fi(\))390 3454 y Ff(elemen)m(t)r Fs(:)42 b(p)s(oin)m(ter)31 b(to)g(the)f(ro)s(ot)h(of)f(an)h(ASN1)f(structure.)390 3587 y Ff(name)5 b Fs(:)41 b(the)30 b(name)h(of)f(a)h(sub-structure)e (of)i(R)m(OOT.)390 3720 y Ff(n)m(um)p Fs(:)40 b(p)s(oin)m(ter)30 b(to)h(an)g(in)m(teger)g(where)f(the)h(result)f(will)h(b)s(e)f(stored) 390 3853 y(Coun)m(ts)e(the)h(n)m(um)m(b)s(er)e(of)h(elemen)m(ts)i(of)f (a)f(sub-structure)f(called)j(NAME)f(with)f(names)g(equal)h(to)390 3963 y Fl(")p Fs(?1)p Fl(")p Fs(,)p Fl(")p Fs(?2)p Fl(")p Fs(,)h(...)390 4096 y Fe(Returns:)36 b Fl(ASN1_SUCCESS)18 b Fs(if)k(successful,)h Fl(ASN1_ELEMENT_NOT_FOUND)15 b Fs(if)22 b Fl(name)e Fs(is)h(not)h(kno)m(wn,)390 4205 y Fl(ASN1_GENERIC_ERROR)j Fs(if)31 b(p)s(oin)m(ter)f Fl(num)g Fs(is)g Fl(NULL)f Fs(.)150 4401 y Fk(asn1)p 396 4401 37 5 v 55 w(\014nd)p 655 4401 V 54 w(structure)p 1200 4401 V 54 w(from)p 1504 4401 V 55 w(oid)3350 4595 y Fs([F)-8 b(unction])-3599 b Fj(const)54 b(char)f(*)g (asn1_find_structure_fr)q(om_)q(oid)f Fi(\()p Fh(asn1)p 2576 4595 30 5 v 44 w(no)s(de)p 2827 4595 V 45 w(const)565 4704 y Fg(definitions)p Fh(,)36 b(const)e(c)m(har)g(*)f Fg(oidValue)p Fi(\))390 4814 y Ff(de\014nitions)t Fs(:)40 b(ASN1)31 b(de\014nitions)390 4947 y Ff(oidV)-8 b(alue)5 b Fs(:)42 b(v)-5 b(alue)31 b(of)g(the)f(OID)g(to)i(searc)m(h)f(\(e.g.) 42 b Fl(")p Fs(1.2.3.4)p Fl(")p Fs(\).)390 5080 y(Searc)m(h)31 b(the)f(structure)g(that)h(is)g(de\014ned)e(just)g(after)i(an)g(OID)f (de\014nition.)390 5213 y Fe(Returns:)41 b Fl(NULL)29 b Fs(when)h Fl(oidValue)e Fs(not)j(found,)e(otherwise)i(the)g(p)s(oin)m (ter)g(to)g(a)g(constan)m(t)h(string)390 5322 y(that)f(con)m(tains)h (the)e(elemen)m(t)i(name)e(de\014ned)g(just)f(after)i(the)g(OID.)p eop end %%Page: 11 14 TeXDict begin 11 13 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(11)150 299 y Fk(asn1)p 396 299 37 5 v 55 w(cop)m(y)p 697 299 V 53 w(no)s(de)3350 500 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_copy_node)d Fi(\()p Fh(asn1)p 1373 500 30 5 v 44 w(no)s(de)34 b Fg(dst)p Fh(,)g(const)g(c)m(har)g(*)f Fg(dst_name)p Fh(,)565 609 y(asn1)p 766 609 V 44 w(no)s(de)p 1017 609 V 45 w(const)g Fg(src)p Fh(,)h(const)g(c)m(har)g(*)f Fg(src_name)p Fi(\))390 719 y Ff(dst)r Fs(:)40 b(Destination)32 b(asn1)f(no)s(de.)390 858 y Ff(dst)p 518 858 28 4 v 40 w(name)5 b Fs(:)41 b(Field)31 b(name)f(in)g(destination)h(no)s(de.)390 996 y Ff(src)6 b Fs(:)40 b(Source)30 b(asn1)h(no)s(de.)390 1135 y Ff(src)p 508 1135 V 40 w(name)5 b Fs(:)41 b(Field)31 b(name)f(in)g(source)h(no)s (de.)390 1274 y(Create)39 b(a)f(deep)g(cop)m(y)h(of)f(a)g(asn1)p 1591 1274 V 40 w(no)s(de)g(v)-5 b(ariable.)64 b(That)38 b(function)g(requires)f Fl(dst)g Fs(to)i(b)s(e)e(ex-)390 1384 y(panded)29 b(using)h Fl(asn1_create_element\(\))25 b Fs(.)390 1522 y Fe(Returns:)40 b Fs(Return)30 b Fl(ASN1_SUCCESS)d Fs(on)j(success.)150 1726 y Fk(asn1)p 396 1726 37 5 v 55 w(dup)p 655 1726 V 54 w(no)s(de)3350 1927 y Fs([F)-8 b(unction])-3599 b Fj(asn1_node)55 b(asn1_dup_node)49 b Fi(\()p Fh(asn1)p 1634 1927 30 5 v 45 w(no)s(de)p 1886 1927 V 44 w(const)34 b Fg(src)p Fh(,)g(const)f(c)m(har)h(*)565 2036 y Fg(src_name)p Fi(\))390 2146 y Ff(src)6 b Fs(:)40 b(Source)30 b(asn1)h(no)s(de.)390 2285 y Ff(src)p 508 2285 28 4 v 40 w(name)5 b Fs(:)41 b(Field)31 b(name)f(in)g(source)h(no) s(de.)390 2423 y(Create)h(a)f(deep)g(cop)m(y)h(of)g(a)f(asn1)p 1550 2423 V 40 w(no)s(de)g(v)-5 b(ariable.)44 b(This)30 b(function)h(will)g(return)f(an)i(exact)g(cop)m(y)390 2533 y(of)f(the)f(pro)m(vided)g(structure.)390 2672 y Fe(Returns:)40 b Fs(Return)30 b Fl(NULL)f Fs(on)h(failure.)150 2875 y Fk(asn1)p 396 2875 37 5 v 55 w(write)p 728 2875 V 53 w(v)-7 b(alue)3350 3076 y Fs([F)f(unction])-3599 b Fj(int)53 b(asn1_write_value)e Fi(\()p Fh(asn1)p 1478 3076 30 5 v 44 w(no)s(de)34 b Fg(node_root)p Fh(,)h(const)f(c)m(har)g (*)f Fg(name)p Fh(,)565 3186 y(const)h(v)m(oid)f(*)g Fg(ivalue)p Fh(,)h(in)m(t)g Fg(len)p Fi(\))390 3295 y Ff(no)s(de)p 586 3295 28 4 v 39 w(ro)s(ot)r Fs(:)41 b(p)s(oin)m(ter)31 b(to)g(a)g(structure)390 3434 y Ff(name)5 b Fs(:)41 b(the)30 b(name)h(of)f(the)h(elemen)m(t)h(inside)e(the)g(structure)g(that)h(y)m (ou)g(w)m(an)m(t)g(to)g(set.)390 3573 y Ff(iv)-5 b(alue)5 b Fs(:)45 b(v)m(ector)34 b(used)e(to)h(sp)s(ecify)f(the)g(v)-5 b(alue)33 b(to)g(set.)47 b(If)32 b(len)g(is)h Fl(>)p Fs(0,)g(V)-10 b(ALUE)32 b(m)m(ust)g(b)s(e)g(a)g(t)m(w)m(o's)390 3682 y(complemen)m(t)k(form)e(in)m(teger.)56 b(if)35 b(len=0)g(*V)-10 b(ALUE)35 b(m)m(ust)g(b)s(e)f(a)h(n)m(ull)g (terminated)g(string)g(with)390 3792 y(an)30 b(in)m(teger)i(v)-5 b(alue.)390 3931 y Ff(len)p Fs(:)53 b(n)m(um)m(b)s(er)35 b(of)i(b)m(ytes)g(of)g(*v)-5 b(alue)38 b(to)f(use)f(to)h(set)h(the)e(v) -5 b(alue:)54 b(v)-5 b(alue[0]..v)g(alue[len-1])40 b(or)d(0)g(if)390 4040 y(v)-5 b(alue)31 b(is)f(a)h(n)m(ull)f(terminated)h(string)390 4179 y(Set)g(the)f(v)-5 b(alue)31 b(of)g(one)f(elemen)m(t)i(inside)e(a) h(structure.)390 4318 y(If)23 b(an)g(elemen)m(t)i(is)e(OPTIONAL)f(and)g (y)m(ou)i(w)m(an)m(t)g(to)g(delete)g(it,)i(y)m(ou)d(m)m(ust)g(use)g (the)h(v)-5 b(alue=NULL)390 4427 y(and)30 b(len=0.)41 b(Using)30 b Fl(")p Fs(pkix.asn)p Fl(")p Fs(:)390 4566 y(result=asn1)p 867 4566 V 40 w(write)p 1109 4566 V 40 w(v)-5 b(alue\(cert,)32 b Fl(")p Fs(tbsCerti\014cate.issuerUniqueID)p Fl(")p Fs(,)f(NULL,)g(0\);)390 4705 y(Description)g(for)f(eac)m(h)i(t)m (yp)s(e:)390 4843 y Fe(INTEGER:)f Fs(V)-10 b(ALUE)30 b(m)m(ust)g(con)m(tain)i(a)f(t)m(w)m(o's)h(complemen)m(t)f(form)f(in)m (teger.)390 4982 y(v)-5 b(alue[0]=0xFF)52 b(,)e(len=1)g(-)p Fl(>)g Fs(in)m(teger=-1.)101 b(v)-5 b(alue[0]=0xFF)52 b(v)-5 b(alue[1]=0xFF)52 b(,)e(len=2)g(-)p Fl(>)390 5092 y Fs(in)m(teger=-1.)85 b(v)-5 b(alue[0]=0x01)46 b(,)i(len=1)d(-)p Fl(>)f Fs(in)m(teger=)i(1.)83 b(v)-5 b(alue[0]=0x00)47 b(v)-5 b(alue[1]=0x01)47 b(,)390 5201 y(len=2)31 b(-)p Fl(>)f Fs(in)m(teger=)h(1.)42 b(v)-5 b(alue=)p Fl(")p Fs(123)p Fl(")31 b Fs(,)f(len=0)h(-)p Fl(>)f Fs(in)m(teger=)i(123.)390 5340 y Fe(ENUMERA)-8 b(TED:)30 b Fs(As)g(INTEGER)g(\(but)g(only)h(with) f(not)g(negativ)m(e)j(n)m(um)m(b)s(ers\).)p eop end %%Page: 12 15 TeXDict begin 12 14 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(12)390 299 y Fe(BOOLEAN:)33 b Fs(V)-10 b(ALUE)35 b(m)m(ust)f(b)s(e)f(the)i(n)m(ull)f(terminated)g (string)h Fl(")p Fs(TR)m(UE)p Fl(")e Fs(or)h Fl(")p Fs(F)-10 b(ALSE)p Fl(")34 b Fs(and)390 408 y(LEN)c(!=)g(0.)390 539 y(v)-5 b(alue=)p Fl(")p Fs(TR)m(UE)p Fl(")88 b Fs(,)103 b(len=1)89 b(-)p Fl(>)g Fs(b)s(o)s(olean=TR)m(UE.)f(v)-5 b(alue=)p Fl(")p Fs(F)-10 b(ALSE)p Fl(")88 b Fs(,)103 b(len=1)89 b(-)p Fl(>)390 649 y Fs(b)s(o)s(olean=F)-10 b(ALSE.)390 779 y(OBJECT)26 b(IDENTIFIER:)h(V)-10 b(ALUE)27 b(m)m(ust)g(b)s(e)g(a)g(n)m(ull)g(terminated)h(string)f(with)g(eac)m(h) h(n)m(um)m(b)s(er)390 889 y(separated)j(b)m(y)f(a)h(dot)f(\(e.g.)43 b Fl(")p Fs(1.2.3.543.1)p Fl(")p Fs(\).)h(LEN)30 b(!=)h(0.)390 1019 y(v)-5 b(alue=)p Fl(")p Fs(1)31 b(2)f(840)i(10040)h(4)d(3)p Fl(")h Fs(,)g(len=1)f(-)p Fl(>)g Fs(OID=dsa-with-sha.)390 1149 y Fe(UTCTime:)84 b Fs(V)-10 b(ALUE)53 b(m)m(ust)f(b)s(e)f(a)i(n)m (ull)f(terminated)g(string)g(in)g(one)h(of)f(these)g(formats:)390 1259 y Fl(")p Fs(YYMMDDhhmmssZ)p Fl(")p Fs(,)118 b Fl(")p Fs(YYMMDDhhmmssZ)p Fl(")p Fs(,)g Fl(")p Fs(YYMMDDhhmmss)p Fl(+)p Fs(hh'mm')p Fl(")p Fs(,)390 1369 y Fl(")p Fs (YYMMDDhhmmss-hh'mm')p Fl(")p Fs(,)40 b Fl(")p Fs(YYMMDDhhmm)p Fl(+)p Fs(hh'mm')p Fl(")p Fs(,)g(or)f Fl(")p Fs(YYMMDDhhmm-)390 1478 y(hh'mm')p Fl(")p Fs(.)g(LEN)31 b(!=)f(0.)390 1609 y(v)-5 b(alue=)p Fl(")p Fs(9801011200Z)p Fl(")43 b Fs(,)f(len=1)e(-)p Fl(>)f Fs(time=Jann)m(uary)g(1st,)k(1998)e(at)f(12h)g(00m)g(Green)m (wic)m(h)390 1718 y(Mean)31 b(Time)390 1849 y Fe(GeneralizedTime:)94 b Fs(V)-10 b(ALUE)56 b(m)m(ust)f(b)s(e)h(in)f(one)h(of)g(this)g (format:)92 b Fl(")p Fs(YYYYMMDDhh-)390 1958 y(mmss.sZ)p Fl(")p Fs(,)185 b Fl(")p Fs(YYYYMMDDhhmmss.sZ)p Fl(")p Fs(,)h Fl(")p Fs(YYYYMMDDhhmmss.s)p Fl(+)p Fs(hh'mm')p Fl(")p Fs(,)390 2068 y Fl(")p Fs(YYYYMMDDhhmmss.s-hh'mm')p Fl(")p Fs(,)279 b Fl(")p Fs(YYYYMMDDhhmm)p Fl(+)p Fs(hh'mm')p Fl(")p Fs(,)g(or)390 2178 y Fl(")p Fs(YYYYMMDDhhmm-hh'mm')p Fl(")36 b Fs(where)h(ss.s)f(indicates)i(the)f(seconds)f(with)h(an)m(y)g (precision)390 2287 y(lik)m(e)32 b Fl(")p Fs(10.1)p Fl(")f Fs(or)f Fl(")p Fs(01.02)p Fl(")p Fs(.)43 b(LEN)30 b(!=)g(0)390 2418 y(v)-5 b(alue=)p Fl(")p Fs(2001010112001.1)q(2-0)q(70)q(0)p Fl(")50 b Fs(,)e(len=1)c(-)p Fl(>)h Fs(time=Jann)m(uary)e(1st,)49 b(2001)d(at)f(12h)f(00m)390 2527 y(01.12s)32 b(P)m(aci\014c)g(Da)m (yligh)m(t)h(Time)390 2658 y(OCTET)22 b(STRING:)h(V)-10 b(ALUE)23 b(con)m(tains)h(the)g(o)s(ctet)g(string)g(and)e(LEN)h(is)h (the)f(n)m(um)m(b)s(er)f(of)h(o)s(ctets.)390 2788 y(v)-5 b(alue=)p Fl(")p Fs($)p Fl(\\)p Fs(bac)m(kslash$x01$)p Fl(\\)p Fs(bac)m(kslash$x02$)p Fl(\\)p Fs(bac)m(kslash$x03)q Fl(")62 b Fs(,)g(len=3)57 b(-)p Fl(>)f Fs(three)g(b)m(ytes)390 2898 y(o)s(ctet)32 b(string)390 3028 y Fe(GeneralString:)42 b Fs(V)-10 b(ALUE)30 b(con)m(tains)h(the)g(generalstring)g(and)f(LEN)g (is)g(the)g(n)m(um)m(b)s(er)f(of)h(o)s(ctets.)390 3159 y(v)-5 b(alue=)p Fl(")p Fs($)p Fl(\\)p Fs(bac)m(kslash$x01$)p Fl(\\)p Fs(bac)m(kslash$x02$)p Fl(\\)p Fs(bac)m(kslash$x03)q Fl(")62 b Fs(,)g(len=3)57 b(-)p Fl(>)f Fs(three)g(b)m(ytes)390 3268 y(generalstring)390 3399 y(BIT)39 b(STRING:)g(V)-10 b(ALUE)39 b(con)m(tains)h(the)g(bit)f(string)g(organized)h(b)m(y)f(b)m (ytes)h(and)f(LEN)g(is)g(the)390 3508 y(n)m(um)m(b)s(er)29 b(of)i(bits.)390 3639 y(v)-5 b(alue=)p Fl(")p Fs($)p Fl(\\)p Fs(bac)m(kslash$xCF)p Fl(")31 b Fs(,)g(len=6)g(-)p Fl(>)f Fs(bit)g(string=)p Fl(")p Fs(110011)p Fl(")j Fs(\(six)d(bits\)) 390 3769 y Fe(CHOICE:)f Fs(if)g(NAME)g(indicates)h(a)g(c)m(hoice)g(t)m (yp)s(e,)g(V)-10 b(ALUE)29 b(m)m(ust)g(sp)s(ecify)g(one)g(of)g(the)h (alterna-)390 3879 y(tiv)m(es)i(with)e(a)g(n)m(ull)h(terminated)g (string.)40 b(LEN)31 b(!=)f(0.)41 b(Using)30 b Fl(")p Fs(pkix.asn)p Fl("\\)p Fs(:)390 4009 y(result=asn1)p 867 4009 28 4 v 40 w(write)p 1109 4009 V 40 w(v)-5 b(alue\(cert,)74 b Fl(")p Fs(certi\014cate1.tbsCerti\014cate.sub)5 b(ject)p Fl(")p Fs(,)76 b Fl(")p Fs(rdnSequence)p Fl(")p Fs(,)390 4119 y(1\);)390 4249 y Fe(ANY:)30 b Fs(V)-10 b(ALUE)31 b(indicates)g(the)f(der)g(enco)s(ding)h(of)f(a)h(structure.)40 b(LEN)30 b(!=)h(0.)390 4380 y(SEQUENCE)i(OF:)h(V)-10 b(ALUE)34 b(m)m(ust)g(b)s(e)g(the)g(n)m(ull)g(terminated)h(string)f Fl(")p Fs(NEW)p Fl(")g Fs(and)f(LEN)h(!=)390 4489 y(0.)46 b(With)32 b(this)g(instruction)g(another)g(elemen)m(t)i(is)e(app)s (ended)e(in)h(the)i(sequence.)45 b(The)32 b(name)g(of)390 4599 y(this)e(elemen)m(t)i(will)f(b)s(e)f Fl(")p Fs(?1)p Fl(")g Fs(if)g(it's)h(the)g(\014rst)e(one,)i Fl(")p Fs(?2)p Fl(")f Fs(for)g(the)h(second)f(and)g(so)h(on.)390 4729 y(Using)g Fl(")p Fs(pkix.asn)p Fl("\\)p Fs(:)390 4860 y(result=asn1)p 867 4860 V 40 w(write)p 1109 4860 V 40 w(v)-5 b(alue\(cert,)241 b Fl(")p Fs (certi\014cate1.tbsCerti\014cate.sub)5 b(ject.rdnSequence)p Fl(")p Fs(,)390 4969 y Fl(")p Fs(NEW)p Fl(")p Fs(,)30 b(1\);)390 5100 y(SET)f(OF:)i(the)g(same)f(as)h(SEQUENCE)e(OF.)i(Using) f Fl(")p Fs(pkix.asn)p Fl(")p Fs(:)390 5230 y(result=asn1)p 867 5230 V 40 w(write)p 1109 5230 V 40 w(v)-5 b(alue\(cert,)25 b Fl(")p Fs(tbsCerti\014cate.sub)5 b(ject.rdnSequence.?LAST)p Fl(")p Fs(,)22 b Fl(")p Fs(NEW)p Fl(")p Fs(,)390 5340 y(1\);)p eop end %%Page: 13 16 TeXDict begin 13 15 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(13)390 299 y Fe(Returns:)38 b Fl(ASN1_SUCCESS)21 b Fs(if)k(the)g(v)-5 b(alue)26 b(w)m(as)f(set,)i Fl(ASN1_ELEMENT_NOT_FOUND)19 b Fs(if)25 b Fl(name)f Fs(is)h(not)390 408 y(a)31 b(v)-5 b(alid)30 b(elemen)m(t,)j(and)c Fl (ASN1_VALUE_NOT_VALID)c Fs(if)31 b Fl(ivalue)d Fs(has)i(a)h(wrong)f (format.)150 615 y Fk(asn1)p 396 615 37 5 v 55 w(read)p 685 615 V 54 w(v)-7 b(alue)3350 819 y Fs([F)f(unction])-3599 b Fj(int)53 b(asn1_read_value)d Fi(\()p Fh(asn1)p 1425 819 30 5 v 45 w(no)s(de)p 1677 819 V 44 w(const)34 b Fg(root)p Fh(,)g(const)g(c)m(har)f(*)g Fg(name)p Fh(,)565 928 y(v)m(oid)g(*)g Fg(ivalue)p Fh(,)i(in)m(t)e(*)g Fg(len)p Fi(\))390 1038 y Ff(ro)s(ot)r Fs(:)41 b(p)s(oin)m(ter)30 b(to)i(a)e(structure.)390 1179 y Ff(name)5 b Fs(:)41 b(the)30 b(name)h(of)f(the)h(elemen)m(t)h(inside)e(a)h(structure)f (that)h(y)m(ou)f(w)m(an)m(t)h(to)h(read.)390 1321 y Ff(iv)-5 b(alue)5 b Fs(:)45 b(v)m(ector)34 b(that)e(will)h(con)m(tain)g(the)g (elemen)m(t's)g(con)m(ten)m(t,)i(m)m(ust)d(b)s(e)g(a)g(p)s(oin)m(ter)g (to)h(memory)390 1431 y(cells)e(already)g(allo)s(cated)i(\(ma)m(y)e(b)s (e)f Fl(NULL)f Fs(\).)390 1572 y Ff(len)p Fs(:)41 b(n)m(um)m(b)s(er)29 b(of)h(b)m(ytes)h(of)g(*v)-5 b(alue:)41 b(v)-5 b(alue[0]..v)g (alue[len-1].)45 b(Initialy)31 b(holds)f(the)h(sizeof)g(v)-5 b(alue.)390 1714 y(Returns)25 b(the)h(v)-5 b(alue)27 b(of)f(one)g(elemen)m(t)i(inside)d(a)i(structure.)39 b(If)25 b(an)h(elemen)m(t)i(is)e(OPTIONAL)f(and)390 1823 y(this)j(returns)f Fl(ASN1_ELEMENT_NOT_FOUND)22 b Fs(,)29 b(it)f(means)g(that)h(this)f(elemen)m(t)i(w)m(asn't)e(presen)m(t)g(in) 390 1933 y(the)j(der)e(enco)s(ding)i(that)g(created)g(the)f(structure.) 41 b(The)29 b(\014rst)h(elemen)m(t)i(of)e(a)h(SEQUENCE)p 3587 1933 28 4 v 39 w(OF)390 2043 y(or)c(SET)p 683 2043 V 39 w(OF)g(is)g(named)f Fl(")p Fs(?1)p Fl(")p Fs(.)40 b(The)26 b(second)h(one)g Fl(")p Fs(?2)p Fl(")g Fs(and)f(so)h(on.)40 b(If)26 b(the)h Fl(root)f Fs(pro)m(vided)h(is)g(a)390 2152 y(no)s(de)c(to)i(sp)s(eci\014c)f(sequence)h(elemen)m(t,)i(then)d (the)g(k)m(eyw)m(ord)h Fl(")p Fs(?CURRENT)p Fl(")e Fs(is)h(also)h (acceptable)390 2262 y(and)30 b(indicates)h(the)g(curren)m(t)f (sequence)h(elemen)m(t)g(of)g(this)f(no)s(de.)390 2403 y(Note)i(that)f(there)g(can)g(b)s(e)f(v)-5 b(alid)31 b(v)-5 b(alues)31 b(with)f(length)h(zero.)42 b(In)30 b(these)h(case)h(this)e(function)h(will)390 2513 y(succeed)g(and)f Fl(len)f Fs(will)i(b)s(e)e(zero.)390 2655 y Fe(INTEGER:)i Fs(V)-10 b(ALUE)30 b(will)h(con)m(tain)h(a)e(t)m(w)m(o's)i(complemen)m (t)g(form)e(in)m(teger.)390 2796 y(in)m(teger=-1)i(-)p Fl(>)f Fs(v)-5 b(alue[0]=0xFF)32 b(,)f(len=1.)41 b(in)m(teger=1)32 b(-)p Fl(>)e Fs(v)-5 b(alue[0]=0x01)33 b(,)d(len=1.)390 2938 y Fe(ENUMERA)-8 b(TED:)30 b Fs(As)g(INTEGER)g(\(but)g(only)h(with) f(not)g(negativ)m(e)j(n)m(um)m(b)s(ers\).)390 3079 y Fe(BOOLEAN:)38 b Fs(V)-10 b(ALUE)39 b(will)h(b)s(e)e(the)h(n)m(ull)g (terminated)h(string)f Fl(")p Fs(TR)m(UE)p Fl(")f Fs(or)h Fl(")p Fs(F)-10 b(ALSE)p Fl(")39 b Fs(and)390 3189 y(LEN=5)30 b(or)h(LEN=6.)390 3331 y(OBJECT)g(IDENTIFIER:)h(V)-10 b(ALUE)32 b(will)g(b)s(e)g(a)g(n)m(ull)g(terminated)g(string)g(with)g (eac)m(h)h(n)m(um)m(b)s(er)390 3440 y(separated)e(b)m(y)f(a)h(dot)f (\(i.e.)42 b Fl(")p Fs(1.2.3.543.1)p Fl(")p Fs(\).)390 3582 y(LEN)30 b(=)g(strlen\(V)-10 b(ALUE\))p Fl(+)p Fs(1)390 3723 y Fe(UTCTime:)41 b Fs(V)-10 b(ALUE)30 b(will)h(b)s(e)e(a)i(n)m (ull)f(terminated)h(string)f(in)g(one)g(of)h(these)f(formats:)41 b Fl(")p Fs(YYM-)390 3833 y(MDDhhmmss)p Fl(+)p Fs(hh'mm')p Fl(")28 b Fs(or)j Fl(")p Fs(YYMMDDhhmmss-hh'mm')p Fl(")p Fs(.)39 b(LEN=strlen\(V)-10 b(ALUE\))p Fl(+)p Fs(1.)390 3974 y Fe(GeneralizedTime:)48 b Fs(V)-10 b(ALUE)33 b(will)g(b)s(e)g(a)g (n)m(ull)g(terminated)g(string)g(in)g(the)g(same)g(format)h(used)390 4084 y(to)d(set)g(the)g(v)-5 b(alue.)390 4226 y(OCTET)26 b(STRING:)h(V)-10 b(ALUE)27 b(will)h(con)m(tain)h(the)f(o)s(ctet)h (string)e(and)g(LEN)g(will)h(b)s(e)f(the)g(n)m(um)m(b)s(er)390 4335 y(of)k(o)s(ctets.)390 4477 y Fe(GeneralString:)51 b Fs(V)-10 b(ALUE)34 b(will)i(con)m(tain)g(the)f(generalstring)g(and)g (LEN)f(will)h(b)s(e)f(the)h(n)m(um)m(b)s(er)390 4586 y(of)c(o)s(ctets.)390 4728 y(BIT)j(STRING:)h(V)-10 b(ALUE)34 b(will)h(con)m(tain)h(the)f(bit)g(string)f(organized)i(b)m(y)e(b)m (ytes)h(and)f(LEN)h(will)390 4838 y(b)s(e)30 b(the)g(n)m(um)m(b)s(er)f (of)i(bits.)390 4979 y Fe(CHOICE:)j Fs(If)f(NAME)i(indicates)g(a)g(c)m (hoice)h(t)m(yp)s(e,)f(V)-10 b(ALUE)34 b(will)h(sp)s(ecify)f(the)g (alternativ)m(e)i(se-)390 5089 y(lected.)390 5230 y Fe(ANY:)h Fs(If)f(NAME)i(indicates)g(an)f(an)m(y)g(t)m(yp)s(e,)i(V)-10 b(ALUE)37 b(will)g(indicate)h(the)g(DER)f(enco)s(ding)g(of)390 5340 y(the)31 b(structure)e(actually)j(used.)p eop end %%Page: 14 17 TeXDict begin 14 16 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(14)390 299 y Fe(Returns:)64 b Fl(ASN1_SUCCESS)38 b Fs(if)k(v)-5 b(alue)42 b(is)g(returned,)i Fl(ASN1_ELEMENT_NOT_FOUND)36 b Fs(if)42 b Fl(name)f Fs(is)390 408 y(not)33 b(a)g(v)-5 b(alid)34 b(elemen)m(t,)h Fl (ASN1_VALUE_NOT_FOUND)27 b Fs(if)33 b(there)g(isn't)g(an)m(y)g(v)-5 b(alue)34 b(for)e(the)h(elemen)m(t)390 518 y(selected,)28 b(and)d Fl(ASN1_MEM_ERROR)c Fs(if)26 b(The)f(v)-5 b(alue)26 b(v)m(ector)h(isn't)e(big)h(enough)f(to)h(store)g(the)g(result,)390 628 y(and)32 b(in)g(this)h(case)g Fl(len)f Fs(will)h(con)m(tain)h(the)f (n)m(um)m(b)s(er)e(of)i(b)m(ytes)g(needed.)47 b(On)32 b(the)g(o)s(ccasion)i(that)390 737 y(the)28 b(stored)g(data)h(are)f(of) h(zero-length)g(this)f(function)g(ma)m(y)g(return)f Fl(ASN1_SUCCESS)e Fs(ev)m(en)k(if)f(the)390 847 y(pro)m(vided)i Fl(len)f Fs(is)i(zero.)150 1049 y Fk(asn1)p 396 1049 37 5 v 55 w(read)p 685 1049 V 54 w(v)-7 b(alue)p 1015 1049 V 53 w(t)m(yp)s(e)3350 1249 y Fs([F)f(unction])-3599 b Fj(int)53 b(asn1_read_value_type)f Fi(\()p Fh(asn1)p 1687 1249 30 5 v 44 w(no)s(de)p 1938 1249 V 45 w(const)33 b Fg(root)p Fh(,)h(const)g(c)m(har)g(*)565 1358 y Fg(name)p Fh(,)g(v)m(oid)f(*)g Fg(ivalue)p Fh(,)i(in)m(t)e(*)g Fg(len)p Fh(,)h(unsigned)g(in)m(t)g(*)f Fg(etype)p Fi(\))390 1468 y Ff(ro)s(ot)r Fs(:)41 b(p)s(oin)m(ter)30 b(to)i(a)e(structure.)390 1606 y Ff(name)5 b Fs(:)41 b(the)30 b(name)h(of)f(the)h(elemen)m(t)h(inside)e(a)h(structure)f (that)h(y)m(ou)f(w)m(an)m(t)h(to)h(read.)390 1743 y Ff(iv)-5 b(alue)5 b Fs(:)45 b(v)m(ector)34 b(that)e(will)h(con)m(tain)g(the)g (elemen)m(t's)g(con)m(ten)m(t,)i(m)m(ust)d(b)s(e)g(a)g(p)s(oin)m(ter)g (to)h(memory)390 1853 y(cells)e(already)g(allo)s(cated)i(\(ma)m(y)e(b)s (e)f Fl(NULL)f Fs(\).)390 1990 y Ff(len)p Fs(:)41 b(n)m(um)m(b)s(er)29 b(of)h(b)m(ytes)h(of)g(*v)-5 b(alue:)41 b(v)-5 b(alue[0]..v)g (alue[len-1].)45 b(Initialy)31 b(holds)f(the)h(sizeof)g(v)-5 b(alue.)390 2128 y Ff(et)m(yp)s(e)5 b Fs(:)41 b(The)30 b(t)m(yp)s(e)h(of)f(the)h(v)-5 b(alue)31 b(read)f(\(ASN1)p 2037 2128 28 4 v 41 w(ETYPE\))390 2265 y(Returns)k(the)g(t)m(yp)s(e)h (and)f(v)-5 b(alue)35 b(of)f(one)h(elemen)m(t)h(inside)e(a)h (structure.)52 b(If)34 b(an)h(elemen)m(t)h(is)e(OP-)390 2375 y(TIONAL)41 b(and)g(this)g(returns)f Fl(ASN1_ELEMENT_NOT_FOUND)c Fs(,)44 b(it)e(means)g(that)g(this)f(elemen)m(t)390 2484 y(w)m(asn't)36 b(presen)m(t)f(in)h(the)f(der)g(enco)s(ding)g(that)i (created)f(the)g(structure.)55 b(The)35 b(\014rst)g(elemen)m(t)i(of)390 2594 y(a)e(SEQUENCE)p 986 2594 V 39 w(OF)g(or)g(SET)p 1485 2594 V 39 w(OF)f(is)h(named)g Fl(")p Fs(?1)p Fl(")p Fs(.)53 b(The)35 b(second)g(one)g Fl(")p Fs(?2)p Fl(")f Fs(and)g(so)h(on.)54 b(If)390 2704 y(the)31 b Fl(root)g Fs(pro)m(vided)f(is)i(a)f(no)s(de)g(to)h(sp)s(eci\014c)f(sequence)h (elemen)m(t,)h(then)e(the)h(k)m(eyw)m(ord)f Fl(")p Fs(?CUR-)390 2813 y(RENT)p Fl(")f Fs(is)g(also)h(acceptable)i(and)d(indicates)h(the) f(curren)m(t)h(sequence)f(elemen)m(t)i(of)f(this)f(no)s(de.)390 2951 y(Note)i(that)f(there)g(can)g(b)s(e)f(v)-5 b(alid)31 b(v)-5 b(alues)31 b(with)f(length)h(zero.)42 b(In)30 b(these)h(case)h(this)e(function)h(will)390 3060 y(succeed)g(and)f Fl(len)f Fs(will)i(b)s(e)e(zero.)390 3198 y Fe(INTEGER:)i Fs(V)-10 b(ALUE)30 b(will)h(con)m(tain)h(a)e(t)m(w)m(o's)i(complemen)m (t)g(form)e(in)m(teger.)390 3335 y(in)m(teger=-1)i(-)p Fl(>)f Fs(v)-5 b(alue[0]=0xFF)32 b(,)f(len=1.)41 b(in)m(teger=1)32 b(-)p Fl(>)e Fs(v)-5 b(alue[0]=0x01)33 b(,)d(len=1.)390 3473 y Fe(ENUMERA)-8 b(TED:)30 b Fs(As)g(INTEGER)g(\(but)g(only)h(with) f(not)g(negativ)m(e)j(n)m(um)m(b)s(ers\).)390 3610 y Fe(BOOLEAN:)38 b Fs(V)-10 b(ALUE)39 b(will)h(b)s(e)e(the)h(n)m(ull)g (terminated)h(string)f Fl(")p Fs(TR)m(UE)p Fl(")f Fs(or)h Fl(")p Fs(F)-10 b(ALSE)p Fl(")39 b Fs(and)390 3720 y(LEN=5)30 b(or)h(LEN=6.)390 3857 y(OBJECT)g(IDENTIFIER:)h(V)-10 b(ALUE)32 b(will)g(b)s(e)g(a)g(n)m(ull)g(terminated)g(string)g(with)g (eac)m(h)h(n)m(um)m(b)s(er)390 3967 y(separated)e(b)m(y)f(a)h(dot)f (\(i.e.)42 b Fl(")p Fs(1.2.3.543.1)p Fl(")p Fs(\).)390 4104 y(LEN)30 b(=)g(strlen\(V)-10 b(ALUE\))p Fl(+)p Fs(1)390 4242 y Fe(UTCTime:)41 b Fs(V)-10 b(ALUE)30 b(will)h(b)s(e)e(a)i(n)m (ull)f(terminated)h(string)f(in)g(one)g(of)h(these)f(formats:)41 b Fl(")p Fs(YYM-)390 4352 y(MDDhhmmss)p Fl(+)p Fs(hh'mm')p Fl(")28 b Fs(or)j Fl(")p Fs(YYMMDDhhmmss-hh'mm')p Fl(")p Fs(.)39 b(LEN=strlen\(V)-10 b(ALUE\))p Fl(+)p Fs(1.)390 4489 y Fe(GeneralizedTime:)48 b Fs(V)-10 b(ALUE)33 b(will)g(b)s(e)g(a)g (n)m(ull)g(terminated)g(string)g(in)g(the)g(same)g(format)h(used)390 4599 y(to)d(set)g(the)g(v)-5 b(alue.)390 4736 y(OCTET)26 b(STRING:)h(V)-10 b(ALUE)27 b(will)h(con)m(tain)h(the)f(o)s(ctet)h (string)e(and)g(LEN)g(will)h(b)s(e)f(the)g(n)m(um)m(b)s(er)390 4846 y(of)k(o)s(ctets.)390 4983 y Fe(GeneralString:)51 b Fs(V)-10 b(ALUE)34 b(will)i(con)m(tain)g(the)f(generalstring)g(and)g (LEN)f(will)h(b)s(e)f(the)h(n)m(um)m(b)s(er)390 5093 y(of)c(o)s(ctets.)390 5230 y(BIT)j(STRING:)h(V)-10 b(ALUE)34 b(will)h(con)m(tain)h(the)f(bit)g(string)f(organized)i(b)m(y)e(b)m (ytes)h(and)f(LEN)h(will)390 5340 y(b)s(e)30 b(the)g(n)m(um)m(b)s(er)f (of)i(bits.)p eop end %%Page: 15 18 TeXDict begin 15 17 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(15)390 299 y Fe(CHOICE:)34 b Fs(If)f(NAME)i(indicates)g(a)g(c)m(hoice)h(t)m(yp)s(e,)f(V)-10 b(ALUE)34 b(will)h(sp)s(ecify)f(the)g(alternativ)m(e)i(se-)390 408 y(lected.)390 549 y Fe(ANY:)h Fs(If)f(NAME)i(indicates)g(an)f(an)m (y)g(t)m(yp)s(e,)i(V)-10 b(ALUE)37 b(will)g(indicate)h(the)g(DER)f (enco)s(ding)g(of)390 659 y(the)31 b(structure)e(actually)j(used.)390 799 y Fe(Returns:)64 b Fl(ASN1_SUCCESS)38 b Fs(if)k(v)-5 b(alue)42 b(is)g(returned,)i Fl(ASN1_ELEMENT_NOT_FOUND)36 b Fs(if)42 b Fl(name)f Fs(is)390 909 y(not)33 b(a)g(v)-5 b(alid)34 b(elemen)m(t,)h Fl(ASN1_VALUE_NOT_FOUND)27 b Fs(if)33 b(there)g(isn't)g(an)m(y)g(v)-5 b(alue)34 b(for)e(the)h(elemen)m(t)390 1018 y(selected,)28 b(and)d Fl(ASN1_MEM_ERROR)c Fs(if)26 b(The)f(v)-5 b(alue)26 b(v)m(ector)h (isn't)e(big)h(enough)f(to)h(store)g(the)g(result,)390 1128 y(and)32 b(in)g(this)h(case)g Fl(len)f Fs(will)h(con)m(tain)h(the) f(n)m(um)m(b)s(er)e(of)i(b)m(ytes)g(needed.)47 b(On)32 b(the)g(o)s(ccasion)i(that)390 1237 y(the)28 b(stored)g(data)h(are)f (of)h(zero-length)g(this)f(function)g(ma)m(y)g(return)f Fl(ASN1_SUCCESS)e Fs(ev)m(en)k(if)f(the)390 1347 y(pro)m(vided)i Fl(len)f Fs(is)i(zero.)150 1552 y Fk(asn1)p 396 1552 37 5 v 55 w(read)p 685 1552 V 54 w(tag)3350 1755 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_read_tag)d Fi(\()p Fh(asn1)p 1321 1755 30 5 v 44 w(no)s(de)p 1572 1755 V 44 w(const)34 b Fg(root)p Fh(,)g(const)g(c)m(har)g(*)f Fg(name)p Fh(,)h(in)m(t)f(*)565 1864 y Fg(tagValue)p Fh(,)i(in)m(t)f(*)f Fg(classValue)p Fi(\))390 1974 y Ff(ro)s(ot)r Fs(:)41 b(p)s(oin)m(ter)30 b(to)i(a)e(structure)390 2115 y Ff(name)5 b Fs(:)41 b(the)30 b(name)h(of)f(the)h(elemen)m(t)h (inside)e(a)h(structure.)390 2255 y Ff(tagV)-8 b(alue)5 b Fs(:)43 b(v)-5 b(ariable)31 b(that)g(will)g(con)m(tain)h(the)e(T)-8 b(A)m(G)32 b(v)-5 b(alue.)390 2395 y Ff(classV)d(alue)5 b Fs(:)43 b(v)-5 b(ariable)31 b(that)g(will)g(sp)s(ecify)f(the)g(T)-8 b(A)m(G)32 b(t)m(yp)s(e.)390 2536 y(Returns)40 b(the)h(T)-8 b(A)m(G)41 b(and)f(the)h(CLASS)e(of)i(one)g(elemen)m(t)h(inside)e(a)h (structure.)71 b(CLASS)40 b(can)390 2646 y(ha)m(v)m(e)e(one)g(of)f (these)h(constan)m(ts:)56 b Fl(ASN1_CLASS_APPLICATION)31 b Fs(,)39 b Fl(ASN1_CLASS_UNIVERSAL)32 b Fs(,)390 2755 y Fl(ASN1_CLASS_PRIVATE)25 b Fs(or)31 b Fl(ASN1_CLASS_CONTEXT_SPEC)o (IFIC)24 b Fs(.)390 2896 y Fe(Returns:)37 b Fl(ASN1_SUCCESS)21 b Fs(if)k(successful,)g Fl(ASN1_ELEMENT_NOT_FOUND)18 b Fs(if)25 b Fl(name)e Fs(is)h(not)h(a)g(v)-5 b(alid)390 3005 y(elemen)m(t.)150 3210 y Fk(asn1)p 396 3210 37 5 v 55 w(read)p 685 3210 V 54 w(no)s(de)p 995 3210 V 55 w(v)e(alue)3350 3413 y Fs([F)f(unction])-3599 b Fj(int)53 b(asn1_read_node_value)f Fi(\()p Fh(asn1)p 1687 3413 30 5 v 44 w(no)s(de)p 1938 3413 V 45 w(const)33 b Fg(node)p Fh(,)565 3523 y(asn1)p 766 3523 V 44 w(data)p 1004 3523 V 44 w(no)s(de)p 1255 3523 V 44 w(st)g(*)g Fg(data)p Fi(\))390 3632 y Ff(no)s(de)5 b Fs(:)40 b(p)s(oin)m(ter)31 b(to)g(a)f(no)s(de.)390 3773 y Ff(data)p Fs(:)41 b(a)31 b(p)s(oin)m(t)g(to)g(a)f(asn1)p 1315 3773 28 4 v 41 w(data)p 1532 3773 V 40 w(no)s(de)p 1762 3773 V 40 w(st)390 3913 y(Returns)22 b(the)g(v)-5 b(alue)23 b(a)g(data)h(no)s(de)d(inside)i(a)g (asn1)p 2084 3913 V 40 w(no)s(de)f(structure.)37 b(The)22 b(data)i(returned)d(should)390 4023 y(b)s(e)30 b(handled)f(as)i (constan)m(t)g(v)-5 b(alues.)390 4163 y Fe(Returns:)40 b Fl(ASN1_SUCCESS)27 b Fs(if)k(the)f(no)s(de)g(exists.)150 4413 y Fr(4.3)68 b(DER)46 b(functions)150 4637 y Fk(asn1)p 396 4637 37 5 v 55 w(length)p 786 4637 V 54 w(der)3350 4840 y Fs([F)-8 b(unction])-3599 b Fj(void)54 b(asn1_length_der)c Fi(\()p Fh(unsigned)35 b(long)d(in)m(t)i Fg(len)p Fh(,)f(unsigned)i(c)m (har)f(*)f Fg(der)p Fh(,)565 4949 y(in)m(t)g(*)g Fg(der_len)p Fi(\))390 5059 y Ff(len)p Fs(:)41 b(v)-5 b(alue)31 b(to)g(con)m(v)m (ert.)390 5200 y Ff(der)7 b Fs(:)40 b(bu\013er)29 b(to)i(hold)f(the)h (returned)e(enco)s(ding)h(\(ma)m(y)i(b)s(e)d Fl(NULL)h Fs(\).)390 5340 y Ff(der)p 523 5340 28 4 v 40 w(len)p Fs(:)40 b(n)m(um)m(b)s(er)29 b(of)i(meaningful)f(b)m(ytes)h(of)g(ANS)f (\(der[0]..der[der)p 2791 5340 V 40 w(len-1]\).)p eop end %%Page: 16 19 TeXDict begin 16 18 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(16)390 299 y(Creates)35 b(the)f(DER)h(enco)s(ding)f(of)g(the)g(pro)m(vided)g(length)h(v)-5 b(alue.)52 b(The)34 b Fl(der)f Fs(bu\013er)h(m)m(ust)g(ha)m(v)m(e)390 408 y(enough)27 b(ro)s(om)f(for)h(the)g(output.)40 b(The)26 b(maxim)m(um)h(length)g(this)g(function)g(will)g(enco)s(de)g(is)g Fl(ASN1_)390 518 y(MAX_LENGTH_SIZE)f Fs(.)390 655 y(T)-8 b(o)31 b(kno)m(w)f(the)h(size)g(of)g(the)f(DER)h(enco)s(ding)f(use)g(a) h Fl(NULL)e Fs(v)-5 b(alue)31 b(for)f Fl(der)f Fs(.)150 857 y Fk(asn1)p 396 857 37 5 v 55 w(o)s(ctet)p 722 857 V 53 w(der)3350 1056 y Fs([F)-8 b(unction])-3599 b Fj(void)54 b(asn1_octet_der)49 b Fi(\()p Fh(const)34 b(unsigned)h(c)m(har)f(*)f Fg(str)p Fh(,)h(in)m(t)f Fg(str_len)p Fh(,)565 1166 y(unsigned)i(c)m (har)f(*)f Fg(der)p Fh(,)g(in)m(t)h(*)f Fg(der_len)p Fi(\))390 1276 y Ff(str)7 b Fs(:)40 b(the)31 b(input)e(data.)390 1413 y Ff(str)p 503 1413 28 4 v 40 w(len)p Fs(:)41 b(STR)29 b(length)i(\(str[0]..str[*str)p 1787 1413 V 42 w(len-1]\).)390 1550 y Ff(der)7 b Fs(:)40 b(enco)s(ded)30 b(string)g(returned.)390 1687 y Ff(der)p 523 1687 V 40 w(len)p Fs(:)40 b(n)m(um)m(b)s(er)29 b(of)i(meaningful)f(b)m(ytes)h(of)g(DER)f(\(der[0]..der[der)p 2802 1687 V 41 w(len-1]\).)390 1824 y(Creates)j(a)f(length-v)-5 b(alue)34 b(DER)e(enco)s(ding)g(for)g(the)g(input)f(data.)47 b(The)31 b(DER)h(enco)s(ding)g(of)h(the)390 1934 y(input)c(data)i(will) g(b)s(e)f(placed)h(in)f(the)g Fl(der)g Fs(v)-5 b(ariable.)390 2071 y(Note)32 b(that)f(the)f(OCTET)f(STRING)h(tag)h(is)g(not)f (included)g(in)g(the)h(output.)390 2208 y(This)41 b(function)g(do)s(es) g(not)h(return)e(an)m(y)i(v)-5 b(alue)42 b(b)s(ecause)f(it)i(is)e(exp)s (ected)h(that)g Fl(der_len)e Fs(will)390 2317 y(con)m(tain)30 b(enough)e(b)m(ytes)i(to)f(store)g(the)g(string)g(plus)e(the)i(DER)g (enco)s(ding.)40 b(The)28 b(DER)h(enco)s(ding)390 2427 y(size)i(can)g(b)s(e)f(obtained)g(using)g Fl(asn1_length_der\(\))c Fs(.)150 2629 y Fk(asn1)p 396 2629 37 5 v 55 w(enco)s(de)p 818 2629 V 54 w(simple)p 1214 2629 V 55 w(der)3350 2828 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_encode_simple_de)q(r)e Fi(\()p Fh(unsigned)35 b(in)m(t)f Fg(etype)p Fh(,)g(const)g(unsigned) 565 2938 y(c)m(har)g(*)f Fg(str)p Fh(,)h(unsigned)g(in)m(t)g Fg(str_len)p Fh(,)h(unsigned)f(c)m(har)g(*)f Fg(tl)p Fh(,)h(unsigned)g(in)m(t)g(*)565 3047 y Fg(tl_len)p Fi(\))390 3157 y Ff(et)m(yp)s(e)5 b Fs(:)41 b(The)30 b(t)m(yp)s(e)h(of)f(the)h (string)f(to)h(b)s(e)f(enco)s(ded)g(\(ASN1)p 2444 3157 28 4 v 41 w(ETYPE)p 2805 3157 V 39 w(\))390 3294 y Ff(str)7 b Fs(:)40 b(the)31 b(string)f(data.)390 3431 y Ff(str)p 503 3431 V 40 w(len)p Fs(:)41 b(the)30 b(string)h(length)390 3568 y Ff(tl)t Fs(:)41 b(the)30 b(enco)s(ded)g(tag)i(and)e(length)390 3705 y Ff(tl)p 456 3705 V 41 w(len)p Fs(:)40 b(the)31 b(b)m(ytes)g(of)f(the)h Fl(tl)f Fs(\014eld)390 3842 y(Creates)j(the)g (DER)g(enco)s(ding)f(for)h(v)-5 b(arious)32 b(simple)h(ASN.1)g(t)m(yp)s (es)f(lik)m(e)i(strings)e(etc.)49 b(It)32 b(stores)390 3952 y(the)k(tag)h(and)e(length)h(in)g Fl(tl)f Fs(,)i(whic)m(h)f (should)f(ha)m(v)m(e)i(space)f(for)g(at)g(least)h Fl(ASN1_MAX_TL_SIZE) 390 4062 y Fs(b)m(ytes.)k(Initially)32 b Fl(tl_len)c Fs(should)i(con)m(tain)h(the)g(size)g(of)g Fl(tl)e Fs(.)390 4199 y(The)39 b(complete)i(DER)f(enco)s(ding)g(should)e(consist)i(of)g (the)g(v)-5 b(alue)40 b(in)g Fl(tl)f Fs(app)s(ended)e(with)j(the)390 4308 y(pro)m(vided)30 b Fl(str)f Fs(.)390 4445 y Fe(Returns:)40 b Fl(ASN1_SUCCESS)27 b Fs(if)k(successful)f(or)g(an)g(error)g(v)-5 b(alue.)150 4647 y Fk(asn1)p 396 4647 37 5 v 55 w(ob)7 b(ject)p 783 4647 V 54 w(id)p 939 4647 V 54 w(der)3350 4847 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_object_id_der)e Fi(\()p Fh(const)34 b(c)m(har)g(*)f Fg(str)p Fh(,)h(unsigned)h(c)m(har) e(*)g Fg(der)p Fh(,)565 4956 y(in)m(t)g(*)g Fg(der_len)p Fh(,)i(unsigned)g Fg(flags)p Fi(\))390 5066 y Ff(str)7 b Fs(:)40 b(An)30 b(ob)5 b(ject)31 b(iden)m(ti\014er)g(in)f(n)m (umeric,)g(dot)h(format.)390 5203 y Ff(der)7 b Fs(:)40 b(bu\013er)29 b(to)i(hold)f(the)h(returned)e(enco)s(ding)h(\(ma)m(y)i (b)s(e)d Fl(NULL)h Fs(\).)390 5340 y Ff(der)p 523 5340 28 4 v 40 w(len)p Fs(:)40 b(initially)32 b(the)f(size)g(of)g Fl(der)e Fs(;)i(will)f(hold)g(the)h(\014nal)f(size.)p eop end %%Page: 17 20 TeXDict begin 17 19 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(17)390 299 y Ff(\015ags)t Fs(:)41 b(m)m(ust)30 b(b)s(e)g(zero)390 432 y(Creates)h(the)g(DER)f (enco)s(ding)g(of)h(the)g(pro)m(vided)f(ob)5 b(ject)31 b(iden)m(ti\014er.)390 564 y Fe(Returns:)41 b Fl(ASN1_SUCCESS)27 b Fs(if)j(DER)h(enco)s(ding)f(w)m(as)h(OK,)f Fl(ASN1_VALUE_NOT_VALID)25 b Fs(if)30 b Fl(str)g Fs(is)390 674 y(not)h(a)f(v)-5 b(alid)31 b(OID,)g Fl(ASN1_MEM_ERROR)26 b Fs(if)k(the)h Fl(der)f Fs(v)m(ector)i(isn't)e(big)h(enough)f(and)g(in)g(this)g(case) 390 783 y Fl(der_len)e Fs(will)j(con)m(tain)h(the)e(length)h(needed.) 150 979 y Fk(asn1)p 396 979 37 5 v 55 w(bit)p 601 979 V 54 w(der)3350 1172 y Fs([F)-8 b(unction])-3599 b Fj(void)54 b(asn1_bit_der)49 b Fi(\()p Fh(const)34 b(unsigned)g(c)m(har)g(*)f Fg(str)p Fh(,)h(in)m(t)f Fg(bit_len)p Fh(,)565 1281 y(unsigned)i(c)m (har)f(*)f Fg(der)p Fh(,)g(in)m(t)h(*)f Fg(der_len)p Fi(\))390 1391 y Ff(str)7 b Fs(:)40 b(BIT)30 b(string.)390 1524 y Ff(bit)p 507 1524 28 4 v 40 w(len)p Fs(:)41 b(n)m(um)m(b)s(er)29 b(of)i(meaningful)f(bits)g(in)g(STR.)390 1656 y Ff(der)7 b Fs(:)40 b(string)30 b(returned.)390 1789 y Ff(der)p 523 1789 V 40 w(len)p Fs(:)40 b(n)m(um)m(b)s(er)29 b(of)i(meaningful)f (b)m(ytes)h(of)g(DER)f(\(der[0]..der[ans)p 2807 1789 V 41 w(len-1]\).)390 1922 y(Creates)i(a)f(length-v)-5 b(alue)33 b(DER)e(enco)s(ding)g(for)g(the)g(input)f(data)i(as)f(it)h(w) m(ould)f(ha)m(v)m(e)h(b)s(een)f(for)g(a)390 2031 y(BIT)f(STRING.)g(The) g(DER)h(enco)s(ded)f(data)h(will)f(b)s(e)g(copied)h(in)f Fl(der)f Fs(.)390 2164 y(Note)j(that)f(the)f(BIT)g(STRING)g(tag)i(is)e (not)h(included)e(in)h(the)h(output.)390 2296 y(This)41 b(function)g(do)s(es)g(not)h(return)e(an)m(y)i(v)-5 b(alue)42 b(b)s(ecause)f(it)i(is)e(exp)s(ected)h(that)g Fl(der_len)e Fs(will)390 2406 y(con)m(tain)30 b(enough)e(b)m(ytes)i(to)f(store)g (the)g(string)g(plus)e(the)i(DER)g(enco)s(ding.)40 b(The)28 b(DER)h(enco)s(ding)390 2516 y(size)i(can)g(b)s(e)f(obtained)g(using)g Fl(asn1_length_der\(\))c Fs(.)150 2711 y Fk(asn1)p 396 2711 37 5 v 55 w(der)p 625 2711 V 54 w(co)s(ding)3350 2904 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_der_coding)d Fi(\()p Fh(asn1)p 1425 2904 30 5 v 45 w(no)s(de)p 1677 2904 V 44 w(const)34 b Fg(element)p Fh(,)g(const)g(c)m(har)g(*)e Fg(name)p Fh(,)565 3014 y(v)m(oid)h(*)g Fg(ider)p Fh(,)h(in)m(t)f(*)g Fg(len)p Fh(,)h(c)m(har)g(*)f Fg(ErrorDescription)p Fi(\))390 3123 y Ff(elemen)m(t)r Fs(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h (elemen)m(t)390 3256 y Ff(name)5 b Fs(:)39 b(the)27 b(name)h(of)f(the)g (structure)g(y)m(ou)g(w)m(an)m(t)h(to)g(enco)s(de)f(\(it)h(m)m(ust)f(b) s(e)f(inside)h(*POINTER\).)390 3389 y Ff(ider)7 b Fs(:)39 b(v)m(ector)30 b(that)f(will)f(con)m(tain)i(the)e(DER)h(enco)s(ding.)40 b(DER)28 b(m)m(ust)g(b)s(e)g(a)h(p)s(oin)m(ter)f(to)h(memory)390 3498 y(cells)i(already)g(allo)s(cated.)390 3631 y Ff(len)p Fs(:)49 b(n)m(um)m(b)s(er)33 b(of)h(b)m(ytes)h(of)g(*)g Fl(ider)e Fs(:)48 b Fl(ider)34 b Fs([0]..)54 b Fl(ider)33 b Fs([len-1],)k(Initialy)e(holds)f(the)g(sizeof)i(of)390 3740 y(der)30 b(v)m(ector.)390 3873 y Ff(ErrorDescription)p Fs(:)41 b(return)29 b(the)i(error)f(description)g(or)g(an)h(empt)m(y)f (string)h(if)f(success.)390 4006 y(Creates)h(the)g(DER)f(enco)s(ding)g (for)h(the)f(NAME)h(structure)f(\(inside)g(*POINTER)g(structure\).)390 4138 y Fe(Returns:)47 b Fl(ASN1_SUCCESS)30 b Fs(if)k(DER)g(enco)s(ding) f(OK,)g Fl(ASN1_ELEMENT_NOT_FOUND)28 b Fs(if)33 b Fl(name)g Fs(is)390 4248 y(not)h(a)g(v)-5 b(alid)35 b(elemen)m(t,)h Fl(ASN1_VALUE_NOT_FOUND)29 b Fs(if)34 b(there)g(is)g(an)g(elemen)m(t)h (without)f(a)g(v)-5 b(alue,)390 4357 y Fl(ASN1_MEM_ERROR)24 b Fs(if)29 b(the)f Fl(ider)g Fs(v)m(ector)i(isn't)e(big)h(enough)f(and) g(in)g(this)g(case)h Fl(len)f Fs(will)h(con)m(tain)390 4467 y(the)i(length)f(needed.)150 4663 y Fk(asn1)p 396 4663 37 5 v 55 w(get)p 616 4663 V 54 w(length)p 1005 4663 V 54 w(der)3350 4856 y Fs([F)-8 b(unction])-3599 b Fj(long)54 b(asn1_get_length_der)d Fi(\()p Fh(const)34 b(unsigned)g(c)m(har)g(*)f Fg(der)p Fh(,)h(in)m(t)565 4965 y Fg(der_len)p Fh(,)h(in)m(t)e(*)g Fg(len)p Fi(\))390 5075 y Ff(der)7 b Fs(:)40 b(DER)30 b(data)h(to)g(deco)s(de.)390 5207 y Ff(der)p 523 5207 28 4 v 40 w(len)p Fs(:)40 b(Length)31 b(of)f(DER)h(data)g(to)g(deco)s(de.)390 5340 y Ff(len)p Fs(:)41 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h(the)f(length) f(of)h(the)g(DER)f(length)h(\014eld.)p eop end %%Page: 18 21 TeXDict begin 18 20 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(18)390 299 y(Extract)31 b(a)g(length)g(\014eld)f(from)g(DER)g(data.)390 432 y Fe(Returns:)40 b Fs(Return)29 b(the)h(deco)s(ded)f(length)h(v)-5 b(alue,)30 b(or)g(-1)g(on)g(inde\014nite)f(length,)h(or)g(-2)g(when)f (the)390 542 y(v)-5 b(alue)30 b(w)m(as)h(to)s(o)f(big)g(to)h(\014t)e (in)h(a)g(in)m(t,)h(or)f(-4)g(when)f(the)h(deco)s(ded)g(length)g(v)-5 b(alue)30 b(plus)f Fl(len)g Fs(w)m(ould)390 651 y(exceed)i Fl(der_len)e Fs(.)150 848 y Fk(asn1)p 396 848 37 5 v 55 w(get)p 616 848 V 54 w(tag)p 839 848 V 53 w(der)3350 1043 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_get_tag_der)e Fi(\()p Fh(const)34 b(unsigned)g(c)m(har)g(*)f Fg(der)p Fh(,)h(in)m(t)f Fg(der_len)p Fh(,)565 1152 y(unsigned)i(c)m(har)f(*)f Fg(cls)p Fh(,)g(in)m(t)h(*)f Fg(len)p Fh(,)h(unsigned)g(long)f(*)g Fg(tag)p Fi(\))390 1262 y Ff(der)7 b Fs(:)40 b(DER)30 b(data)h(to)g(deco)s(de.)390 1395 y Ff(der)p 523 1395 28 4 v 40 w(len)p Fs(:)40 b(Length)31 b(of)f(DER)h(data)g(to)g(deco)s (de.)390 1529 y Ff(cls)t Fs(:)41 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h(deco)s(ded)e(class.)390 1662 y Ff(len)p Fs(:)41 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h(the)f(length) f(of)h(the)g(DER)f(T)-8 b(A)m(G)31 b(data.)390 1796 y Ff(tag)8 b Fs(:)42 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h (the)f(deco)s(ded)f(tag)h(\(ma)m(y)g(b)s(e)f Fl(NULL)f Fs(\).)390 1929 y(Deco)s(de)i(the)g(class)g(and)f(T)-8 b(A)m(G)31 b(from)f(DER)h(co)s(de.)390 2062 y Fe(Returns:)40 b Fs(Returns)30 b Fl(ASN1_SUCCESS)d Fs(on)j(success,)h(or)f(an)h (error.)150 2259 y Fk(asn1)p 396 2259 37 5 v 55 w(get)p 616 2259 V 54 w(length)p 1005 2259 V 54 w(b)s(er)3350 2454 y Fs([F)-8 b(unction])-3599 b Fj(long)54 b(asn1_get_length_ber)d Fi(\()p Fh(const)34 b(unsigned)g(c)m(har)g(*)f Fg(ber)p Fh(,)h(in)m(t)565 2563 y Fg(ber_len)p Fh(,)h(in)m(t)e(*)g Fg(len)p Fi(\))390 2673 y Ff(b)s(er)7 b Fs(:)39 b(BER)31 b(data)g(to)g(deco)s(de.)390 2806 y Ff(b)s(er)p 526 2806 28 4 v 39 w(len)p Fs(:)41 b(Length)30 b(of)h(BER)f(data)h(to)g(deco)s (de.)390 2940 y Ff(len)p Fs(:)41 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h(the)f(length)f(of)h(the)g(BER)f(length)h(\014eld.)390 3073 y(Extract)g(a)g(length)f(\014eld)g(from)g(BER)g(data.)41 b(The)30 b(di\013erence)h(to)g Fl(asn1_get_length_der\(\))24 b Fs(is)390 3183 y(that)31 b(this)f(function)g(will)h(return)e(a)i (length)g(ev)m(en)g(if)f(the)h(v)-5 b(alue)31 b(has)f(inde\014nite)g (enco)s(ding.)390 3316 y Fe(Returns:)40 b Fs(Return)27 b(the)i(deco)s(ded)g(length)g(v)-5 b(alue,)30 b(or)e(negativ)m(e)j(v)-5 b(alue)29 b(when)f(the)h(v)-5 b(alue)29 b(w)m(as)g(to)s(o)390 3426 y(big.)390 3559 y Fe(Since:)41 b Fs(2.0)150 3756 y Fk(asn1)p 396 3756 37 5 v 55 w(get)p 616 3756 V 54 w(o)s(ctet)p 941 3756 V 53 w(der)3350 3950 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_get_octet_der)e Fi(\()p Fh(const)34 b(unsigned)h(c)m(har)f(*)f Fg(der)p Fh(,)h(in)m(t)f Fg(der_len)p Fh(,)565 4060 y(in)m(t)g(*)g Fg(ret_len)p Fh(,)i(unsigned)g(c)m(har)f(*)f Fg(str)p Fh(,)h(in)m(t)f Fg(str_size)p Fh(,)i(in)m(t)e(*)g Fg(str_len)p Fi(\))390 4170 y Ff(der)7 b Fs(:)40 b(DER)30 b(data)h(to)g(deco)s(de)g(con)m (taining)h(the)e(OCTET)f(SEQUENCE.)390 4303 y Ff(der)p 523 4303 28 4 v 40 w(len)p Fs(:)40 b(The)30 b(length)h(of)g(the)f Fl(der)g Fs(data)h(to)g(deco)s(de.)390 4436 y Ff(ret)p 507 4436 V 40 w(len)p Fs(:)41 b(Output)29 b(v)-5 b(ariable)32 b(con)m(taining)f(the)g(enco)s(ded)f(length)h(of)f(the)h(DER)f(data.) 390 4570 y Ff(str)7 b Fs(:)40 b(Pre-allo)s(cated)33 b(output)d (bu\013er)f(to)i(put)f(deco)s(ded)g(OCTET)f(SEQUENCE)g(in.)390 4703 y Ff(str)p 503 4703 V 40 w(size)5 b Fs(:)41 b(Length)31 b(of)f(pre-allo)s(cated)j(output)d(bu\013er.)390 4836 y Ff(str)p 503 4836 V 40 w(len)p Fs(:)57 b(Output)38 b(v)-5 b(ariable)40 b(con)m(taining)g(the)f(length)g(of)g(the)g(con)m (ten)m(ts)h(of)f(the)g(OCTET)e(SE-)390 4946 y(QUENCE.)390 5079 y(Extract)g(an)f(OCTET)e(SEQUENCE)h(from)h(DER)g(data.)58 b(Note)37 b(that)g(this)f(function)g(exp)s(ects)390 5189 y(the)31 b(DER)f(data)h(past)g(the)f(tag)i(\014eld,)e(i.e.,)i(the)e (length)h(and)f(con)m(ten)m(t)i(o)s(ctets.)390 5322 y Fe(Returns:)40 b Fs(Returns)30 b Fl(ASN1_SUCCESS)d Fs(on)j(success,)h (or)f(an)h(error.)p eop end %%Page: 19 22 TeXDict begin 19 21 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(19)150 299 y Fk(asn1)p 396 299 37 5 v 55 w(get)p 616 299 V 54 w(ob)7 b(ject)p 1002 299 V 54 w(id)p 1158 299 V 54 w(der)3350 491 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_get_object_id_de)q(r)e Fi(\()p Fh(const)34 b(unsigned)h(c)m(har)f(*)f Fg(der)p Fh(,)h(in)m(t)565 601 y Fg(der_len)p Fh(,)h(in)m(t)e(*)g Fg(ret_len)p Fh(,)i(c)m(har)f(*)f Fg(str)p Fh(,)h(in)m(t)f Fg(str_size)p Fi(\))390 711 y Ff(der)7 b Fs(:)40 b(DER)30 b(data)h(to)g(deco)s(de)g(con)m(taining)h(the)e(OBJECT)g(IDENTIFIER)390 843 y Ff(der)p 523 843 28 4 v 40 w(len)p Fs(:)40 b(Length)31 b(of)f(DER)h(data)g(to)g(deco)s(de.)390 976 y Ff(ret)p 507 976 V 40 w(len)p Fs(:)41 b(Output)29 b(v)-5 b(ariable)32 b(con)m(taining)f(the)g(length)g(of)f(the)h(DER)f(data.)390 1108 y Ff(str)7 b Fs(:)40 b(Pre-allo)s(cated)33 b(output)d(bu\013er)f (to)i(put)f(the)g(textual)i(ob)5 b(ject)31 b(id)f(in.)390 1240 y Ff(str)p 503 1240 V 40 w(size)5 b Fs(:)41 b(Length)31 b(of)f(pre-allo)s(cated)j(output)d(bu\013er.)390 1373 y(Con)m(v)m(erts)i(a)f(DER)h(enco)s(ded)e(ob)5 b(ject)32 b(iden)m(ti\014er)f(to)h(its)g(textual)g(form.)42 b(This)31 b(function)g(exp)s(ects)390 1482 y(the)g(DER)f(ob)5 b(ject)31 b(iden)m(ti\014er)g(without)f(the)h(tag.)390 1615 y Fe(Returns:)40 b Fl(ASN1_SUCCESS)27 b Fs(on)k(success,)g(or)f(an)g(error.)150 1810 y Fk(asn1)p 396 1810 37 5 v 55 w(get)p 616 1810 V 54 w(bit)p 820 1810 V 54 w(der)3350 2002 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_get_bit_der)e Fi(\()p Fh(const)34 b(unsigned)g(c)m(har)g(*)f Fg(der)p Fh(,)h(in)m(t)f Fg(der_len)p Fh(,)i(in)m(t)565 2112 y(*)e Fg(ret_len)p Fh(,)i(unsigned)g(c)m(har)f(*)f Fg(str)p Fh(,)h(in)m(t)f Fg(str_size)p Fh(,)i(in)m(t)e(*)g Fg(bit_len)p Fi(\))390 2222 y Ff(der)7 b Fs(:)40 b(DER)30 b(data)h(to)g(deco)s(de)g(con)m (taining)h(the)e(BIT)h(SEQUENCE.)390 2354 y Ff(der)p 523 2354 28 4 v 40 w(len)p Fs(:)40 b(Length)31 b(of)f(DER)h(data)g(to)g (deco)s(de.)390 2487 y Ff(ret)p 507 2487 V 40 w(len)p Fs(:)41 b(Output)29 b(v)-5 b(ariable)32 b(con)m(taining)f(the)g(length) g(of)f(the)h(DER)f(data.)390 2619 y Ff(str)7 b Fs(:)40 b(Pre-allo)s(cated)33 b(output)d(bu\013er)f(to)i(put)f(deco)s(ded)g (BIT)g(SEQUENCE)f(in.)390 2751 y Ff(str)p 503 2751 V 40 w(size)5 b Fs(:)41 b(Length)31 b(of)f(pre-allo)s(cated)j(output)d (bu\013er.)390 2884 y Ff(bit)p 507 2884 V 40 w(len)p Fs(:)41 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h(the)f(size)g (of)g(the)f(BIT)g(SEQUENCE.)390 3016 y(Extract)h(a)g(BIT)f(SEQUENCE)f (from)h(DER)h(data.)390 3149 y Fe(Returns:)40 b Fl(ASN1_SUCCESS)27 b Fs(on)k(success,)g(or)f(an)g(error.)150 3344 y Fk(asn1)p 396 3344 37 5 v 55 w(der)p 625 3344 V 54 w(deco)s(ding2)3350 3536 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_der_decoding2)e Fi(\()p Fh(asn1)p 1582 3536 30 5 v 45 w(no)s(de)33 b(*)g Fg(element)p Fh(,)i(const)f(v)m(oid)f(*)g Fg(ider)p Fh(,)565 3646 y(in)m(t)g(*)g Fg(max_ider_len)p Fh(,)k(unsigned)e(in)m(t)e Fg(flags)p Fh(,)h(c)m(har)g(*)f Fg(errorDescription)p Fi(\))390 3756 y Ff(elemen)m(t)r Fs(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h(structure.)390 3888 y Ff(ider)7 b Fs(:)40 b(v)m(ector)32 b(that)f(con)m(tains)g(the)g(DER)g(enco)s(ding.) 390 4020 y Ff(max)p 565 4020 28 4 v 40 w(ider)p 757 4020 V 40 w(len)p Fs(:)37 b(p)s(oin)m(ter)22 b(to)i(an)e(in)m(teger)i (giving)f(the)g(information)g(ab)s(out)f(the)h(maximal)g(n)m(um)m(b)s (er)390 4130 y(of)29 b(b)m(ytes)g(o)s(ccupied)f(b)m(y)h(*)g Fl(ider)e Fs(.)41 b(The)28 b(real)h(size)g(of)g(the)g(DER)g(enco)s (ding)f(is)h(returned)f(through)390 4240 y(this)i(p)s(oin)m(ter.)390 4372 y Ff(\015ags)t Fs(:)41 b(\015ags)30 b(con)m(trolling)j(the)d(b)s (eha)m(viour)g(of)h(the)f(function.)390 4504 y Ff(errorDescription)p Fs(:)41 b(n)m(ull-terminated)32 b(string)e(con)m(tains)h(details)h (when)d(an)h(error)g(o)s(ccurred.)390 4637 y(Fill)38 b(the)f(structure)g(*)h Fl(element)d Fs(with)h(v)-5 b(alues)38 b(of)f(a)h(DER)f(enco)s(ding)g(string.)61 b(The)36 b(structure)390 4746 y(m)m(ust)30 b(just)g(b)s(e)g(created)h(with)f(function)g Fl(asn1_create_element\(\))25 b Fs(.)390 4879 y(If)d Fl(ASN1_DECODE_FLAG_ALLOW_P)o(ADD)o(ING)16 b Fs(\015ag)23 b(is)f(set)h(then)f(the)g(function)g(will)h(ignore)g(padding)390 4988 y(after)31 b(the)h(deco)s(ded)e(DER)h(data.)43 b(Up)s(on)30 b(a)i(successful)e(return)g(the)h(v)-5 b(alue)32 b(of)f(*)g Fl(max_ider_len)390 5098 y Fs(will)g(b)s(e)e(set)i(to)g(the)g(n)m(um)m (b)s(er)e(of)i(b)m(ytes)g(deco)s(ded.)390 5230 y(If)j Fl(ASN1_DECODE_FLAG_STRICT_DE)o(R)29 b Fs(\015ag)35 b(is)g(set)h(then)e (the)h(function)g(will)g(not)h(deco)s(de)f(an)m(y)390 5340 y(BER-enco)s(ded)30 b(elemen)m(ts.)p eop end %%Page: 20 23 TeXDict begin 20 22 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(20)390 299 y Fe(Returns:)39 b Fl(ASN1_SUCCESS)25 b Fs(if)i(DER)h(enco)s(ding)g(OK,)f Fl(ASN1_ELEMENT_NOT_FOUND)22 b Fs(if)28 b Fl(ELEMENT)390 408 y Fs(is)g Fl(NULL)e Fs(,)i(and)g Fl(ASN1_TAG_ERROR)23 b Fs(or)28 b Fl(ASN1_DER_ERROR)c Fs(if)j(the)h(der)f(enco)s(ding)h(do)s (esn't)f(matc)m(h)390 518 y(the)k(structure)e(name)i(\(*)g Fl(ELEMENT)d Fs(deleted\).)150 717 y Fk(asn1)p 396 717 37 5 v 55 w(der)p 625 717 V 54 w(deco)s(ding)3350 914 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_der_decoding)e Fi(\()p Fh(asn1)p 1530 914 30 5 v 44 w(no)s(de)34 b(*)f Fg(element)p Fh(,)i(const)f(v)m(oid)f(*)g Fg(ider)p Fh(,)565 1023 y(in)m(t)g Fg(ider_len)p Fh(,)j(c)m(har)e(*)f Fg(errorDescription) p Fi(\))390 1133 y Ff(elemen)m(t)r Fs(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h(structure.)390 1267 y Ff(ider)7 b Fs(:)40 b(v)m(ector)32 b(that)f(con)m(tains)g(the)g(DER)g(enco)s(ding.) 390 1402 y Ff(ider)p 548 1402 28 4 v 40 w(len)p Fs(:)41 b(n)m(um)m(b)s(er)29 b(of)h(b)m(ytes)h(of)g(*)f Fl(ider)g Fs(:)40 b Fl(ider)29 b Fs([0]..)42 b Fl(ider)30 b Fs([len-1].)390 1536 y Ff(errorDescription)p Fs(:)41 b(n)m(ull-terminated)32 b(string)e(con)m(tains)h(details)h(when)d(an)h(error)g(o)s(ccurred.)390 1670 y(Fill)38 b(the)f(structure)g(*)h Fl(element)d Fs(with)h(v)-5 b(alues)38 b(of)f(a)h(DER)f(enco)s(ding)g(string.)61 b(The)36 b(structure)390 1780 y(m)m(ust)30 b(just)g(b)s(e)g(created)h (with)f(function)g Fl(asn1_create_element\(\))25 b Fs(.)390 1914 y(Note)32 b(that)f(the)f(*)h Fl(element)d Fs(v)-5 b(ariable)32 b(is)e(pro)m(vided)g(as)h(a)f(p)s(oin)m(ter)h(for)f (historical)i(reasons.)390 2049 y Fe(Returns:)39 b Fl(ASN1_SUCCESS)25 b Fs(if)i(DER)h(enco)s(ding)g(OK,)f Fl(ASN1_ELEMENT_NOT_FOUND)22 b Fs(if)28 b Fl(ELEMENT)390 2158 y Fs(is)g Fl(NULL)e Fs(,)i(and)g Fl(ASN1_TAG_ERROR)23 b Fs(or)28 b Fl(ASN1_DER_ERROR)c Fs(if)j(the)h(der)f(enco)s(ding)h(do)s(esn't)f(matc)m(h)390 2268 y(the)k(structure)e(name)i(\(*)g Fl(ELEMENT)d Fs(deleted\).)150 2467 y Fk(asn1)p 396 2467 37 5 v 55 w(der)p 625 2467 V 54 w(deco)s(ding)p 1153 2467 V 55 w(elemen)m(t)3350 2664 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_der_decoding_ele)q (ment)f Fi(\()p Fh(asn1)p 1948 2664 30 5 v 45 w(no)s(de)33 b(*)h Fg(structure)p Fh(,)h(const)565 2773 y(c)m(har)f(*)f Fg(elementName)p Fh(,)j(const)e(v)m(oid)f(*)g Fg(ider)p Fh(,)h(in)m(t)f Fg(len)p Fh(,)h(c)m(har)g(*)565 2883 y Fg(errorDescription)p Fi(\))390 2992 y Ff(structure)5 b Fs(:)40 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h(structure)390 3127 y Ff(elemen)m(tName)5 b Fs(:)43 b(name)31 b(of)f(the)h(elemen)m(t) g(to)h(\014ll)390 3261 y Ff(ider)7 b Fs(:)40 b(v)m(ector)32 b(that)f(con)m(tains)g(the)g(DER)g(enco)s(ding)f(of)g(the)h(whole)g (structure.)390 3396 y Ff(len)p Fs(:)41 b(n)m(um)m(b)s(er)29 b(of)h(b)m(ytes)h(of)g(*der:)40 b(der[0]..der[len-1])390 3530 y Ff(errorDescription)p Fs(:)h(n)m(ull-terminated)32 b(string)e(con)m(tains)h(details)h(when)d(an)h(error)g(o)s(ccurred.)390 3664 y(Fill)41 b(the)g(elemen)m(t)g(named)f Fl(ELEMENTNAME)d Fs(with)j(v)-5 b(alues)40 b(of)h(a)f(DER)g(enco)s(ding)g(string.)70 b(The)390 3774 y(structure)36 b(m)m(ust)h(just)f(b)s(e)g(created)i (with)e(function)h Fl(asn1_create_element\(\))31 b Fs(.)60 b(The)36 b(DER)390 3884 y(v)m(ector)d(m)m(ust)e(con)m(tain)h(the)f (enco)s(ding)g(string)g(of)g(the)h(whole)f Fl(STRUCTURE)d Fs(.)43 b(If)31 b(an)g(error)f(o)s(ccurs)390 3993 y(during)f(the)i (deco)s(ding)f(pro)s(cedure,)f(the)i(*)g Fl(STRUCTURE)d Fs(is)i(deleted)h(and)f(set)h(equal)g(to)g Fl(NULL)e Fs(.)390 4128 y(This)h(function)h(is)h(deprecated)f(and)g(ma)m(y)h (just)f(b)s(e)f(an)h(alias)i(to)f(asn1)p 2820 4128 28 4 v 40 w(der)p 2987 4128 V 40 w(deco)s(ding)f(in)g(future)390 4237 y(v)m(ersions.)41 b(Use)31 b Fl(asn1_der_decoding\(\))25 b Fs(instead.)390 4372 y Fe(Returns:)63 b Fl(ASN1_SUCCESS)39 b Fs(if)j(DER)g(enco)s(ding)g(OK,)f Fl(ASN1_ELEMENT_NOT_FOUND)36 b Fs(if)42 b(ELE-)390 4481 y(MENT)24 b(is)h Fl(NULL)e Fs(or)h Fl(elementName)d Fs(==)j(NULL,)g(and)g Fl(ASN1_TAG_ERROR)d Fs(or)j Fl(ASN1_DER_ERROR)390 4591 y Fs(if)30 b(the)h(der)f(enco)s (ding)g(do)s(esn't)g(matc)m(h)h(the)g(structure)f Fl(structure)e Fs(\(*ELEMENT)i(deleted\).)150 4790 y Fk(asn1)p 396 4790 37 5 v 55 w(der)p 625 4790 V 54 w(deco)s(ding)p 1153 4790 V 55 w(startEnd)3350 4986 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_der_decoding_sta)q(rtEn)q(d)f Fi(\()p Fh(asn1)p 2001 4986 30 5 v 44 w(no)s(de)34 b Fg(element)p Fh(,)h(const)e(v)m(oid)565 5096 y(*)d Fg(ider)p Fh(,)i(in)m(t)e Fg(ider_len)p Fh(,)j(const)e(c)m(har)g(*)f Fg(name_element)p Fh(,)k(in)m(t)c(*)g Fg(start)p Fh(,)i(in)m(t)f(*)f Fg(end)p Fi(\))390 5206 y Ff(elemen)m(t)r Fs(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h(elemen)m(t)390 5340 y Ff(ider)7 b Fs(:)40 b(v)m(ector)32 b(that)f(con)m(tains)g(the)g(DER)g(enco)s(ding.) p eop end %%Page: 21 24 TeXDict begin 21 23 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(21)390 299 y Ff(ider)p 548 299 28 4 v 40 w(len)p Fs(:)41 b(n)m(um)m(b)s(er)29 b(of)h(b)m(ytes)h(of)g(*)f Fl(ider)g Fs(:)40 b Fl(ider)29 b Fs([0]..)42 b Fl(ider)30 b Fs([len-1])390 426 y Ff(name)p 608 426 V 40 w(elemen)m(t)r Fs(:)42 b(an)31 b(elemen)m(t)g(of)g(NAME)g (structure.)390 552 y Ff(start)r Fs(:)41 b(the)31 b(p)s(osition)f(of)h (the)f(\014rst)g(b)m(yte)h(of)g(NAME)p 2189 552 V 40 w(ELEMENT)f(deco)s(ding)g(\()h Fl(ider)e Fs([*start]\))390 679 y Ff(end)t Fs(:)40 b(the)30 b(p)s(osition)h(of)f(the)h(last)g(b)m (yte)g(of)g(NAME)p 2129 679 V 40 w(ELEMENT)f(deco)s(ding)g(\()h Fl(ider)e Fs([*end]\))390 806 y(Find)45 b(the)h(start)g(and)f(end)g(p)s (oin)m(t)g(of)h(an)f(elemen)m(t)i(in)e(a)h(DER)g(enco)s(ding)f(string.) 87 b(I)45 b(mean)390 915 y(that)35 b(if)f(y)m(ou)h(ha)m(v)m(e)h(a)e (der)g(enco)s(ding)g(and)g(y)m(ou)h(ha)m(v)m(e)g(already)g(used)f(the)g (function)g Fl(asn1_der_)390 1025 y(decoding\(\))22 b Fs(to)j(\014ll)g(a)g(structure,)h(it)f(ma)m(y)h(happ)s(en)d(that)i(y)m (ou)g(w)m(an)m(t)h(to)f(\014nd)e(the)i(piece)h(of)f(string)390 1134 y(concerning)31 b(an)f(elemen)m(t)i(of)e(the)h(structure.)390 1261 y(One)f(example)h(is)f(the)h(sequence)g Fl(")p Fs (tbsCerti\014cate)p Fl(")g Fs(inside)f(an)g(X509)i(certi\014cate.)390 1388 y(Note)38 b(that)g(since)f(libtasn1)g(3.7)h(the)f Fl(ider)f Fs(and)g Fl(ider_len)f Fs(parameters)i(can)g(b)s(e)f (omitted,)k(if)390 1497 y(the)31 b(elemen)m(t)g(is)g(already)g(deco)s (ded)f(using)g Fl(asn1_der_decoding\(\))25 b Fs(.)390 1624 y Fe(Returns:)63 b Fl(ASN1_SUCCESS)39 b Fs(if)j(DER)g(enco)s(ding) g(OK,)f Fl(ASN1_ELEMENT_NOT_FOUND)36 b Fs(if)42 b(ELE-)390 1734 y(MENT)37 b(is)g Fl(asn1_node)e Fs(EMPTY)h(or)h Fl(name_element)d Fs(is)j(not)g(a)h(v)-5 b(alid)37 b(elemen)m(t,)j Fl(ASN1_TAG_)390 1843 y(ERROR)j Fs(or)h Fl(ASN1_DER_ERROR)d Fs(if)j(the)h(der)f(enco)s(ding)g(do)s(esn't)g(matc)m(h)i(the)e (structure)g(ELE-)390 1953 y(MENT.)150 2137 y Fk(asn1)p 396 2137 37 5 v 55 w(expand)p 836 2137 V 54 w(an)m(y)p 1080 2137 V 53 w(de\014ned)p 1517 2137 V 55 w(b)m(y)3350 2318 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_expand_any_defin)q (ed_b)q(y)f Fi(\()p Fh(asn1)p 2001 2318 30 5 v 44 w(no)s(de)p 2252 2318 V 44 w(const)34 b Fg(definitions)p Fh(,)565 2427 y(asn1)p 766 2427 V 44 w(no)s(de)g(*)f Fg(element)p Fi(\))390 2537 y Ff(de\014nitions)t Fs(:)40 b(ASN1)31 b(de\014nitions)390 2664 y Ff(elemen)m(t)r Fs(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h(structure)390 2790 y(Expands)36 b(ev)m(ery)j Fl(")p Fs(ANY)f(DEFINED)g(BY)p Fl(")g Fs(elemen)m(t)h(of)f(a)g (structure)g(created)g(from)g(a)g(DER)390 2900 y(deco)s(ding)c(pro)s (cess)g(\(asn1)p 1314 2900 28 4 v 41 w(der)p 1482 2900 V 40 w(deco)s(ding)g(function\).)53 b(The)34 b(elemen)m(t)i(ANY)f(m)m (ust)f(b)s(e)g(de\014ned)390 3009 y(b)m(y)26 b(an)f(OBJECT)g (IDENTIFIER.)h(The)f(t)m(yp)s(e)h(used)f(to)i(expand)e(the)h(elemen)m (t)h(ANY)g(is)f(the)g(\014rst)390 3119 y(one)31 b(follo)m(wing)h(the)e (de\014nition)g(of)h(the)f(actual)i(v)-5 b(alue)31 b(of)f(the)h(OBJECT) e(IDENTIFIER.)390 3246 y Fe(Returns:)55 b Fl(ASN1_SUCCESS)35 b Fs(if)j(Substitution)f(OK,)g Fl(ASN1_ERROR_TYPE_ANY)c Fs(if)k(some)i Fl(")p Fs(ANY)390 3355 y(DEFINED)34 b(BY)p Fl(")f Fs(elemen)m(t)i(couldn't)e(b)s(e)g(expanded)f(due)g(to)i(a)f (problem)g(in)g(OBJECT)p 3504 3355 V 39 w(ID)g(-)p Fl(>)390 3465 y Fs(TYPE)d(asso)s(ciation,)i(or)f(other)f(error)g(co)s(des)h(dep) s(ending)e(on)h(DER)g(deco)s(ding.)150 3649 y Fk(asn1)p 396 3649 37 5 v 55 w(expand)p 836 3649 V 54 w(o)s(ctet)p 1161 3649 V 53 w(string)3350 3830 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_expand_octet_str)q(ing)f Fi(\()p Fh(asn1)p 1896 3830 30 5 v 44 w(no)s(de)p 2147 3830 V 45 w(const)33 b Fg(definitions)p Fh(,)565 3939 y(asn1)p 766 3939 V 44 w(no)s(de)f(*)f Fg(element)p Fh(,)i(const)f(c)m(har)g(*)f Fg(octetName)p Fh(,)j(const)e(c)m(har)g(*)f Fg(objectName)p Fi(\))390 4049 y Ff(de\014nitions)t Fs(:)40 b(ASN1)31 b(de\014nitions)390 4176 y Ff(elemen)m(t)r Fs(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h(structure)390 4302 y Ff(o)s(ctetName)5 b Fs(:)43 b(name)30 b(of)h(the)g(OCTECT)d(STRING)i(\014eld)g(to)h (expand.)390 4429 y Ff(ob)5 b(jectName)g Fs(:)45 b(name)31 b(of)h(the)g(OBJECT)e(IDENTIFIER)h(\014eld)g(to)i(use)e(to)h(de\014ne)f (the)g(t)m(yp)s(e)h(for)390 4539 y(expansion.)390 4665 y(Expands)23 b(an)h Fl(")p Fs(OCTET)e(STRING)p Fl(")i Fs(elemen)m(t)h(of)g(a)f(structure)g(created)h(from)f(a)h(DER)f(deco)s (ding)390 4775 y(pro)s(cess)39 b(\(the)h Fl(asn1_der_decoding\(\))34 b Fs(function\).)68 b(The)39 b(t)m(yp)s(e)h(used)f(for)g(expansion)g (is)h(the)390 4885 y(\014rst)c(one)h(follo)m(wing)h(the)f(de\014nition) g(of)f(the)h(actual)i(v)-5 b(alue)37 b(of)g(the)g(OBJECT)e(IDENTIFIER) 390 4994 y(indicated)c(b)m(y)f(OBJECTNAME.)390 5121 y Fe(Returns:)36 b Fl(ASN1_SUCCESS)18 b Fs(if)j(substitution)g(OK,)g Fl(ASN1_ELEMENT_NOT_FOUND)15 b Fs(if)22 b Fl(objectName)390 5230 y Fs(or)j Fl(octetName)e Fs(are)j(not)f(correct,)j Fl(ASN1_VALUE_NOT_VALID)20 b Fs(if)25 b(it)h(w)m(asn't)g(p)s(ossible)f (to)h(\014nd)e(the)390 5340 y(t)m(yp)s(e)31 b(to)g(use)f(for)g (expansion,)g(or)h(other)f(errors)g(dep)s(ending)f(on)h(DER)h(deco)s (ding.)p eop end %%Page: 22 25 TeXDict begin 22 24 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(22)150 299 y Fk(asn1)p 396 299 37 5 v 55 w(deco)s(de)p 818 299 V 54 w(simple)p 1214 299 V 55 w(der)3350 503 y Fs([F)-8 b(unction])-3599 b Fj(int)53 b(asn1_decode_simple_de)q(r)e Fi(\()p Fh(unsigned)35 b(in)m(t)f Fg(etype)p Fh(,)g(const)g(unsigned)565 613 y(c)m(har)f(*)f Fg(der)p Fh(,)h(unsigned)h(in)m(t)e Fg(_der_len)p Fh(,)i(const)f(unsigned)h(c)m(har)f(**)f Fg(str)p Fh(,)h(unsigned)565 722 y(in)m(t)g(*)g Fg(str_len)p Fi(\))390 832 y Ff(et)m(yp)s(e)5 b Fs(:)41 b(The)30 b(t)m(yp)s(e)h(of)f(the)h(string)f(to)h(b)s(e)f (enco)s(ded)g(\(ASN1)p 2444 832 28 4 v 41 w(ETYPE)p 2805 832 V 39 w(\))390 974 y Ff(der)7 b Fs(:)40 b(the)30 b(enco)s(ded)g (string)p 396 1116 V 430 1116 a Ff(der)p 563 1116 V 40 w(len)p Fs(:)40 b(the)31 b(b)m(ytes)g(of)f(the)h(enco)s(ded)f(string) 390 1258 y Ff(str)7 b Fs(:)40 b(a)31 b(p)s(oin)m(ter)f(to)h(the)g(data) 390 1400 y Ff(str)p 503 1400 V 40 w(len)p Fs(:)41 b(the)30 b(length)h(of)g(the)f(data)390 1542 y(Deco)s(des)35 b(a)f(simple)g(DER) g(enco)s(ded)f(t)m(yp)s(e)h(\(e.g.)52 b(a)35 b(string,)f(whic)m(h)g(is) g(not)g(constructed\).)51 b(The)390 1651 y(output)30 b(is)g(a)h(p)s(oin)m(ter)g(inside)f(the)g Fl(der)g Fs(.)390 1793 y Fe(Returns:)40 b Fl(ASN1_SUCCESS)27 b Fs(if)k(successful)f(or)g (an)g(error)g(v)-5 b(alue.)150 2000 y Fk(asn1)p 396 2000 37 5 v 55 w(deco)s(de)p 818 2000 V 54 w(simple)p 1214 2000 V 55 w(b)s(er)3350 2204 y Fs([F)d(unction])-3599 b Fj(int)53 b(asn1_decode_simple_be)q(r)e Fi(\()p Fh(unsigned)35 b(in)m(t)f Fg(etype)p Fh(,)g(const)g(unsigned)565 2314 y(c)m(har)g(*)f Fg(der)p Fh(,)h(unsigned)g(in)m(t)g Fg(_der_len)p Fh(,)h(unsigned)g(c)m(har)f(**)e Fg(str)p Fh(,)i(unsigned)h(in)m(t)e(*) 565 2423 y Fg(str_len)p Fh(,)i(unsigned)g(in)m(t)e(*)g Fg(ber_len)p Fi(\))390 2533 y Ff(et)m(yp)s(e)5 b Fs(:)41 b(The)30 b(t)m(yp)s(e)h(of)f(the)h(string)f(to)h(b)s(e)f(enco)s(ded)g (\(ASN1)p 2444 2533 28 4 v 41 w(ETYPE)p 2805 2533 V 39 w(\))390 2675 y Ff(der)7 b Fs(:)40 b(the)30 b(enco)s(ded)g(string)p 396 2817 V 430 2817 a Ff(der)p 563 2817 V 40 w(len)p Fs(:)40 b(the)31 b(b)m(ytes)g(of)f(the)h(enco)s(ded)f(string)390 2959 y Ff(str)7 b Fs(:)40 b(a)31 b(p)s(oin)m(ter)f(to)h(the)g(data)390 3101 y Ff(str)p 503 3101 V 40 w(len)p Fs(:)41 b(the)30 b(length)h(of)g(the)f(data)390 3243 y Ff(b)s(er)p 526 3243 V 39 w(len)p Fs(:)41 b(the)30 b(total)j(length)d(o)s(ccupied)h(b)m (y)f(BER)g(\(ma)m(y)i(b)s(e)d Fl(NULL)h Fs(\))390 3385 y(Deco)s(des)37 b(a)g(BER)g(enco)s(ded)f(t)m(yp)s(e.)60 b(The)36 b(output)g(is)g(an)h(allo)s(cated)h(v)-5 b(alue)37 b(of)g(the)g(data.)60 b(This)390 3494 y(deco)s(des)30 b(BER)h(STRINGS)e(only)-8 b(.)41 b(Other)30 b(t)m(yp)s(es)h(are)f(deco) s(ded)g(as)h(DER.)390 3636 y Fe(Returns:)40 b Fl(ASN1_SUCCESS)27 b Fs(if)k(successful)f(or)g(an)g(error)g(v)-5 b(alue.)150 3888 y Fr(4.4)68 b(Error)45 b(handling)g(functions)150 4112 y Fk(asn1)p 396 4112 37 5 v 55 w(p)s(error)3350 4316 y Fs([F)-8 b(unction])-3599 b Fj(void)54 b(asn1_perror)48 b Fi(\()p Fh(in)m(t)34 b Fg(error)p Fi(\))390 4426 y Ff(error)7 b Fs(:)40 b(is)30 b(an)h(error)f(returned)f(b)m(y)h(a)h (libtasn1)g(function.)390 4568 y(Prin)m(ts)26 b(a)g(string)h(to)f (stderr)g(with)g(a)g(description)g(of)h(an)f(error.)38 b(This)26 b(function)g(is)g(lik)m(e)h Fl(perror\(\))390 4678 y Fs(.)41 b(The)30 b(only)g(di\013erence)h(is)f(that)h(it)g (accepts)h(an)e(error)g(returned)f(b)m(y)i(a)f(libtasn1)h(function.)390 4819 y Fe(Since:)41 b Fs(1.6)150 5026 y Fk(asn1)p 396 5026 V 55 w(strerror)3350 5230 y Fs([F)-8 b(unction])-3599 b Fj(const)54 b(char)f(*)g(asn1_strerror)c Fi(\()p Fh(in)m(t)34 b Fg(error)p Fi(\))390 5340 y Ff(error)7 b Fs(:)40 b(is)30 b(an)h(error)f(returned)f(b)m(y)h(a)h(libtasn1)g(function.)p eop end %%Page: 23 26 TeXDict begin 23 25 bop 150 -116 a Fs(Chapter)30 b(4:)41 b(F)-8 b(unction)31 b(reference)2313 b(23)390 299 y(Returns)33 b(a)h(string)g(with)f(a)h(description)g(of)g(an)g(error.)50 b(This)33 b(function)h(is)g(similar)g(to)g(strerror.)390 408 y(The)c(only)h(di\013erence)g(is)g(that)g(it)g(accepts)h(an)e (error)g(\(n)m(um)m(b)s(er\))g(returned)g(b)m(y)g(a)h(libtasn1)h(func-) 390 518 y(tion.)390 653 y Fe(Returns:)40 b Fs(P)m(oin)m(ter)32 b(to)f(static)h(zero-terminated)g(string)f(describing)f(error)g(co)s (de.)390 787 y Fe(Since:)41 b Fs(1.6)150 1028 y Fr(4.5)68 b(Auxilliary)46 b(functions)150 1252 y Fk(asn1)p 396 1252 37 5 v 55 w(\014nd)p 655 1252 V 54 w(no)s(de)3350 1449 y Fs([F)-8 b(unction])-3599 b Fj(asn1_node)55 b(asn1_find_node)50 b Fi(\()p Fh(asn1)p 1687 1449 30 5 v 44 w(no)s(de)p 1938 1449 V 45 w(const)33 b Fg(pointer)p Fh(,)i(const)f(c)m(har)g(*)565 1558 y Fg(name)p Fi(\))390 1668 y Ff(p)s(oin)m(ter)7 b Fs(:)40 b(NODE)p 1021 1668 28 4 v 40 w(ASN)31 b(elemen)m(t)g(p)s(oin) m(ter.)390 1802 y Ff(name)5 b Fs(:)41 b(n)m(ull)30 b(terminated)h (string)f(with)g(the)h(elemen)m(t's)h(name)e(to)i(\014nd.)390 1937 y(Searc)m(hes)g(for)g(an)g(elemen)m(t)h(called)g Fl(name)e Fs(starting)h(from)f Fl(pointer)f Fs(.)45 b(The)31 b(name)h(is)g(comp)s(osed)390 2046 y(b)m(y)41 b(di\013eren)m(t)h(iden)m (ti\014ers)f(separated)g(b)m(y)g(dots.)73 b(When)41 b(*)h Fl(pointer)d Fs(has)i(a)g(name,)j(the)e(\014rst)390 2156 y(iden)m(ti\014er)26 b(m)m(ust)g(b)s(e)g(the)g(name)g(of)g(*)h Fl(pointer)d Fs(,)j(otherwise)g(it)f(m)m(ust)g(b)s(e)g(the)g(name)g(of) g(one)h(c)m(hild)390 2266 y(of)k(*)f Fl(pointer)f Fs(.)390 2400 y Fe(Returns:)40 b Fs(the)31 b(searc)m(h)g(result,)f(or)h Fl(NULL)e Fs(if)h(not)h(found.)150 2599 y Fk(asn1)p 396 2599 37 5 v 55 w(c)m(hec)m(k)p 744 2599 V 52 w(v)m(ersion)3350 2796 y Fs([F)-8 b(unction])-3599 b Fj(const)54 b(char)f(*)g (asn1_check_version)e Fi(\()p Fh(const)34 b(c)m(har)g(*)f Fg(req_version)p Fi(\))390 2906 y Ff(req)p 520 2906 28 4 v 40 w(v)m(ersion)p Fs(:)41 b(Required)30 b(v)m(ersion)h(n)m(um)m(b)s (er,)e(or)i Fl(NULL)e Fs(.)390 3040 y(Chec)m(k)e(that)h(the)f(v)m (ersion)g(of)g(the)g(library)g(is)g(at)g(minim)m(um)g(the)g(requested)f (one)i(and)e(return)g(the)390 3150 y(v)m(ersion)j(string;)g(return)d Fl(NULL)h Fs(if)h(the)h(condition)f(is)g(not)h(satis\014ed.)40 b(If)27 b(a)i Fl(NULL)e Fs(is)h(passed)f(to)i(this)390 3259 y(function,)h(no)h(c)m(hec)m(k)h(is)e(done,)g(but)g(the)h(v)m (ersion)f(string)h(is)f(simply)g(returned.)390 3394 y(See)h Fl(ASN1_VERSION)c Fs(for)j(a)h(suitable)f Fl(req_version)e Fs(string.)390 3528 y Fe(Returns:)43 b Fs(V)-8 b(ersion)32 b(string)g(of)g(run-time)f(library)-8 b(,)33 b(or)e Fl(NULL)g Fs(if)h(the)g(run-time)f(library)g(do)s(es)h(not)390 3638 y(meet)f(the)g(required)e(v)m(ersion)i(n)m(um)m(b)s(er.)p eop end %%Page: 24 27 TeXDict begin 24 26 bop 3659 -116 a Fs(24)150 299 y Fo(App)t(endix)52 b(A)81 b(Cop)l(ying)52 b(Information)150 613 y Fr(A.1)67 b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)1359 772 y Fs(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 902 y(Cop)m(yrigh)m(t)842 899 y(c)817 902 y Fp(\015)e Fs(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 1012 y Fl(http://fsf.org/)390 1231 y Fs(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f (to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1341 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f (is)f(not)h(allo)m(w)m(ed.)199 1471 y(0.)61 b(PREAMBLE)330 1601 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g (a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1710 y(useful)29 b(do)s(cumen)m(t)h Ff(free)36 b Fs(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1820 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1929 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 2039 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 2149 y(made)30 b(b)m(y)h(others.)330 2279 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2388 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2498 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2628 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2738 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2847 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2957 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 3066 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 3176 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3306 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3436 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3546 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3655 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3765 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3874 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3984 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 4094 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 4224 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4333 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4443 y(another)31 b(language.)330 4573 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4682 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4792 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4902 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 5011 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 5121 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 5230 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5340 y(them.)p eop end %%Page: 25 28 TeXDict begin 25 27 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(Cop)m(ying)h(Information)2140 b(25)330 299 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 408 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)330 518 y(under)f(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 628 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 737 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 878 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 988 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f (Do)s(cumen)m(t)h(is)f(released)g(under)330 1097 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m (v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 1207 y(b)s(e)k(at)h(most)g(25)g(w) m(ords.)330 1348 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g(the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m (hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1457 y(in)d(a)h(format)g(whose)g(sp)s(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g(public,)h(that)f(is)g(suitable)g (for)330 1567 y(revising)c(the)g(do)s(cumen)m(t)f(straigh)m(tforw)m (ardly)i(with)e(generic)i(text)g(editors)f(or)f(\(for)h(images)h(com-) 330 1677 y(p)s(osed)23 b(of)h(pixels\))g(generic)h(pain)m(t)f(programs) g(or)f(\(for)h(dra)m(wings\))g(some)g(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1786 y(editor,)k(and)f(that)g(is)g (suitable)h(for)f(input)f(to)i(text)g(formatters)f(or)g(for)g (automatic)i(translation)f(to)330 1896 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input)g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g(otherwise)330 2005 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g(whose)f(markup,)i(or)e (absence)h(of)g(markup,)g(has)g(b)s(een)f(arranged)g(to)330 2115 y(th)m(w)m(art)27 b(or)g(discourage)g(subsequen)m(t)f(mo)s (di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2225 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g(substan)m(tial)h(amoun) m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g(is)330 2334 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i(\\Opaque".)330 2475 y(Examples)49 b(of)f(suitable)i(formats)f(for)f(T)-8 b(ransparen)m(t)48 b(copies)i(include)e(plain)h(ASCI)s(I)e(without)330 2585 y(markup,)33 b(T)-8 b(exinfo)33 b(input)f(format,)i(LaT)1745 2604 y(E)1795 2585 y(X)f(input)f(format,)j(SGML)d(or)h(XML)h(using)e(a) h(publicly)330 2694 y(a)m(v)-5 b(ailable)36 b(DTD,)e(and)f (standard-conforming)h(simple)f(HTML,)h(P)m(ostScript)g(or)g(PDF)g (designed)330 2804 y(for)h(h)m(uman)g(mo)s(di\014cation.)57 b(Examples)35 b(of)h(transparen)m(t)f(image)i(formats)f(include)f(PNG,) h(X)m(CF)330 2913 y(and)h(JPG.)62 b(Opaque)36 b(formats)i(include)f (proprietary)g(formats)h(that)g(can)g(b)s(e)e(read)i(and)f(edited)330 3023 y(only)c(b)m(y)g(proprietary)f(w)m(ord)h(pro)s(cessors,)g(SGML)g (or)g(XML)g(for)g(whic)m(h)g(the)g(DTD)g(and/or)g(pro-)330 3133 y(cessing)26 b(to)s(ols)g(are)g(not)f(generally)i(a)m(v)-5 b(ailable,)29 b(and)24 b(the)i(mac)m(hine-generated)h(HTML,)e(P)m (ostScript)330 3242 y(or)30 b(PDF)h(pro)s(duced)e(b)m(y)h(some)h(w)m (ord)f(pro)s(cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3383 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m (ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f (follo)m(wing)330 3493 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g (legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h (app)s(ear)f(in)h(the)330 3602 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h (an)m(y)e(title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3712 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3821 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 3962 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 4072 y(to)c(the)g(public.)330 4213 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 4322 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 4432 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4542 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4651 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4761 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4902 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 5011 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 5121 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 5230 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5340 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)p eop end %%Page: 26 29 TeXDict begin 26 28 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(Cop)m(ying)h(Information)2140 b(26)199 299 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)330 445 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h(the)g(Do)s(cumen)m(t)h(in)f(an) m(y)g(medium,)h(either)g(commercially)h(or)330 555 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j(and)42 b(the)h(license)330 664 y(notice)37 b(sa)m(ying)g(this)e(License)i(applies)e(to)i(the)f(Do) s(cumen)m(t)g(are)g(repro)s(duced)e(in)i(all)g(copies,)j(and)330 774 y(that)27 b(y)m(ou)g(add)f(no)h(other)f(conditions)h(whatso)s(ev)m (er)h(to)f(those)g(of)g(this)f(License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 883 y(tec)m(hnical)35 b(measures)d(to)i (obstruct)f(or)g(con)m(trol)h(the)f(reading)g(or)g(further)e(cop)m (ying)j(of)f(the)g(copies)330 993 y(y)m(ou)25 b(mak)m(e)g(or)g (distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h (comp)s(ensation)f(in)f(exc)m(hange)j(for)d(copies.)330 1103 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f(n)m(um)m(b)s (er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g(the)f (conditions)330 1212 y(in)e(section)i(3.)330 1358 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 1468 y(displa)m(y)31 b(copies.)199 1614 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1760 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1870 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1979 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 2089 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2198 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 2308 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2418 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2527 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2637 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2746 y(resp)s(ects.)330 2892 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 3002 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 3112 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3258 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 3367 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3477 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3587 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3696 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3806 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3915 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 4025 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 4134 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 4244 y(edition)31 b(to)g(the)g(public.)330 4390 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4500 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4609 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4756 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4902 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 5011 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 5121 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 5230 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 5340 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)p eop end %%Page: 27 30 TeXDict begin 27 29 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(Cop)m(ying)h(Information)2140 b(27)357 299 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m (ers,)i(if)e(an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the) 510 408 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)510 518 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 628 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 758 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 867 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 977 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 1087 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1217 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 1326 y(publisher.)355 1456 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1587 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1696 y(cop)m(yrigh)m(t)g(notices.)365 1826 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1936 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 2045 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 2176 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 2285 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2415 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2545 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2655 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2765 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2874 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2984 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 3093 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3224 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 3333 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3443 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3552 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3662 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3771 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3902 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 4011 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 4121 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 4251 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 4361 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4470 y(section)c(titles.)341 4600 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4710 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4840 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4950 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 5080 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 5230 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5340 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)p eop end %%Page: 28 31 TeXDict begin 28 30 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(Cop)m(ying)h(Information)2140 b(28)330 299 y(y)m(our)32 b(option)h(designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e (in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)330 408 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 518 y(titles)32 b(m)m(ust)e(b)s(e)g (distinct)h(from)e(an)m(y)i(other)g(section)g(titles.)330 650 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section)i(En)m(titled)f (\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g(nothing)g(but) 330 759 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g (statemen)m(ts)i(of)330 869 y(p)s(eer)27 b(review)g(or)g(that)h(the)f (text)i(has)d(b)s(een)h(appro)m(v)m(ed)g(b)m(y)g(an)h(organization)h (as)e(the)h(authoritativ)m(e)330 978 y(de\014nition)i(of)h(a)f (standard.)330 1110 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g (up)e(to)i(\014v)m(e)g(w)m(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er) 30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1219 y(to)g(25)g(w)m(ords)e(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s(di\014ed)330 1329 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f(F)-8 b(ron)m(t-Co)m(v)m (er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1439 y(added)27 b(b)m(y)g(\(or)h(through) f(arrangemen)m(ts)h(made)g(b)m(y\))g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t)g(already)330 1548 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g(same)h(co)m(v)m (er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m(y)g(arrangemen)m (t)330 1658 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m(y)i(y)m(ou)f(are)f (acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g(not)f(add)g (another;)j(but)330 1767 y(y)m(ou)c(ma)m(y)h(replace)g(the)f(old)g (one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1877 y(added)e(the)g(old)h(one.)330 2008 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 2118 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2228 y(V)-8 b(ersion.)199 2359 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2491 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2600 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2710 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2819 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2929 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 3061 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 3170 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 3280 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3389 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3499 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3608 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3718 y(w)m(ork.)330 3850 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3959 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 4069 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 4178 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 4310 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4441 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4551 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4661 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4770 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4880 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 29 32 TeXDict begin 29 31 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(Cop)m(ying)h(Information)2140 b(29)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h(W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f(its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep)s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h(on)f(a)g(v)m (olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g(is)h(called) 330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i(resulting)e (from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g(the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m (ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g (aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g (other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h (not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h (Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g (cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i (of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h (particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h (\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g (cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h (terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h (reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d (license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h (reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h (holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g (reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m (ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f (License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g (violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h (of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h (terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) 330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g (reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f (the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f (an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end %%Page: 30 33 TeXDict begin 30 32 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(Cop)m(ying)h(Information)2140 b(30)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g(the)g(GNU)g(F) -8 b(ree)330 543 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to) g(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h (in)g(spirit)330 653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m (y)h(di\013er)f(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i (concerns.)330 762 y(See)c Fl(http://www.gnu.org/copy)o(left)o(/)p Fs(.)330 897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m (en)g(a)g(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g (License)h(\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f (follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f (can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f (License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m (tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g (for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m (table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h (facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g (w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i (edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s (oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m (orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m (ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g (organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e (or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h (as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h (licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h (License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f (part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) 330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j (w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s (er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h (Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g (time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) 330 4005 y(eligible)h(for)e(relicensing.)p eop end %%Page: 31 34 TeXDict begin 31 33 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(Cop)m(ying)h(Information)2140 b(31)150 299 y Fr(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f(for)g(y)l(our)g(do)t(cumen)l(ts) 150 458 y Fs(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m (t)g(y)m(ou)f(ha)m(v)m(e)i(written,)g(include)f(a)f(cop)m(y)i(of)f(the) f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g (follo)m(wing)i(cop)m(yrigh)m(t)g(and)e(license)h(notices)g(just)f (after)h(the)g(title)h(page:)468 680 y Fd(Copyright)42 b(\(C\))79 b Fc(year)g(your)40 b(name)p Fd(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h(distribute)g(and/or)g (modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g (GNU)g(Free)g(Documentation)i(License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h(published)h(by)d(the)h(Free)g (Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f (no)f(Front-Cover)h(Texts,)g(and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f(license)i(is)f(included)h (in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation) h(License''.)275 1337 y Fs(If)d(y)m(ou)h(ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 b(.)22 b(.)g(.)12 b(T)-8 b(exts.")31 b(line)g(with)f(this:)547 1559 y Fd(with)40 b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g(titles)p Fd(,)h(with)547 1646 y(the)f(Front-Cover)i(Texts)e(being)g Fc(list)p Fd(,)h(and)f(with)g(the)g(Back-Cover)h(Texts)547 1733 y(being)f Fc(list)p Fd(.)275 1868 y Fs(If)34 b(y)m(ou)i(ha)m(v)m (e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f(Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g(of)g(the)150 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)i(to)e (suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f (con)m(tains)i(non)m(trivial)g(examples)g(of)f(program)f(co)s(de,)j(w)m (e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g (parallel)h(under)e(y)m(our)h(c)m(hoice)i(of)e(free)g(soft)m(w)m(are)h (license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s(ermit)e(their)i(use)f(in)g(free)g(soft)m (w)m(are.)p eop end %%Page: 32 35 TeXDict begin 32 34 bop 3659 -116 a Fs(32)150 299 y Fo(Concept)52 b(Index)146 638 y Fr(A)150 759 y Fb(asn1Co)r(ding)27 b(program)16 b Fa(:)e(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(5)150 848 y(asn1Deco)r(ding)c(program)14 b Fa(:)g(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)29 b Fb(6)150 936 y(asn1P)n(arser)e(program)13 b Fa(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(5)150 1025 y(ASN.1)e(sc)n(hema)c Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(2)146 1293 y Fr(F)150 1414 y Fb(FDL,)26 b(GNU)f(F)-6 b(ree)25 b(Do)r(cumen)n (tation)h(License)8 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)22 b Fb(24)150 1503 y(F)-6 b(uture)25 b(dev)n(elopmen)n(ts)15 b Fa(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(4)146 1785 y Fr(H)150 1906 y Fb(Header)c(\014le)f(libtasn1.h)7 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22 b Fb(4)2021 638 y Fr(M)2025 756 y Fb(Main)k(t)n(yp)r(e)f(asn1)p 2550 756 24 4 v 34 w(no)r(de)7 b Fa(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)23 b Fb(4)2021 1021 y Fr(P)2025 1140 y Fb(P)n(orting)18 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(1)2021 1405 y Fr(S)2025 1523 y Fb(Supp)r(orted)24 b(ASN.1)h(t)n(yp)r(es,)h(list)g(of)21 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)35 b Fb(2)2021 1788 y Fr(T)2025 1906 y Fb(threads)19 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(1)p eop end %%Page: 33 36 TeXDict begin 33 35 bop 3659 -116 a Fs(33)150 299 y Fo(F)-13 b(unction)52 b(and)h(Data)i(Index)150 610 y Fd(asn1_array2tree)23 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34 b Fb(9)150 698 y Fd(asn1_bit_der)8 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(17)150 785 y Fd(asn1_check_version)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) 24 b Fb(23)150 873 y Fd(asn1_copy_node)f Fa(:)13 b(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(11)150 960 y Fd (asn1_create_element)7 b Fa(:)17 b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(10)150 1048 y Fd(asn1_decode_simple_ber)16 b Fa(:)j(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)31 b Fb(22)150 1135 y Fd(asn1_decode_simple_der)16 b Fa(:)j(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)31 b Fb(22)150 1223 y Fd(asn1_delete_element)9 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)24 b Fb(9)150 1310 y Fd(asn1_delete_structure)i Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(9)150 1398 y Fd(asn1_delete_structure2)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)34 b Fb(9)150 1485 y Fd(asn1_der_coding)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(17)150 1573 y Fd(asn1_der_decoding)12 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(20)150 1660 y Fd(asn1_der_decoding_element)9 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(20)150 1748 y Fd(asn1_der_decoding_startEnd)7 b Fa(:)18 b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)21 b Fb(20)150 1835 y Fd(asn1_der_decoding2)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(19)150 1922 y Fd(asn1_dup_node)h Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)37 b Fb(11)150 2010 y Fd(asn1_encode_simple_der)16 b Fa(:)j(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)31 b Fb(16)150 2097 y Fd (asn1_expand_any_defined_by)7 b Fa(:)18 b(:)13 b(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(21)150 2185 y Fd(asn1_expand_octet_string)11 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)26 b Fb(21)150 2272 y Fd(asn1_find_node)d Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(23)150 2360 y Fd(asn1_find_structure_from_oid)19 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(10)2025 610 y Fd(asn1_get_bit_der)15 b Fa(:)h(:)d(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)29 b Fb(19)2025 702 y Fd(asn1_get_length_ber)7 b Fa(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(18)2025 794 y Fd(asn1_get_length_der)7 b Fa(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) 22 b Fb(17)2025 886 y Fd(asn1_get_object_id_der)16 b Fa(:)i(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)31 b Fb(19)2025 979 y Fd(asn1_get_octet_der)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(18)2025 1071 y Fd(asn1_get_tag_der)15 b Fa(:)h(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)29 b Fb(18)2025 1163 y Fd(asn1_length_der)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(15)2025 1255 y Fd(asn1_number_of_elements)14 b Fa(:)k(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)28 b Fb(10)2025 1347 y Fd(asn1_object_id_der)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(16)2025 1439 y Fd(asn1_octet_der)f Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)34 b Fb(16)2025 1531 y Fd(asn1_parser2array)14 b Fa(:)j(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)29 b Fb(8)2025 1623 y Fd(asn1_parser2tree)17 b Fa(:)f(:)d(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)32 b Fb(8)2025 1715 y Fd(asn1_perror)10 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)25 b Fb(22)2025 1807 y Fd(asn1_print_structure)h Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(10)2025 1899 y Fd(asn1_read_node_value)26 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(15)2025 1992 y Fd(asn1_read_tag)25 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(15)2025 2084 y Fd(asn1_read_value)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)32 b Fb(13)2025 2176 y Fd(asn1_read_value_type)26 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(14)2025 2268 y Fd(asn1_strerror)25 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)37 b Fb(22)2025 2360 y Fd(asn1_write_value)15 b Fa(:)h(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)29 b Fb(11)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF libtasn1-4.16.0/README.md0000644000000000000000000000526513603737041011501 00000000000000|Branch|CI system|Status| |:----:|:-------:|-----:| |Master|Gitlab|[![build status](https://gitlab.com/gnutls/libtasn1/badges/master/pipeline.svg)](https://gitlab.com/gnutls/libtasn1/commits/master)[![coverage report](https://gitlab.com/gnutls/libtasn1/badges/master/coverage.svg)](https://gnutls.gitlab.io/libtasn1/coverage)| # libtasn1 This is GNU Libtasn1, a small ASN.1 library. The C library (libtasn1.*) is licensed under the GNU Lesser General Public License version 2.1 or later. See the file COPYING.LIB. The command line tool, self tests, examples, and other auxilliary files, are licensed under the GNU General Public License version 3.0 or later. See the file COPYING. ## Building the library We require several tools to build the software, including: * [Make](https://www.gnu.org/software/make/) * [Automake](https://www.gnu.org/software/automake/) (use 1.11.3 or later) * [Autoconf](https://www.gnu.org/software/autoconf/) * [Libtool](https://www.gnu.org/software/libtool/) * [Texinfo](https://www.gnu.org/software/texinfo/) * [help2man](http://www.gnu.org/software/help2man/) * [Tar](https://www.gnu.org/software/tar/) * [Gzip](https://www.gnu.org/software/gzip/) * [bison](https://www.gnu.org/software/bison/) * [Texlive & epsf](https://www.tug.org/texlive/) (for PDF manual) * [GTK-DOC](https://www.gtk.org/gtk-doc/) (for API manual) * [Git](https://git-scm.com/) * [libabigail](https://pagure.io/libabigail/) (for abi comparison in make dist) * [Valgrind](https://valgrind.org/) (optional) The required software is typically distributed with your operating system, and the instructions for installing them differ. Here are some hints: gNewSense/Debian/Ubuntu: ``` sudo apt-get install make git-core autoconf automake libtool sudo apt-get install texinfo texlive texlive-generic-recommended texlive-extra-utils sudo apt-get install help2man gtk-doc-tools valgrind abigail-tools ``` The next step is to run autoreconf, ./configure, etc: ``` $ ./bootstrap ``` Then build the project normally: ``` $ make $ make check ``` Happy hacking! ## Manual The manual is in the `doc/` directory of the release. You can also browse the manual online at: - https://gnutls.gitlab.io/libtasn1/ ## Code coverage report The coverage report is at: - https://gnutls.gitlab.io/libtasn1/coverage ## Issue trackers - [Main issue tracker](https://gitlab.com/gnutls/libtasn1/issues) - [oss-fuzz found issues](https://bugs.chromium.org/p/oss-fuzz/issues/list?q=libtasn1&can=2) ## Homepage The project homepage at the gnu site is at: http://www.gnu.org/software/libtasn1/ For any copyright year range specified as YYYY-ZZZZ in this package note that the range specifies every single year in that closed interval. libtasn1-4.16.0/THANKS0000644000000000000000000000236513246341643011135 00000000000000Here is a list of people, who helped the Libtasn1 project. Nikos Mavroyanopoulos Simon Josefsson Martijn Koster Albert Chin Bernard Leak Frediano ZIGLIO Evgeny Legerov Cyril Holweck Stephen Wrobleski Diego Pettenò Michele Baldessari Christian Grothoff Dagobert Michelsen David Reiser Didier Godefroy Andreas Metzler Ludovic Courtès Jeffrey Walton Matthew Hall ---------------------------------------------------------------------- Copyright (C) 2002-2014 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. libtasn1-4.16.0/m4-gl/0000755000000000000000000000000013615400132011201 500000000000000libtasn1-4.16.0/m4-gl/sys_types_h.m40000644000000000000000000000337313514402112013740 00000000000000# sys_types_h.m4 serial 9 dnl Copyright (C) 2011-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_TYPES_H], [ dnl Use sane struct stat types in OpenVMS 8.2 and later. AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) gl_NEXT_HEADERS([sys/types.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Whether to override the 'dev_t' and 'ino_t' types. m4_ifdef([gl_WINDOWS_STAT_INODES], [ AC_REQUIRE([gl_WINDOWS_STAT_INODES]) ], [ WINDOWS_STAT_INODES=0 ]) AC_SUBST([WINDOWS_STAT_INODES]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) # This works around a buggy version in autoconf <= 2.69. # See m4_version_prereq([2.70], [], [ # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e17a30e987d7ee695fb4294a82d987ec3dc9b974 m4_undefine([AC_HEADER_MAJOR]) AC_DEFUN([AC_HEADER_MAJOR], [AC_CHECK_HEADERS_ONCE([sys/types.h]) AC_CHECK_HEADER([sys/mkdev.h], [AC_DEFINE([MAJOR_IN_MKDEV], [1], [Define to 1 if `major', `minor', and `makedev' are declared in .])]) if test $ac_cv_header_sys_mkdev_h = no; then AC_CHECK_HEADER([sys/sysmacros.h], [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], [Define to 1 if `major', `minor', and `makedev' are declared in .])]) fi ]) ]) libtasn1-4.16.0/m4-gl/minmax.m40000644000000000000000000000245513514402112012660 00000000000000# minmax.m4 serial 4 dnl Copyright (C) 2005, 2009-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.53]) AC_DEFUN([gl_MINMAX], [ AC_REQUIRE([gl_PREREQ_MINMAX]) ]) # Prerequisites of lib/minmax.h. AC_DEFUN([gl_PREREQ_MINMAX], [ gl_MINMAX_IN_HEADER([limits.h]) gl_MINMAX_IN_HEADER([sys/param.h]) ]) dnl gl_MINMAX_IN_HEADER(HEADER) dnl The parameter has to be a literal header name; it cannot be macro, dnl nor a shell variable. (Because autoheader collects only AC_DEFINE dnl invocations with a literal macro name.) AC_DEFUN([gl_MINMAX_IN_HEADER], [ m4_pushdef([header], AS_TR_SH([$1])) m4_pushdef([HEADER], AS_TR_CPP([$1])) AC_CACHE_CHECK([whether <$1> defines MIN and MAX], [gl_cv_minmax_in_]header, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <$1> int x = MIN (42, 17);]], [[]])], [gl_cv_minmax_in_]header[=yes], [gl_cv_minmax_in_]header[=no])]) if test $gl_cv_minmax_in_[]header = yes; then AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, [Define to 1 if <$1> defines the MIN and MAX macros.]) fi m4_popdef([HEADER]) m4_popdef([header]) ]) libtasn1-4.16.0/m4-gl/limits-h.m40000644000000000000000000000244213514402112013111 00000000000000dnl Check whether limits.h has needed features. dnl Copyright 2016-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_DEFUN_ONCE([gl_LIMITS_H], [ gl_CHECK_NEXT_HEADERS([limits.h]) AC_CACHE_CHECK([whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.], [gl_cv_header_limits_width], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; ]])], [gl_cv_header_limits_width=yes], [gl_cv_header_limits_width=no])]) if test "$gl_cv_header_limits_width" = yes; then LIMITS_H= else LIMITS_H=limits.h fi AC_SUBST([LIMITS_H]) AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) ]) dnl Unconditionally enables the replacement of . AC_DEFUN([gl_REPLACE_LIMITS_H], [ AC_REQUIRE([gl_LIMITS_H]) LIMITS_H='limits.h' AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) ]) libtasn1-4.16.0/m4-gl/stdint.m40000644000000000000000000004334113514402112012673 00000000000000# stdint.m4 serial 53 dnl Copyright (C) 2001-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Bruno Haible. dnl Test whether is supported or must be substituted. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LIMITS_H]) AC_REQUIRE([gt_TYPE_WINT_T]) dnl Check for long long int and unsigned long long int. AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) if test $ac_cv_type_long_long_int = yes; then HAVE_LONG_LONG_INT=1 else HAVE_LONG_LONG_INT=0 fi AC_SUBST([HAVE_LONG_LONG_INT]) AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) if test $ac_cv_type_unsigned_long_long_int = yes; then HAVE_UNSIGNED_LONG_LONG_INT=1 else HAVE_UNSIGNED_LONG_LONG_INT=0 fi AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) dnl Check for , in the same way as gl_WCHAR_H does. AC_CHECK_HEADERS_ONCE([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) dnl Check for . dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi AC_SUBST([HAVE_INTTYPES_H]) dnl Check for . dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi AC_SUBST([HAVE_SYS_TYPES_H]) gl_CHECK_NEXT_HEADERS([stdint.h]) if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi AC_SUBST([HAVE_STDINT_H]) dnl Now see whether we need a substitute . if test $ac_cv_header_stdint_h = yes; then AC_CACHE_CHECK([whether stdint.h conforms to C99], [gl_cv_header_working_stdint_h], [gl_cv_header_working_stdint_h=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in " #endif ] gl_STDINT_INCLUDES [ #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0 / ia64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; ]])], [dnl Determine whether the various *_MIN, *_MAX macros are usable dnl in preprocessor expression. We could do it by compiling a test dnl program for each of these macros. It is faster to run a program dnl that inspects the macro expansion. dnl This detects a bug on HP-UX 11.23/ia64. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include ] gl_STDINT_INCLUDES [ #include #include #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; ]], [[ const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ]])], [gl_cv_header_working_stdint_h=yes], [], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac ]) ]) ]) fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 dnl Now see whether the system works without dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. AC_CACHE_CHECK([whether stdint.h predates C++11], [gl_cv_header_stdint_predates_cxx11_h], [gl_cv_header_stdint_predates_cxx11_h=yes AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include ] gl_STDINT_INCLUDES [ intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); ]])], [gl_cv_header_stdint_predates_cxx11_h=no])]) if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then AC_DEFINE([__STDC_CONSTANT_MACROS], [1], [Define to 1 if the system predates C++11.]) AC_DEFINE([__STDC_LIMIT_MACROS], [1], [Define to 1 if the system predates C++11.]) fi AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], [gl_cv_header_stdint_width], [gl_cv_header_stdint_width=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include ]gl_STDINT_INCLUDES[ int iw = UINTMAX_WIDTH; ]])], [gl_cv_header_stdint_width=yes])]) if test "$gl_cv_header_stdint_width" = yes; then STDINT_H= fi ;; *) dnl Check for , and for dnl (used in Linux libc4 >= 4.6.7 and libc5). AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi gl_STDINT_TYPE_PROPERTIES ;; esac dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. gl_REPLACE_LIMITS_H AC_SUBST([HAVE_C99_STDINT_H]) AC_SUBST([HAVE_SYS_BITYPES_H]) AC_SUBST([HAVE_SYS_INTTYPES_H]) AC_SUBST([STDINT_H]) AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) ]) dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) dnl Determine the size of each of the given types in bits. AC_DEFUN([gl_STDINT_BITSIZEOF], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to the number of bits in type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], [$2 #include ], [result=unknown]) eval gl_cv_bitsizeof_${gltype}=\$result ]) eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, dnl do a syntax check even on unused #if conditions and give an error dnl on valid C code like this: dnl #if 0 dnl # if > 32 dnl # endif dnl #endif result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) eval BITSIZEOF_${GLTYPE}=\$result done m4_foreach_w([gltype], [$1], [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) dnl Determine the signedness of each of the given types. dnl Define HAVE_SIGNED_TYPE if type is signed. AC_DEFUN([gl_CHECK_TYPES_SIGNED], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to 1 if ']gltype[' is a signed integer type.])]) for gltype in $1 ; do AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], result=yes, result=no) eval gl_cv_type_${gltype}_signed=\$result ]) eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done m4_foreach_w([gltype], [$1], [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) dnl Determine the suffix to use for integer constants of the given types. dnl Define t_SUFFIX for each such type. AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], [Define to l, ll, u, ul, ull, etc., as suitable for constants of type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for $gltype integer literal suffix], [gl_cv_type_${gltype}_suffix], [eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ extern $gltype foo; extern $gltype1 foo;]])], [eval gl_cv_type_${gltype}_suffix=\$glsuf]) eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done]) GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) done m4_foreach_w([gltype], [$1], [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) ]) dnl gl_STDINT_INCLUDES AC_DEFUN([gl_STDINT_INCLUDES], [[ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif ]]) dnl gl_STDINT_TYPE_PROPERTIES dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t dnl of interest to stdint.in.h. AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], [ AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_STDINT_BITSIZEOF([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 dnl requirement that wint_t is "unchanged by default argument promotions". dnl In this case gnulib's and override wint_t. dnl Set the variable BITSIZEOF_WINT_T accordingly. if test $GNULIB_OVERRIDES_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ]) libtasn1-4.16.0/m4-gl/stddef_h.m40000644000000000000000000000450113514402112013141 00000000000000dnl A placeholder for , for platforms that have issues. # stddef_h.m4 serial 6 dnl Copyright (C) 2009-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) STDDEF_H= dnl Test whether the type max_align_t exists and whether its alignment dnl "is as great as is supported by the implementation in all contexts". AC_CACHE_CHECK([for good max_align_t], [gl_cv_type_max_align_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif ]])], [gl_cv_type_max_align_t=yes], [gl_cv_type_max_align_t=no]) ]) if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 STDDEF_H=stddef.h fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include int test[2 * (sizeof NULL == sizeof (void *)) -1]; ]])], [gl_cv_decl_null_works=yes], [gl_cv_decl_null_works=no])]) if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi AC_SUBST([STDDEF_H]) AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) if test -n "$STDDEF_H"; then gl_NEXT_HEADERS([stddef.h]) fi ]) AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) libtasn1-4.16.0/m4-gl/gnulib-common.m40000644000000000000000000004050713514402112014135 00000000000000# gnulib-common.m4 serial 44 dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.62]) # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) ]) AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER))) # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) /* _Noreturn works as-is. */ # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) AH_VERBATIM([isoc99_inline], [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) AH_VERBATIM([unused_parameter], [/* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif /* The __malloc__ attribute was added in gcc 3. */ #if 3 <= __GNUC__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) #else # define _GL_ATTRIBUTE_MALLOC /* empty */ #endif ]) AH_VERBATIM([async_safe], [/* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE ]) dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ]) # gl_MODULE_INDICATOR_CONDITION # expands to a C preprocessor expression that evaluates to 1 or 0, depending # whether a gnulib module that has been requested shall be considered present # or not. m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) # gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) # sets the shell variable that indicates the presence of the given module to # a C preprocessor expression that will evaluate to 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # gl_MODULE_INDICATOR([modulename]) # defines a C macro indicating the presence of the given module # in a location where it can be used. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 0 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR], [ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [gl_MODULE_INDICATOR_CONDITION], [Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module $1 shall be considered present.]) ]) # gl_MODULE_INDICATOR_FOR_TESTS([modulename]) # defines a C macro indicating the presence of the given module # in lib or tests. This is useful to determine whether the module # should be tested. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], [Define to 1 when the gnulib module $1 should be tested.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) # ---------------------------------------------------- # Backport of autoconf-2.63b's macro. # Remove this macro when we can assume autoconf >= 2.64. m4_ifndef([AS_VAR_IF], [m4_define([AS_VAR_IF], [AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. # This is like AC_PROG_CC_C99, except that # - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC # , # but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 # . # Remaining problems: # - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options # to CC twice # . # - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. AC_DEFUN([gl_PROG_CC_C99], [ dnl Change that version number to the minimum Autoconf version that supports dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. m4_version_prereq([9.0], [AC_REQUIRE([AC_PROG_CC_C99])], [AC_REQUIRE([AC_PROG_CC_STDC])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) dnl The '][' hides this use from 'aclocal'. AC_BEFORE([$0], [A][M_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not dnl building with __ACK__. if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST dnl ARFLAGS variable (it is filed into Makefile.in directly by automake dnl script on-demand, if not specified by ./configure of course). dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block dnl because AM_PROG_AR is written so it could re-set AR variable even for dnl __ACK__. It may seem like its easier to avoid calling the macro here, dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good dnl default value and automake should usually know them). dnl dnl The '][' hides this use from 'aclocal'. m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) fi dnl In case the code above has not helped with setting AR/ARFLAGS, use dnl Automake-documented default values for AR and ARFLAGS, but prefer dnl ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cr' fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # AC_C_RESTRICT # This definition is copied from post-2.69 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed # once autoconf >= 2.70 can be assumed. It's painful to check version # numbers, and in practice this macro is more up-to-date than Autoconf # is, so override Autoconf unconditionally. AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } ]], [[int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done ]) AH_VERBATIM([restrict], [/* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ])# AC_C_RESTRICT # gl_BIGENDIAN # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. # Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some # macros invoke AC_C_BIGENDIAN with arguments. AC_DEFUN([gl_BIGENDIAN], [ AC_C_BIGENDIAN ]) # gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) # is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not # output a spurious "(cached)" mark in the midst of other configure output. # This macro should be used instead of AC_CACHE_VAL when it is not surrounded # by an AC_MSG_CHECKING/AC_MSG_RESULT pair. AC_DEFUN([gl_CACHE_VAL_SILENT], [ saved_as_echo_n="$as_echo_n" as_echo_n=':' AC_CACHE_VAL([$1], [$2]) as_echo_n="$saved_as_echo_n" ]) # AS_VAR_COPY was added in autoconf 2.63b m4_define_default([AS_VAR_COPY], [AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) libtasn1-4.16.0/m4-gl/visibility.m40000644000000000000000000000630113514402112013550 00000000000000# visibility.m4 serial 6 dnl Copyright (C) 2005, 2008, 2010-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Tests whether the compiler supports the command-line option dnl -fvisibility=hidden and the function and variable attributes dnl __attribute__((__visibility__("hidden"))) and dnl __attribute__((__visibility__("default"))). dnl Does *not* test for __visibility__("protected") - which has tricky dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on dnl Mac OS X. dnl Does *not* test for __visibility__("internal") - which has processor dnl dependent semantics. dnl Does *not* test for #pragma GCC visibility push(hidden) - which is dnl "really only recommended for legacy code". dnl Set the variable CFLAG_VISIBILITY. dnl Defines and sets the variable HAVE_VISIBILITY. AC_DEFUN([gl_VISIBILITY], [ AC_REQUIRE([AC_PROG_CC]) CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then dnl First, check whether -Werror can be added to the command line, or dnl whether it leads to an error because of some other option that the dnl user has put into $CC $CFLAGS $CPPFLAGS. AC_CACHE_CHECK([whether the -Werror option is usable], [gl_cv_cc_vis_werror], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_vis_werror=yes], [gl_cv_cc_vis_werror=no]) CFLAGS="$gl_save_CFLAGS" ]) dnl Now check whether visibility declarations are supported. AC_CACHE_CHECK([for simple visibility declarations], [gl_cv_cc_visibility], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" dnl We use the option -Werror and a function dummyfunc, because on some dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning dnl "visibility attribute not supported in this configuration; ignored" dnl at the first function definition in every compilation unit, and we dnl don't want to use the option in this case. if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void) {} ]], [[]])], [gl_cv_cc_visibility=yes], [gl_cv_cc_visibility=no]) CFLAGS="$gl_save_CFLAGS" ]) if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi AC_SUBST([CFLAG_VISIBILITY]) AC_SUBST([HAVE_VISIBILITY]) AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ]) libtasn1-4.16.0/m4-gl/manywarnings.m40000644000000000000000000002355313515421617014122 00000000000000# manywarnings.m4 serial 18 dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR) # -------------------------------------------------- # Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR. # Elements separated by whitespace. In set logic terms, the function # does OUTVAR = LISTVAR \ REMOVEVAR. AC_DEFUN([gl_MANYWARN_COMPLEMENT], [ gl_warn_set= set x $2; shift for gl_warn_item do case " $3 " in *" $gl_warn_item "*) ;; *) gl_warn_set="$gl_warn_set $gl_warn_item" ;; esac done $1=$gl_warn_set ]) # gl_MANYWARN_ALL_GCC(VARIABLE) # ----------------------------- # Add all documented GCC warning parameters to variable VARIABLE. # Note that you need to test them using gl_WARN_ADD if you want to # make sure your gcc understands it. # # The effects of this macro depend on the current language (_AC_LANG). AC_DEFUN([gl_MANYWARN_ALL_GCC], [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) # Specialization for _AC_LANG = C. # Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b. m4_defun([gl_MANYWARN_ALL_GCC(C)], [ AC_LANG_PUSH([C]) dnl First, check for some issues that only occur when combining multiple dnl gcc warning categories. AC_REQUIRE([AC_PROG_CC]) if test -n "$GCC"; then dnl Check if -W -Werror -Wno-missing-field-initializers is supported dnl with the current $CC $CFLAGS $CPPFLAGS. AC_CACHE_CHECK([whether -Wno-missing-field-initializers is supported], [gl_cv_cc_nomfi_supported], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_nomfi_supported=yes], [gl_cv_cc_nomfi_supported=no]) CFLAGS="$gl_save_CFLAGS" ]) if test "$gl_cv_cc_nomfi_supported" = yes; then dnl Now check whether -Wno-missing-field-initializers is needed dnl for the { 0, } construct. AC_CACHE_CHECK([whether -Wno-missing-field-initializers is needed], [gl_cv_cc_nomfi_needed], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[int f (void) { typedef struct { int a; int b; } s_t; s_t s1 = { 0, }; return s1.b; } ]], [[]])], [gl_cv_cc_nomfi_needed=no], [gl_cv_cc_nomfi_needed=yes]) CFLAGS="$gl_save_CFLAGS" ]) fi dnl Next, check if -Werror -Wuninitialized is useful with the dnl user's choice of $CFLAGS; some versions of gcc warn that it dnl has no effect if -O is not also used AC_CACHE_CHECK([whether -Wuninitialized is supported], [gl_cv_cc_uninitialized_supported], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wuninitialized" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_uninitialized_supported=yes], [gl_cv_cc_uninitialized_supported=no]) CFLAGS="$gl_save_CFLAGS" ]) fi # List all gcc warning categories. # To compare this list to your installed GCC's, run this Bash command: # # comm -3 \ # <((sed -n 's/^ *\(-[^ 0-9][^ ]*\) .*/\1/p' manywarnings.m4; \ # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec) | sort) \ # <(LC_ALL=C gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort) gl_manywarn_set= for gl_manywarn_item in -fno-common \ -W \ -Wabsolute-value \ -Waddress \ -Waddress-of-packed-member \ -Waggressive-loop-optimizations \ -Wall \ -Wattribute-warning \ -Wattributes \ -Wbad-function-cast \ -Wbool-compare \ -Wbool-operation \ -Wbuiltin-declaration-mismatch \ -Wbuiltin-macro-redefined \ -Wcannot-profile \ -Wcast-align \ -Wcast-align=strict \ -Wcast-function-type \ -Wchar-subscripts \ -Wclobbered \ -Wcomment \ -Wcomments \ -Wcoverage-mismatch \ -Wcpp \ -Wdangling-else \ -Wdate-time \ -Wdeprecated \ -Wdeprecated-declarations \ -Wdesignated-init \ -Wdisabled-optimization \ -Wdiscarded-array-qualifiers \ -Wdiscarded-qualifiers \ -Wdiv-by-zero \ -Wdouble-promotion \ -Wduplicated-branches \ -Wduplicated-cond \ -Wduplicate-decl-specifier \ -Wempty-body \ -Wendif-labels \ -Wenum-compare \ -Wexpansion-to-defined \ -Wextra \ -Wformat-contains-nul \ -Wformat-extra-args \ -Wformat-nonliteral \ -Wformat-security \ -Wformat-signedness \ -Wformat-y2k \ -Wformat-zero-length \ -Wframe-address \ -Wfree-nonheap-object \ -Whsa \ -Wif-not-aligned \ -Wignored-attributes \ -Wignored-qualifiers \ -Wimplicit \ -Wimplicit-function-declaration \ -Wimplicit-int \ -Wincompatible-pointer-types \ -Winit-self \ -Winline \ -Wint-conversion \ -Wint-in-bool-context \ -Wint-to-pointer-cast \ -Winvalid-memory-model \ -Winvalid-pch \ -Wlogical-not-parentheses \ -Wlogical-op \ -Wmain \ -Wmaybe-uninitialized \ -Wmemset-elt-size \ -Wmemset-transposed-args \ -Wmisleading-indentation \ -Wmissing-attributes \ -Wmissing-braces \ -Wmissing-declarations \ -Wmissing-field-initializers \ -Wmissing-include-dirs \ -Wmissing-parameter-type \ -Wmissing-profile \ -Wmissing-prototypes \ -Wmultichar \ -Wmultistatement-macros \ -Wnarrowing \ -Wnested-externs \ -Wnonnull \ -Wnonnull-compare \ -Wnull-dereference \ -Wodr \ -Wold-style-declaration \ -Wold-style-definition \ -Wopenmp-simd \ -Woverflow \ -Woverlength-strings \ -Woverride-init \ -Wpacked \ -Wpacked-bitfield-compat \ -Wpacked-not-aligned \ -Wparentheses \ -Wpointer-arith \ -Wpointer-compare \ -Wpointer-sign \ -Wpointer-to-int-cast \ -Wpragmas \ -Wpsabi \ -Wrestrict \ -Wreturn-local-addr \ -Wreturn-type \ -Wscalar-storage-order \ -Wsequence-point \ -Wshadow \ -Wshift-count-negative \ -Wshift-count-overflow \ -Wshift-negative-value \ -Wsizeof-array-argument \ -Wsizeof-pointer-div \ -Wsizeof-pointer-memaccess \ -Wstack-protector \ -Wstrict-aliasing \ -Wstrict-overflow \ -Wstrict-prototypes \ -Wstringop-truncation \ -Wsuggest-attribute=cold \ -Wsuggest-attribute=const \ -Wsuggest-attribute=format \ -Wsuggest-attribute=malloc \ -Wsuggest-attribute=noreturn \ -Wsuggest-attribute=pure \ -Wsuggest-final-methods \ -Wsuggest-final-types \ -Wswitch \ -Wswitch-bool \ -Wswitch-unreachable \ -Wsync-nand \ -Wsystem-headers \ -Wtautological-compare \ -Wtrampolines \ -Wtrigraphs \ -Wtype-limits \ -Wuninitialized \ -Wunknown-pragmas \ -Wunsafe-loop-optimizations \ -Wunused \ -Wunused-but-set-parameter \ -Wunused-but-set-variable \ -Wunused-function \ -Wunused-label \ -Wunused-local-typedefs \ -Wunused-macros \ -Wunused-parameter \ -Wunused-result \ -Wunused-value \ -Wunused-variable \ -Wvarargs \ -Wvariadic-macros \ -Wvector-operation-performance \ -Wvla \ -Wvolatile-register-var \ -Wwrite-strings \ \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # gcc --help=warnings outputs an unusual form for these options; list # them here so that the above 'comm' command doesn't report a false match. # Would prefer "min (PTRDIFF_MAX, SIZE_MAX)", but it must be a literal. # Also, AC_COMPUTE_INT requires it to fit in a long; it is 2**63 on # the only platforms where it does not fit in a long, so make that # a special case. AC_MSG_CHECKING([max safe object size]) AC_COMPUTE_INT([gl_alloc_max], [LONG_MAX < (PTRDIFF_MAX < (size_t) -1 ? PTRDIFF_MAX : (size_t) -1) ? -1 : PTRDIFF_MAX < (size_t) -1 ? (long) PTRDIFF_MAX : (long) (size_t) -1], [[#include #include #include ]], [gl_alloc_max=2147483647]) case $gl_alloc_max in -1) gl_alloc_max=9223372036854775807;; esac AC_MSG_RESULT([$gl_alloc_max]) gl_manywarn_set="$gl_manywarn_set -Walloc-size-larger-than=$gl_alloc_max" gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2" gl_manywarn_set="$gl_manywarn_set -Wattribute-alias=2" gl_manywarn_set="$gl_manywarn_set -Wformat-overflow=2" gl_manywarn_set="$gl_manywarn_set -Wformat-truncation=2" gl_manywarn_set="$gl_manywarn_set -Wimplicit-fallthrough=5" gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc" gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2" gl_manywarn_set="$gl_manywarn_set -Wstringop-overflow=2" gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2" gl_manywarn_set="$gl_manywarn_set -Wvla-larger-than=4031" # These are needed for older GCC versions. if test -n "$GCC"; then case `($CC --version) 2>/dev/null` in 'gcc (GCC) '[[0-3]].* | \ 'gcc (GCC) '4.[[0-7]].*) gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option" gl_manywarn_set="$gl_manywarn_set -funit-at-a-time" ;; esac fi # Disable specific options as needed. if test "$gl_cv_cc_nomfi_needed" = yes; then gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" fi if test "$gl_cv_cc_uninitialized_supported" = no; then gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" fi $1=$gl_manywarn_set AC_LANG_POP([C]) ]) # Specialization for _AC_LANG = C++. # Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b. m4_defun([gl_MANYWARN_ALL_GCC(C++)], [ gl_MANYWARN_ALL_GCC_CXX_IMPL([$1]) ]) libtasn1-4.16.0/m4-gl/string_h.m40000644000000000000000000001311113514402112013173 00000000000000# Configure a GNU-like replacement for . # Copyright (C) 2007-2019 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 22 # Written by Paul Eggert. AC_DEFUN([gl_HEADER_STRING_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_STRING_H_BODY]) ]) AC_DEFUN([gl_HEADER_STRING_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include ]], [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp]) ]) AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], [ GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO]) GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) libtasn1-4.16.0/m4-gl/gnulib-comp.m40000644000000000000000000002465113603737657013635 00000000000000# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2019 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file 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 file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([gl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable # Pre-early section. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_PROG_AR_RANLIB]) # Code from module absolute-header: # Code from module c-ctype: # Code from module extensions: # Code from module extern-inline: # Code from module gnumakefile: # Code from module include_next: # Code from module intprops: # Code from module lib-symbol-versions: # Code from module lib-symbol-visibility: # Code from module libc-config: # Code from module limits-h: # Code from module maintainer-makefile: # Code from module manywarnings: # Code from module minmax: # Code from module multiarch: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module stdbool: # Code from module stddef: # Code from module stdint: # Code from module string: # Code from module strverscmp: # Code from module sys_types: # Code from module useless-if-before-free: # Code from module valgrind-tests: # Code from module vc-list-files: # Code from module warnings: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([gl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='m4-gl' m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) m4_pushdef([gl_LIBSOURCES_LIST], []) m4_pushdef([gl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='lib/gl' AC_REQUIRE([gl_EXTERN_INLINE]) # Autoconf 2.61a.99 and earlier don't support linking a file only # in VPATH builds. But since GNUmakefile is for maintainer use # only, it does not matter if we skip the link with older autoconf. # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH # builds, so use a shell variable to bypass this. GNUmakefile=GNUmakefile m4_if(m4_version_compare([2.61a.100], m4_defn([m4_PACKAGE_VERSION])), [1], [], [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], [GNUmakefile=$GNUmakefile])]) gl_LD_VERSION_SCRIPT gl_VISIBILITY gl___INLINE gl_LIMITS_H AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER], [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])]) AC_REQUIRE([AC_PROG_SED]) AC_REQUIRE([AC_PROG_GREP]) gl_MINMAX gl_MULTIARCH gt_TYPE_SSIZE_T AM_STDBOOL_H gl_STDDEF_H gl_STDINT_H gl_HEADER_STRING_H gl_FUNC_STRVERSCMP if test $HAVE_STRVERSCMP = 0; then AC_LIBOBJ([strverscmp]) gl_PREREQ_STRVERSCMP fi gl_STRING_MODULE_INDICATOR([strverscmp]) gl_SYS_TYPES_H AC_PROG_MKDIR_P gl_VALGRIND_TESTS # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || for gl_file in ]gl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gl_LIBSOURCES_DIR]) m4_popdef([gl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) m4_pushdef([gltests_LIBSOURCES_LIST], []) m4_pushdef([gltests_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='tests-gl' changequote(,)dnl gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([gltests_WITNESS]) gl_module_indicator_condition=$gltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) gl_VALGRIND_TESTS m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(gltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || for gl_file in ]gltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gltests_LIBSOURCES_DIR]) m4_popdef([gltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) ]) LIBTESTS_LIBDEPS="$gltests_libdeps" AC_SUBST([LIBTESTS_LIBDEPS]) ]) # Like AC_LIBOBJ, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_LIBOBJ], [ AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gl_LIBSOURCES_DIR], [lib/gl]) m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_LIBOBJ], [ AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gltests_LIBSOURCES_DIR], [tests-gl]) m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([gl_FILE_LIST], [ build-aux/useless-if-before-free build-aux/vc-list-files lib/arg-nonnull.h lib/c++defs.h lib/c-ctype.c lib/c-ctype.h lib/cdefs.h lib/intprops.h lib/libc-config.h lib/limits.in.h lib/minmax.h lib/stdbool.in.h lib/stddef.in.h lib/stdint.in.h lib/string.in.h lib/strverscmp.c lib/sys_types.in.h lib/warn-on-use.h m4/00gnulib.m4 m4/__inline.m4 m4/absolute-header.m4 m4/extensions.m4 m4/extern-inline.m4 m4/gnulib-common.m4 m4/include_next.m4 m4/ld-version-script.m4 m4/limits-h.m4 m4/longlong.m4 m4/manywarnings-c++.m4 m4/manywarnings.m4 m4/minmax.m4 m4/multiarch.m4 m4/off_t.m4 m4/ssize_t.m4 m4/stdbool.m4 m4/stddef_h.m4 m4/stdint.m4 m4/string_h.m4 m4/strverscmp.m4 m4/sys_types_h.m4 m4/valgrind-tests.m4 m4/visibility.m4 m4/warn-on-use.m4 m4/warnings.m4 m4/wchar_t.m4 m4/wint_t.m4 tests=lib/arg-nonnull.h tests=lib/c++defs.h tests=lib/dummy.c tests=lib/warn-on-use.h top/GNUmakefile top/maint.mk ]) libtasn1-4.16.0/m4-gl/strverscmp.m40000644000000000000000000000120613514402112013570 00000000000000# strverscmp.m4 serial 8 dnl Copyright (C) 2002, 2005-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRVERSCMP], [ dnl Persuade glibc to declare strverscmp(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strverscmp]) if test $ac_cv_func_strverscmp = no; then HAVE_STRVERSCMP=0 fi ]) # Prerequisites of lib/strverscmp.c. AC_DEFUN([gl_PREREQ_STRVERSCMP], [ : ]) libtasn1-4.16.0/m4-gl/wint_t.m40000644000000000000000000000444313514402112012672 00000000000000# wint_t.m4 serial 7 dnl Copyright (C) 2003, 2007-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wint_t' type and whether gnulib's dnl or would, if present, override 'wint_t'. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) dnl Determine whether gnulib's or would, if present, dnl override 'wint_t'. AC_CACHE_CHECK([whether wint_t is too small], [gl_cv_type_wint_t_too_small], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; ]])], [gl_cv_type_wint_t_too_small=no], [gl_cv_type_wint_t_too_small=yes])]) if test $gl_cv_type_wint_t_too_small = yes; then GNULIB_OVERRIDES_WINT_T=1 else GNULIB_OVERRIDES_WINT_T=0 fi else GNULIB_OVERRIDES_WINT_T=0 fi AC_SUBST([GNULIB_OVERRIDES_WINT_T]) ]) dnl Prerequisites of the 'wint_t' override. AC_DEFUN([gl_TYPE_WINT_T_PREREQ], [ AC_CHECK_HEADERS_ONCE([crtdefs.h]) if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi AC_SUBST([HAVE_CRTDEFS_H]) ]) libtasn1-4.16.0/m4-gl/__inline.m40000644000000000000000000000142313514402112013135 00000000000000# Test for __inline keyword dnl Copyright 2017-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl___INLINE], [ AC_CACHE_CHECK([whether the compiler supports the __inline keyword], [gl_cv_c___inline], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int foo_t; static __inline foo_t foo (void) { return 0; }]], [[return foo ();]])], [gl_cv_c___inline=yes], [gl_cv_c___inline=no])]) if test $gl_cv_c___inline = yes; then AC_DEFINE([HAVE___INLINE], [1], [Define to 1 if the compiler supports the keyword '__inline'.]) fi ]) libtasn1-4.16.0/m4-gl/multiarch.m40000644000000000000000000000367413514402112013363 00000000000000# multiarch.m4 serial 7 dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine whether the compiler is or may be producing universal binaries. # # On Mac OS X 10.5 and later systems, the user can create libraries and # executables that work on multiple system types--known as "fat" or # "universal" binaries--by specifying multiple '-arch' options to the # compiler but only a single '-arch' option to the preprocessor. Like # this: # # ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CPP="gcc -E" CXXCPP="g++ -E" # # Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. AC_DEFUN_ONCE([gl_MULTIARCH], [ dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. gl_cv_c_multiarch=no AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; ]])], [ dnl Check for potential -arch flags. It is not universal unless dnl there are at least two -arch flags with different values. arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done ]) if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi AC_SUBST([APPLE_UNIVERSAL_BUILD]) ]) libtasn1-4.16.0/m4-gl/extensions.m40000644000000000000000000001572713514402112013574 00000000000000# serial 18 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2019 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git # Autoconf. Perhaps we can remove this once we can assume Autoconf # 2.70 or later everywhere, but since Autoconf mutates rapidly # enough in this area it's likely we'll need to redefine # AC_USE_SYSTEM_EXTENSIONS for quite some time. # If autoconf reports a warning # warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # the fix is # 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked # but always AC_REQUIREd, # 2) to ensure that for each occurrence of # AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) # or # AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # the corresponding gnulib module description has 'extensions' among # its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS # invocation occurs in gl_EARLY, not in gl_INIT. # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # # Remember that #undef in AH_VERBATIM gets replaced with #define by # AC_DEFINE. The goal here is to define all known feature-enabling # macros, then, if reports of conflicts are made, disable macros that # cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) if test "$MINIX" = yes; then AC_DEFINE([_POSIX_SOURCE], [1], [Define to 1 if you need to in order for 'stat' and other things to work.]) AC_DEFINE([_POSIX_1_SOURCE], [2], [Define to 2 if the system does not provide POSIX.1 features except with this defined.]) AC_DEFINE([_MINIX], [1], [Define to 1 if on MINIX.]) AC_DEFINE([_NETBSD_SOURCE], [1], [Define to 1 to make NetBSD features available. MINIX 3 needs this.]) fi dnl Use a different key than __EXTENSIONS__, as that name broke existing dnl configure.ac when using autoheader 2.62. AH_VERBATIM([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable NetBSD extensions on NetBSD. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD extensions on NetBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif ]) AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], [ac_cv_safe_to_define___extensions__], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # define __EXTENSIONS__ 1 ]AC_INCLUDES_DEFAULT])], [ac_cv_safe_to_define___extensions__=yes], [ac_cv_safe_to_define___extensions__=no])]) test $ac_cv_safe_to_define___extensions__ = yes && AC_DEFINE([__EXTENSIONS__]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_NETBSD_SOURCE]) AC_DEFINE([_OPENBSD_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) AC_DEFINE([__STDC_WANT_LIB_EXT2__]) AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) AC_DEFINE([_TANDEM_SOURCE]) AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], [ac_cv_should_define__xopen_source], [ac_cv_should_define__xopen_source=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include mbstate_t x;]])], [], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 500 #include mbstate_t x;]])], [ac_cv_should_define__xopen_source=yes])])]) test $ac_cv_should_define__xopen_source = yes && AC_DEFINE([_XOPEN_SOURCE], [500]) AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API]) ])# AC_USE_SYSTEM_EXTENSIONS # gl_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], [ dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. dnl gnulib does not need it. But if it gets required by third-party macros dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. AC_REQUIRE([AC_GNU_SOURCE]) AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) libtasn1-4.16.0/m4-gl/warnings.m40000644000000000000000000001016713515421617013232 00000000000000# warnings.m4 serial 14 dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # gl_AS_VAR_APPEND(VAR, VALUE) # ---------------------------- # Provide the functionality of AS_VAR_APPEND if Autoconf does not have it. m4_ifdef([AS_VAR_APPEND], [m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])], [m4_define([gl_AS_VAR_APPEND], [AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])]) # gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED], # [PROGRAM = AC_LANG_PROGRAM()]) # ----------------------------------------------------------------- # Check if the compiler supports OPTION when compiling PROGRAM. # # The effects of this macro depend on the current language (_AC_LANG). AC_DEFUN([gl_COMPILER_OPTION_IF], [ dnl FIXME: gl_Warn must be used unquoted until we can assume Autoconf dnl 2.64 or newer. AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl AS_LITERAL_IF([$1], [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))], [gl_positive="$1" case $gl_positive in -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;; esac m4_pushdef([gl_Positive], [$gl_positive])])dnl AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [ gl_save_compiler_FLAGS="$gl_Flags" gl_AS_VAR_APPEND(m4_defn([gl_Flags]), [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["]) AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])], [AS_VAR_SET(gl_Warn, [yes])], [AS_VAR_SET(gl_Warn, [no])]) gl_Flags="$gl_save_compiler_FLAGS" ]) AS_VAR_IF(gl_Warn, [yes], [$2], [$3]) m4_popdef([gl_Positive])dnl AS_VAR_POPDEF([gl_Flags])dnl AS_VAR_POPDEF([gl_Warn])dnl ]) # gl_UNKNOWN_WARNINGS_ARE_ERRORS # ------------------------------ # Clang doesn't complain about unknown warning options unless one also # specifies -Wunknown-warning-option -Werror. Detect this. # # The effects of this macro depend on the current language (_AC_LANG). AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS], [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) # Specialization for _AC_LANG = C. This macro can be AC_REQUIREd. # Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b. m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)], [ AC_LANG_PUSH([C]) gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL AC_LANG_POP([C]) ]) # Specialization for _AC_LANG = C++. This macro can be AC_REQUIREd. # Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b. m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)], [ AC_LANG_PUSH([C++]) gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL AC_LANG_POP([C++]) ]) # Specialization for _AC_LANG = Objective C. This macro can be AC_REQUIREd. # Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b. m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(Objective C)], [ AC_LANG_PUSH([Objective C]) gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL AC_LANG_POP([Objective C]) ]) AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL], [gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option], [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'], [gl_unknown_warnings_are_errors=])]) # gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS/WARN_CXXFLAGS], # [PROGRAM = AC_LANG_PROGRAM()]) # ----------------------------------------------------------- # Adds parameter to WARN_CFLAGS/WARN_CXXFLAGS if the compiler supports it # when compiling PROGRAM. For example, gl_WARN_ADD([-Wparentheses]). # # If VARIABLE is a variable name, AC_SUBST it. # # The effects of this macro depend on the current language (_AC_LANG). AC_DEFUN([gl_WARN_ADD], [AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS(]_AC_LANG[)]) gl_COMPILER_OPTION_IF([$1], [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_]_AC_LANG_PREFIX[FLAGS]], [[$2]]), [" $1"])], [], [$3]) m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])])], [AC_SUBST([WARN_]_AC_LANG_PREFIX[FLAGS])])dnl ]) # Local Variables: # mode: autoconf # End: libtasn1-4.16.0/m4-gl/wchar_t.m40000644000000000000000000000146213514402112013013 00000000000000# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include wchar_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) libtasn1-4.16.0/m4-gl/00gnulib.m40000644000000000000000000000415213514402112013003 00000000000000# 00gnulib.m4 serial 3 dnl Copyright (C) 2009-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts before all other dnl gnulib-provided .m4 files. It is needed until such time as we can dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and dnl m4_divert semantics. # Until autoconf 2.63, handling of the diversion stack required m4_init # to be called first; but this does not happen with aclocal. Wrapping # the entire execution in another layer of the diversion stack fixes this. # Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4 # for whether it was FIFO or LIFO; in order to properly balance with # m4_init, we need to undo our push just before anything wrapped within # the m4_init body. The way to ensure this is to wrap both sides of # m4_init with a one-shot macro that does the pop at the right time. m4_ifndef([_m4_divert_diversion], [m4_divert_push([KILL]) m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])]) m4_define([m4_init], [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])]) # AC_DEFUN_ONCE([NAME], VALUE) # ---------------------------- # Define NAME to expand to VALUE on the first use (whether by direct # expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. # Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This # definition is slower than the version in Autoconf 2.64, because it # can only use interfaces that existed since 2.59; but it achieves the # same effect. Quoting is necessary to avoid confusing Automake. m4_version_prereq([2.63.263], [], [m4_define([AC][_DEFUN_ONCE], [AC][_DEFUN([$1], [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl [AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file prior to all other gnulib .m4 files. AC_DEFUN([gl_00GNULIB]) libtasn1-4.16.0/m4-gl/longlong.m40000644000000000000000000001111613514402112013200 00000000000000# longlong.m4 serial 18 dnl Copyright (C) 1999-2007, 2009-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_PREREQ([2.62]) # Define HAVE_LONG_LONG_INT if 'long long int' works. # This can be faster than what's in Autoconf 2.62 through 2.68. # Note: If the type 'long long int' exists but is only 32 bits large # (as on some very old compilers), HAVE_LONG_LONG_INT will not be # defined. In this case you can treat 'long long int' like 'long int'. AC_DEFUN([AC_TYPE_LONG_LONG_INT], [ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], [ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. dnl If cross compiling, assume the bug is not important, since dnl nobody cross compiles for this platform as far as we know. AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[@%:@include @%:@ifndef LLONG_MAX @%:@ define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) @%:@ define LLONG_MAX (HALF - 1 + HALF) @%:@endif]], [[long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0;]])], [], [ac_cv_type_long_long_int=no], [:]) fi fi]) if test $ac_cv_type_long_long_int = yes; then AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) fi ]) # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. # This can be faster than what's in Autoconf 2.62 through 2.68. # Note: If the type 'unsigned long long int' exists but is only 32 bits # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT # will not be defined. In this case you can treat 'unsigned long long int' # like 'unsigned long int'. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], [ AC_CACHE_CHECK([for unsigned long long int], [ac_cv_type_unsigned_long_long_int], [ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then AC_LINK_IFELSE( [_AC_TYPE_LONG_LONG_SNIPPET], [], [ac_cv_type_unsigned_long_long_int=no]) fi]) if test $ac_cv_type_unsigned_long_long_int = yes; then AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) fi ]) # Expands to a C program that can be used to test for simultaneous support # of 'long long' and 'unsigned long long'. We don't want to say that # 'long long' is available if 'unsigned long long' is not, or vice versa, # because too many programs rely on the symmetry between signed and unsigned # integer types (excluding 'bool'). AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], [ AC_LANG_PROGRAM( [[/* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63;]], [[/* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull));]]) ]) libtasn1-4.16.0/m4-gl/warn-on-use.m40000644000000000000000000000435413514402112013542 00000000000000# warn-on-use.m4 serial 6 dnl Copyright (C) 2010-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) # --------------------------------------- # If the module 'posixcheck' is in use: # # For each whitespace-separated element in the list of NAMES, define # HAVE_RAW_DECL_name if the function has a declaration among INCLUDES # even after being undefined as a macro. # # See warn-on-use.h for some hints on how to poison function names, as # well as ideas on poisoning global variables and macros. NAMES may # include global variables, but remember that only functions work with # _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single # header, but if the replacement header pulls in other headers because # some systems declare functions in the wrong header, then INCLUDES # should do likewise. # # It is generally safe to assume declarations for functions declared # in the intersection of C89 and C11 (such as printf) without # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ m4_ifdef([gl_POSIXCHECK], [m4_foreach_w([gl_decl], [$2], [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), [Define to 1 if ]m4_defn([gl_decl])[ is declared even after undefining macros.])])dnl dnl FIXME: gl_Symbol must be used unquoted until we can assume dnl autoconf 2.64 or newer. for gl_func in m4_flatten([$2]); do AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl AC_CACHE_CHECK([whether $gl_func is declared without a macro], gl_Symbol, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], [@%:@undef $gl_func (void) $gl_func;])], [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) AS_VAR_IF(gl_Symbol, [yes], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) dnl shortcut - if the raw declaration exists, then set a cache dnl variable to allow skipping any later AC_CHECK_DECL efforts eval ac_cv_have_decl_$gl_func=yes]) AS_VAR_POPDEF([gl_Symbol])dnl done ]) ]) libtasn1-4.16.0/m4-gl/extern-inline.m40000644000000000000000000001156713514402112014154 00000000000000dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EXTERN_INLINE], [ AH_VERBATIM([extern_inline], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see and . */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) libtasn1-4.16.0/m4-gl/ssize_t.m40000644000000000000000000000146313514402112013045 00000000000000# ssize_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether ssize_t is defined. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) if test $gt_cv_ssize_t = no; then AC_DEFINE([ssize_t], [int], [Define as a signed type of the same size as size_t.]) fi ]) libtasn1-4.16.0/m4-gl/off_t.m40000644000000000000000000000100613514402112012453 00000000000000# off_t.m4 serial 1 dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check whether to override the 'off_t' type. dnl Set WINDOWS_64_BIT_OFF_T. AC_DEFUN([gl_TYPE_OFF_T], [ m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_OFF_T=0 ]) AC_SUBST([WINDOWS_64_BIT_OFF_T]) ]) libtasn1-4.16.0/m4-gl/stdbool.m40000644000000000000000000000671613603737656013070 00000000000000# Check for stdbool.h that conforms to C99. dnl Copyright (C) 2002-2006, 2009-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. #serial 7 # Prepare for substituting if it is not supported. AC_DEFUN([AM_STDBOOL_H], [ AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) # Define two additional variables used in the Makefile substitution. if test "$ac_cv_header_stdbool_h" = yes; then STDBOOL_H='' else STDBOOL_H='stdbool.h' fi AC_SUBST([STDBOOL_H]) AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi AC_SUBST([HAVE__BOOL]) ]) # AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) # This version of the macro is needed in autoconf <= 2.68. AC_DEFUN([AC_CHECK_HEADER_STDBOOL], [AC_CACHE_CHECK([for stdbool.h that conforms to C99], [ac_cv_header_stdbool_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; ]], [[ bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ]])], [ac_cv_header_stdbool_h=yes], [ac_cv_header_stdbool_h=no])]) AC_CHECK_TYPES([_Bool]) ]) libtasn1-4.16.0/m4-gl/include_next.m40000644000000000000000000002106113514402112014042 00000000000000# include_next.m4 serial 24 dnl Copyright (C) 2006-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Derek Price. dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER, dnl and PRAGMA_COLUMNS. dnl dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to dnl 'include' otherwise. dnl dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler dnl supports it in the special case that it is the first include directive in dnl the given file, or to 'include' otherwise. dnl dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, dnl so as to avoid GCC warnings when the gcc option -pedantic is used. dnl '#pragma GCC system_header' has the same effect as if the file was found dnl through the include search path specified with '-isystem' options (as dnl opposed to the search path specified with '-I' options). Namely, gcc dnl does not warn about some things, and on some systems (Solaris and Interix) dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead dnl of plain '__STDC__'. dnl dnl PRAGMA_COLUMNS can be used in files that override system header files, so dnl as to avoid compilation errors on HP NonStop systems when the gnulib file dnl is included by a system header file that does a "#pragma COLUMNS 80" (which dnl has the effect of truncating the lines of that file and all files that it dnl includes to 80 columns) and the gnulib file has lines longer than 80 dnl columns. AC_DEFUN([gl_INCLUDE_NEXT], [ AC_LANG_PREPROC_REQUIRE() AC_CACHE_CHECK([whether the preprocessor supports include_next], [gl_cv_have_include_next], [rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on dnl AIX 6.1 support include_next when used as first preprocessor directive dnl in a file, but not when preceded by another include directive. Check dnl for this bug by including . dnl Additionally, with this same compiler, include_next is a no-op when dnl used in a header file that was included by specifying its absolute dnl file name. Despite these two bugs, include_next is used in the dnl compiler's . By virtue of the second bug, we need to use dnl include_next as well in this case. cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=buggy], [gl_cv_have_include_next=no]) ]) CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ]) PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi AC_SUBST([INCLUDE_NEXT]) AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) AC_SUBST([PRAGMA_SYSTEM_HEADER]) AC_CACHE_CHECK([whether system header files limit the line length], [gl_cv_pragma_columns], [dnl HP NonStop systems, which define __TANDEM, have this misfeature. AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_pragma_columns=yes], [gl_cv_pragma_columns=no]) ]) if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------------ # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be # ''; otherwise define it to be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # Also, if #include_next works as first preprocessing directive in a file, # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be ''; otherwise define it to # be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # That way, a header file with the following line: # #@INCLUDE_NEXT@ @NEXT_FOO_H@ # or # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ # behaves (after sed substitution) as if it contained # #include_next # even if the compiler does not support include_next. # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) dnl FIXME: gl_next_header and gl_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_next_header], [gl_cv_next_]m4_defn([gl_HEADER_NAME])) if test $gl_cv_have_include_next = yes; then AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) else AC_CACHE_CHECK( [absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_next_header]), [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET(gl_header_exists) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) m4_if([$2], [check], [else AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) fi ]) ]) fi AC_SUBST( AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), [AS_VAR_GET(gl_next_header)]) if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'gl_HEADER_NAME'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=AS_VAR_GET(gl_next_header) fi AC_SUBST( AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), [$gl_next_as_first_directive]) AS_VAR_POPDEF([gl_next_header])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) libtasn1-4.16.0/m4-gl/absolute-header.m40000644000000000000000000001034713514402112014432 00000000000000# absolute-header.m4 serial 16 dnl Copyright (C) 2006-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price. # gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) # --------------------------------------- # Find the absolute name of a header file, testing first if the header exists. # If the header were sys/inttypes.h, this macro would define # ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h # in config.h # (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. AC_DEFUN([gl_ABSOLUTE_HEADER], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PREPROC_REQUIRE()dnl dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_absolute_header], [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_absolute_header]), [AS_VAR_PUSHDEF([ac_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl if test AS_VAR_GET(ac_header_exists) = yes; then gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) fi AS_VAR_POPDEF([ac_header_exists])dnl ])dnl AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), ["AS_VAR_GET(gl_absolute_header)"], [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) AS_VAR_POPDEF([gl_absolute_header])dnl ])dnl ])# gl_ABSOLUTE_HEADER # gl_ABSOLUTE_HEADER_ONE(HEADER) # ------------------------------ # Like gl_ABSOLUTE_HEADER, except that: # - it assumes that the header exists, # - it uses the current CPPFLAGS, # - it does not cache the result, # - it is silent. AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header files dnl that contain only a #include of other header files and no dnl non-comment tokens of their own. This leads to a failure to dnl detect the absolute name of , , dnl and others. The workaround is to force preservation of comments dnl through option -C. This ensures all necessary #line directives dnl are present. GCC supports option -C as well. case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac changequote(,) case "$host_os" in mingw*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo '$1' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' changequote([,]) dnl eval is necessary to expand gl_absname_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, dnl so use subshell. AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), [`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`]) ]) libtasn1-4.16.0/m4-gl/valgrind-tests.m40000644000000000000000000000237513515421617014352 00000000000000# valgrind-tests.m4 serial 4 dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # gl_VALGRIND_TESTS() # ------------------- # Check if valgrind is available, and set VALGRIND to it if available. AC_DEFUN([gl_VALGRIND_TESTS], [ AC_ARG_ENABLE([valgrind-tests], AS_HELP_STRING([--enable-valgrind-tests], [try to run self tests under valgrind]), [opt_valgrind_tests=$enableval], [opt_valgrind_tests=no]) # Run self-tests under valgrind? if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then AC_CHECK_PROGS([VALGRIND], [valgrind]) if test "$VALGRIND"; then AC_CACHE_CHECK([for valgrind options for tests], [gl_cv_opt_valgrind_tests], [gl_cv_opt_valgrind_tests="-q --error-exitcode=1 --leak-check=full" $VALGRIND $gl_valgrind_opts ls > /dev/null 2>&1 || gl_cv_opt_valgrind_tests=no]) if test "$gl_cv_opt_valgrind_tests" != no; then VALGRIND="$VALGRIND $gl_cv_opt_valgrind_tests" else VALGRIND= fi fi fi ]) libtasn1-4.16.0/m4-gl/ld-version-script.m40000644000000000000000000000317413514402112014752 00000000000000# ld-version-script.m4 serial 4 dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # FIXME: The test below returns a false positive for mingw # cross-compiles, 'local:' statements does not reduce number of # exported symbols in a DLL. Use --disable-ld-version-script to work # around the problem. # gl_LD_VERSION_SCRIPT # -------------------- # Check if LD supports linker scripts, and define automake conditional # HAVE_LD_VERSION_SCRIPT if so. AC_DEFUN([gl_LD_VERSION_SCRIPT], [ AC_ARG_ENABLE([ld-version-script], [AS_HELP_STRING([--enable-ld-version-script], [enable linker version script (default is enabled when possible)])], [have_ld_version_script=$enableval], [AC_CACHE_CHECK([if LD -Wl,--version-script works], [gl_cv_sys_ld_version_script], [gl_cv_sys_ld_version_script=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" echo foo >conftest.map AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [], [cat > conftest.map < #include #include #include #include #include #include #include #include "fuzzer.h" #ifdef TEST_RUN #include static void test_all_from(const char *dirname) { DIR *dirp; struct dirent *dp; char fname[1024]; int len; if ((dirp = opendir(dirname))) { while ((dp = readdir(dirp))) { if (*dp->d_name == '.') continue; len = snprintf(fname, sizeof(fname), "%s/%s", dirname, dp->d_name); if (len < 0 || len >= (int) sizeof(fname)) { fprintf(stderr, "File name truncation: %s/%s\n", dirname, dp->d_name); continue; } int fd; if ((fd = open(fname, O_RDONLY)) == -1) { fprintf(stderr, "Failed to open %s (%d)\n", fname, errno); continue; } struct stat st; if (fstat(fd, &st) != 0) { fprintf(stderr, "Failed to stat %d (%d)\n", fd, errno); close(fd); continue; } uint8_t *data = malloc(st.st_size); ssize_t n; if ((n = read(fd, data, st.st_size)) == st.st_size) { printf("testing %llu bytes from '%s'\n", (unsigned long long) st.st_size, fname); LLVMFuzzerTestOneInput(data, st.st_size); } else fprintf(stderr, "Failed to read %llu bytes from %s (%d), got %d\n", (unsigned long long) st.st_size, fname, errno, (int) n); free(data); close(fd); } closedir(dirp); } } int main(int argc, char **argv) { int len; /* if VALGRIND testing is enabled, we have to call ourselves with valgrind checking */ if (argc == 1) { const char *valgrind = getenv("TESTS_VALGRIND"); if (valgrind && *valgrind) { char cmd[1024]; /* avoid alloca / VLA / heap allocation */ len = snprintf(cmd, sizeof(cmd), "TESTS_VALGRIND="" %s %s", valgrind, argv[0]); if (len < 0 || len >= (int) sizeof(cmd)) return 1; /* failure on command truncation */ return system(cmd) != 0; } } const char *target = strrchr(argv[0], '/'); target = target ? target + 1 : argv[0]; char corporadir[1024]; /* avoid alloca / VLA / heap allocation */ len = snprintf(corporadir, sizeof(corporadir), SRCDIR "/%s.in", target); if (len < 0 || len >= (int) sizeof(corporadir)) return 1; /* failure on file name truncation */ test_all_from(corporadir); snprintf(corporadir, sizeof(corporadir), SRCDIR "/%s.repro", target); test_all_from(corporadir); return 0; } #else #ifndef __AFL_LOOP static int __AFL_LOOP(int n) { static int first = 1; if (first) { first = 0; return 1; } return 0; } #endif int main(int argc, char **argv) { int ret; unsigned char buf[64 * 1024]; while (__AFL_LOOP(10000)) { // only works with afl-clang-fast ret = fread(buf, 1, sizeof(buf), stdin); if (ret < 0) return 0; LLVMFuzzerTestOneInput(buf, ret); } return 0; } #endif /* TEST_RUN */ libtasn1-4.16.0/fuzz/libtasn1_gnutls_der_fuzzer.c0000644000000000000000000001330013565453074016731 00000000000000/* * Copyright(c) 2019 Free Software Foundation, Inc. * * This file is part of libtasn1. * * Libtasn1 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libtasn1 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libtasn1. If not, see . * * This fuzzer is testing arbitrary DER input data with GnuTLS's ASN.1 definition (lib/gnutls.asn). * So, any issues found here likely have a real world impact on every software using libgnutls. */ #include #include // assert #include // malloc, free #include // strcmp, memcpy #include "libtasn1.h" #include "fuzzer.h" /* * This is a ASN.1 definition array used by GnuTLS. * It is created from lib/gnutls.asn over at the GnuTLS project. */ const asn1_static_node gnutls_asn1_tab[] = { { "GNUTLS", 536872976, NULL }, { NULL, 1073741836, NULL }, { "RSAPublicKey", 1610612741, NULL }, { "modulus", 1073741827, NULL }, { "publicExponent", 3, NULL }, { "RSAPrivateKey", 1610612741, NULL }, { "version", 1073741827, NULL }, { "modulus", 1073741827, NULL }, { "publicExponent", 1073741827, NULL }, { "privateExponent", 1073741827, NULL }, { "prime1", 1073741827, NULL }, { "prime2", 1073741827, NULL }, { "exponent1", 1073741827, NULL }, { "exponent2", 1073741827, NULL }, { "coefficient", 1073741827, NULL }, { "otherPrimeInfos", 16386, "OtherPrimeInfos"}, { "ProvableSeed", 1610612741, NULL }, { "algorithm", 1073741836, NULL }, { "seed", 7, NULL }, { "OtherPrimeInfos", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "OtherPrimeInfo"}, { "OtherPrimeInfo", 1610612741, NULL }, { "prime", 1073741827, NULL }, { "exponent", 1073741827, NULL }, { "coefficient", 3, NULL }, { "AlgorithmIdentifier", 1610612741, NULL }, { "algorithm", 1073741836, NULL }, { "parameters", 541081613, NULL }, { "algorithm", 1, NULL }, { "DigestInfo", 1610612741, NULL }, { "digestAlgorithm", 1073741826, "DigestAlgorithmIdentifier"}, { "digest", 7, NULL }, { "DigestAlgorithmIdentifier", 1073741826, "AlgorithmIdentifier"}, { "DSAPublicKey", 1073741827, NULL }, { "DSAParameters", 1610612741, NULL }, { "p", 1073741827, NULL }, { "q", 1073741827, NULL }, { "g", 3, NULL }, { "DSASignatureValue", 1610612741, NULL }, { "r", 1073741827, NULL }, { "s", 3, NULL }, { "DSAPrivateKey", 1610612741, NULL }, { "version", 1073741827, NULL }, { "p", 1073741827, NULL }, { "q", 1073741827, NULL }, { "g", 1073741827, NULL }, { "Y", 1073741827, NULL }, { "priv", 3, NULL }, { "DHParameter", 1610612741, NULL }, { "prime", 1073741827, NULL }, { "base", 1073741827, NULL }, { "privateValueLength", 16387, NULL }, { "ECParameters", 1610612754, NULL }, { "namedCurve", 12, NULL }, { "ECPrivateKey", 1610612741, NULL }, { "Version", 1073741827, NULL }, { "privateKey", 1073741831, NULL }, { "parameters", 1610637314, "ECParameters"}, { NULL, 2056, "0"}, { "publicKey", 536895494, NULL }, { NULL, 2056, "1"}, { "PrincipalName", 1610612741, NULL }, { "name-type", 1610620931, NULL }, { NULL, 2056, "0"}, { "name-string", 536879115, NULL }, { NULL, 1073743880, "1"}, { NULL, 27, NULL }, { "KRB5PrincipalName", 1610612741, NULL }, { "realm", 1610620955, NULL }, { NULL, 2056, "0"}, { "principalName", 536879106, "PrincipalName"}, { NULL, 2056, "1"}, { "RSAPSSParameters", 1610612741, NULL }, { "hashAlgorithm", 1610637314, "AlgorithmIdentifier"}, { NULL, 2056, "0"}, { "maskGenAlgorithm", 1610637314, "AlgorithmIdentifier"}, { NULL, 2056, "1"}, { "saltLength", 1610653699, NULL }, { NULL, 1073741833, "20"}, { NULL, 2056, "2"}, { "trailerField", 536911875, NULL }, { NULL, 1073741833, "1"}, { NULL, 2056, "3"}, { "GOSTParameters", 1610612741, NULL }, { "publicKeyParamSet", 1073741836, NULL }, { "digestParamSet", 1073741836, NULL }, { "encryptionParamSet", 16396, NULL }, { "GOSTPrivateKey", 1073741831, NULL }, { "GOSTPrivateKeyOld", 3, NULL }, { NULL, 0, NULL } }; int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { static ASN1_TYPE _gnutls_gnutls_asn = ASN1_TYPE_EMPTY; static int first = 1; ASN1_TYPE dn; int res; if (size > 10000) // same as max_len = 10000 in .options file return 0; if (first) { first = 0; // from _gnutls_global_init() res = asn1_array2tree(gnutls_asn1_tab, &_gnutls_gnutls_asn, NULL); assert(res == ASN1_SUCCESS); } // from gnutls_dh_params_import_pkcs3() if ((res = asn1_create_element(_gnutls_gnutls_asn, "GNUTLS.DHParameter", &dn)) == ASN1_SUCCESS) { // from cert_get_issuer_dn() res = asn1_der_decoding(&dn, data, size, NULL); asn1_delete_structure(&dn); } // from _gnutls_x509_write_gost_params() if ((res = asn1_create_element(_gnutls_gnutls_asn, "GNUTLS.GOSTParameters", &dn)) == ASN1_SUCCESS) { if ((res = asn1_write_value(dn, "digestParamSet", "1.2.643.7.1.1.2.2", 1)) == ASN1_SUCCESS) { // from cert_get_issuer_dn() res = asn1_der_decoding(&dn, data, size, NULL); // from _gnutls_x509_der_encode() int dersize = 0; if ((res = asn1_der_coding(dn, "", NULL, &dersize, NULL)) == ASN1_MEM_ERROR) { void *der = malloc(dersize); assert(der); res = asn1_der_coding(dn, "", der, &dersize, NULL); free(der); } } asn1_delete_structure(&dn); } return 0; } libtasn1-4.16.0/fuzz/libtasn1_array2tree_fuzzer.c0000644000000000000000000000453013520774070016641 00000000000000/* * Copyright(c) 2019 Free Software Foundation, Inc. * * This file is part of libtasn1. * * Libtasn1 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libtasn1 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libtasn1. If not, see . * * This fuzzer is testing asn1_array2tree()'s robustness with arbitrary * input data. */ #include #include // assert #include // malloc, free #include // memcpy #include "libtasn1.h" #include "fuzzer.h" const asn1_static_node pkix_asn1_tab[] = { { "PKIX1Implicit88", 536875024, NULL }, { NULL, 0, NULL } }; #define NAMESIZE 20 #define VALUESIZE 20 struct fuzz_elem { unsigned int type; char name[NAMESIZE]; char value[VALUESIZE]; }; #define MAXELEM 100 #define MAXDATASIZE (100 * sizeof(struct fuzz_elem)) int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (size > MAXDATASIZE) // same as max_len = in .options file return 0; struct fuzz_elem *elem = (struct fuzz_elem *) malloc(size); assert(elem != NULL); memcpy(elem, data, size); int nelem = size / sizeof(struct fuzz_elem); asn1_static_node tab[MAXELEM + 1]; // avoid VLA here for (int it = 0; it < nelem; it++) { tab[it].type = elem[it].type; elem[it].name[NAMESIZE - 1] = 0; if (strcmp(elem[it].name, "NULL")) tab[it].name = elem[it].name; else tab[it].name = NULL; elem[it].value[VALUESIZE -1] = 0; if (strcmp(elem[it].value, "NULL")) tab[it].value = elem[it].value; else tab[it].value = NULL; } // end-of-array indicator tab[nelem].type = 0; tab[nelem].name = NULL; tab[nelem].value = NULL; int result; ASN1_TYPE node = ASN1_TYPE_EMPTY; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; result = asn1_array2tree(tab, &node, errorDescription); if (result == ASN1_SUCCESS) asn1_delete_structure(&node); free(elem); return 0; } libtasn1-4.16.0/fuzz/libtasn1_pkix_der_fuzzer.c0000644000000000000000000005000213565453074016370 00000000000000/* * Copyright(c) 2019 Free Software Foundation, Inc. * * This file is part of libtasn1. * * Libtasn1 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libtasn1 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libtasn1. If not, see . * * This fuzzer is testing arbitrary DER input data with GnuTLS's ASN.1 definition (lib/pkix.asn). * So, any issues found here likely have a real world impact on every software using libgnutls. */ #include #include // assert #include // malloc, free #include // strcmp, memcpy #include "libtasn1.h" #include "fuzzer.h" /* * This is the ASN.1 definition array used by GnuTLS. * It is created from lib/pkix.asn over at the GnuTLS project. */ static const asn1_static_node pkix_asn1_tab[] = { { "PKIX1", 536875024, NULL }, { NULL, 1073741836, NULL }, { "PrivateKeyUsagePeriod", 1610612741, NULL }, { "notBefore", 1610637349, NULL }, { NULL, 4104, "0"}, { "notAfter", 536895525, NULL }, { NULL, 4104, "1"}, { "AuthorityKeyIdentifier", 1610612741, NULL }, { "keyIdentifier", 1610637319, NULL }, { NULL, 4104, "0"}, { "authorityCertIssuer", 1610637314, "GeneralNames"}, { NULL, 4104, "1"}, { "authorityCertSerialNumber", 536895490, "CertificateSerialNumber"}, { NULL, 4104, "2"}, { "SubjectKeyIdentifier", 1073741831, NULL }, { "KeyUsage", 1073741830, NULL }, { "DirectoryString", 1610612754, NULL }, { "teletexString", 1612709918, NULL }, { "MAX", 524298, "1"}, { "printableString", 1612709919, NULL }, { "MAX", 524298, "1"}, { "universalString", 1612709920, NULL }, { "MAX", 524298, "1"}, { "utf8String", 1612709922, NULL }, { "MAX", 524298, "1"}, { "bmpString", 1612709921, NULL }, { "MAX", 524298, "1"}, { "ia5String", 538968093, NULL }, { "MAX", 524298, "1"}, { "SubjectAltName", 1073741826, "GeneralNames"}, { "GeneralNames", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "GeneralName"}, { "GeneralName", 1610612754, NULL }, { "otherName", 1610620930, "AnotherName"}, { NULL, 4104, "0"}, { "rfc822Name", 1610620957, NULL }, { NULL, 4104, "1"}, { "dNSName", 1610620957, NULL }, { NULL, 4104, "2"}, { "x400Address", 1610620941, NULL }, { NULL, 4104, "3"}, { "directoryName", 1610620939, NULL }, { NULL, 1073743880, "4"}, { NULL, 2, "RelativeDistinguishedName"}, { "ediPartyName", 1610620941, NULL }, { NULL, 4104, "5"}, { "uniformResourceIdentifier", 1610620957, NULL }, { NULL, 4104, "6"}, { "iPAddress", 1610620935, NULL }, { NULL, 4104, "7"}, { "registeredID", 536879116, NULL }, { NULL, 4104, "8"}, { "AnotherName", 1610612741, NULL }, { "type-id", 1073741836, NULL }, { "value", 541073421, NULL }, { NULL, 1073743880, "0"}, { "type-id", 1, NULL }, { "IssuerAltName", 1073741826, "GeneralNames"}, { "BasicConstraints", 1610612741, NULL }, { "cA", 1610645508, NULL }, { NULL, 131081, NULL }, { "pathLenConstraint", 537411587, NULL }, { "0", 10, "MAX"}, { "CRLDistributionPoints", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "DistributionPoint"}, { "DistributionPoint", 1610612741, NULL }, { "distributionPoint", 1610637314, "DistributionPointName"}, { NULL, 2056, "0"}, { "reasons", 1610637314, "ReasonFlags"}, { NULL, 4104, "1"}, { "cRLIssuer", 536895490, "GeneralNames"}, { NULL, 4104, "2"}, { "DistributionPointName", 1610612754, NULL }, { "fullName", 1610620930, "GeneralNames"}, { NULL, 4104, "0"}, { "nameRelativeToCRLIssuer", 536879106, "RelativeDistinguishedName"}, { NULL, 4104, "1"}, { "ReasonFlags", 1073741830, NULL }, { "ExtKeyUsageSyntax", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 12, NULL }, { "AuthorityInfoAccessSyntax", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "AccessDescription"}, { "AccessDescription", 1610612741, NULL }, { "accessMethod", 1073741836, NULL }, { "accessLocation", 2, "GeneralName"}, { "Attribute", 1610612741, NULL }, { "type", 1073741836, NULL }, { "values", 536870927, NULL }, { NULL, 13, NULL }, { "AttributeTypeAndValue", 1610612741, NULL }, { "type", 1073741836, NULL }, { "value", 13, NULL }, { "Name", 1610612754, NULL }, { "rdnSequence", 536870923, NULL }, { NULL, 2, "RelativeDistinguishedName"}, { "DistinguishedName", 1610612747, NULL }, { NULL, 2, "RelativeDistinguishedName"}, { "RelativeDistinguishedName", 1612709903, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "AttributeTypeAndValue"}, { "Certificate", 1610612741, NULL }, { "tbsCertificate", 1073741826, "TBSCertificate"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 6, NULL }, { "TBSCertificate", 1610612741, NULL }, { "version", 1610653699, NULL }, { NULL, 1073741833, "0"}, { NULL, 2056, "0"}, { "serialNumber", 1073741826, "CertificateSerialNumber"}, { "signature", 1073741826, "AlgorithmIdentifier"}, { "issuer", 1073741826, "Name"}, { "validity", 1073741826, "Validity"}, { "subject", 1073741826, "Name"}, { "subjectPublicKeyInfo", 1073741826, "SubjectPublicKeyInfo"}, { "issuerUniqueID", 1610637314, "UniqueIdentifier"}, { NULL, 4104, "1"}, { "subjectUniqueID", 1610637314, "UniqueIdentifier"}, { NULL, 4104, "2"}, { "extensions", 536895490, "Extensions"}, { NULL, 2056, "3"}, { "CertificateSerialNumber", 1073741827, NULL }, { "Validity", 1610612741, NULL }, { "notBefore", 1073741826, "Time"}, { "notAfter", 2, "Time"}, { "Time", 1610612754, NULL }, { "utcTime", 1073741860, NULL }, { "generalTime", 37, NULL }, { "UniqueIdentifier", 1073741830, NULL }, { "SubjectPublicKeyInfo", 1610612741, NULL }, { "algorithm", 1073741826, "AlgorithmIdentifier"}, { "subjectPublicKey", 6, NULL }, { "Extensions", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "Extension"}, { "Extension", 1610612741, NULL }, { "extnID", 1073741836, NULL }, { "critical", 1610645508, NULL }, { NULL, 131081, NULL }, { "extnValue", 7, NULL }, { "CertificateList", 1610612741, NULL }, { "tbsCertList", 1073741826, "TBSCertList"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 6, NULL }, { "TBSCertList", 1610612741, NULL }, { "version", 1073758211, NULL }, { "signature", 1073741826, "AlgorithmIdentifier"}, { "issuer", 1073741826, "Name"}, { "thisUpdate", 1073741826, "Time"}, { "nextUpdate", 1073758210, "Time"}, { "revokedCertificates", 1610629131, NULL }, { NULL, 536870917, NULL }, { "userCertificate", 1073741826, "CertificateSerialNumber"}, { "revocationDate", 1073741826, "Time"}, { "crlEntryExtensions", 16386, "Extensions"}, { "crlExtensions", 536895490, "Extensions"}, { NULL, 2056, "0"}, { "AlgorithmIdentifier", 1610612741, NULL }, { "algorithm", 1073741836, NULL }, { "parameters", 541081613, NULL }, { "algorithm", 1, NULL }, { "Dss-Sig-Value", 1610612741, NULL }, { "r", 1073741827, NULL }, { "s", 3, NULL }, { "Dss-Parms", 1610612741, NULL }, { "p", 1073741827, NULL }, { "q", 1073741827, NULL }, { "g", 3, NULL }, { "pkcs-7-ContentInfo", 1610612741, NULL }, { "contentType", 1073741836, NULL }, { "content", 541073421, NULL }, { NULL, 1073743880, "0"}, { "contentType", 1, NULL }, { "pkcs-7-DigestInfo", 1610612741, NULL }, { "digestAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "digest", 7, NULL }, { "pkcs-7-SignedData", 1610612741, NULL }, { "version", 1073741827, NULL }, { "digestAlgorithms", 1073741826, "pkcs-7-DigestAlgorithmIdentifiers"}, { "encapContentInfo", 1073741826, "pkcs-7-EncapsulatedContentInfo"}, { "certificates", 1610637314, "pkcs-7-CertificateSet"}, { NULL, 4104, "0"}, { "crls", 1610637314, "pkcs-7-CertificateRevocationLists"}, { NULL, 4104, "1"}, { "signerInfos", 2, "pkcs-7-SignerInfos"}, { "pkcs-7-DigestAlgorithmIdentifiers", 1610612751, NULL }, { NULL, 2, "AlgorithmIdentifier"}, { "pkcs-7-EncapsulatedContentInfo", 1610612741, NULL }, { "eContentType", 1073741836, NULL }, { "eContent", 536895501, NULL }, { NULL, 2056, "0"}, { "pkcs-7-CertificateRevocationLists", 1610612751, NULL }, { NULL, 13, NULL }, { "pkcs-7-CertificateChoices", 1610612754, NULL }, { "certificate", 13, NULL }, { "pkcs-7-CertificateSet", 1610612751, NULL }, { NULL, 2, "pkcs-7-CertificateChoices"}, { "IssuerAndSerialNumber", 1610612741, NULL }, { "issuer", 1073741826, "Name"}, { "serialNumber", 2, "CertificateSerialNumber"}, { "pkcs-7-SignerInfo", 1610612741, NULL }, { "version", 1073741827, NULL }, { "sid", 1073741826, "SignerIdentifier"}, { "digestAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signedAttrs", 1610637314, "SignedAttributes"}, { NULL, 4104, "0"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 1073741831, NULL }, { "unsignedAttrs", 536895490, "SignedAttributes"}, { NULL, 4104, "1"}, { "SignedAttributes", 1612709903, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "Attribute"}, { "SignerIdentifier", 1610612754, NULL }, { "issuerAndSerialNumber", 1073741826, "IssuerAndSerialNumber"}, { "subjectKeyIdentifier", 536879111, NULL }, { NULL, 4104, "0"}, { "pkcs-7-SignerInfos", 1610612751, NULL }, { NULL, 2, "pkcs-7-SignerInfo"}, { "pkcs-10-CertificationRequestInfo", 1610612741, NULL }, { "version", 1073741827, NULL }, { "subject", 1073741826, "Name"}, { "subjectPKInfo", 1073741826, "SubjectPublicKeyInfo"}, { "attributes", 536879106, "Attributes"}, { NULL, 4104, "0"}, { "Attributes", 1610612751, NULL }, { NULL, 2, "Attribute"}, { "pkcs-10-CertificationRequest", 1610612741, NULL }, { "certificationRequestInfo", 1073741826, "pkcs-10-CertificationRequestInfo"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 6, NULL }, { "pkcs-9-at-challengePassword", 1879048204, NULL }, { "iso", 1073741825, "1"}, { "member-body", 1073741825, "2"}, { "us", 1073741825, "840"}, { "rsadsi", 1073741825, "113549"}, { "pkcs", 1073741825, "1"}, { NULL, 1073741825, "9"}, { NULL, 1, "7"}, { "pkcs-9-challengePassword", 1610612754, NULL }, { "printableString", 1073741855, NULL }, { "utf8String", 34, NULL }, { "pkcs-9-localKeyId", 1073741831, NULL }, { "pkcs-8-PrivateKeyInfo", 1610612741, NULL }, { "version", 1073741827, NULL }, { "privateKeyAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "privateKey", 1073741831, NULL }, { "attributes", 536895490, "Attributes"}, { NULL, 4104, "0"}, { "pkcs-8-EncryptedPrivateKeyInfo", 1610612741, NULL }, { "encryptionAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "encryptedData", 2, "pkcs-8-EncryptedData"}, { "pkcs-8-EncryptedData", 1073741831, NULL }, { "pkcs-5-des-CBC-params", 1612709895, NULL }, { NULL, 1048586, "8"}, { "pkcs-5-des-EDE3-CBC-params", 1612709895, NULL }, { NULL, 1048586, "8"}, { "pkcs-5-aes128-CBC-params", 1612709895, NULL }, { NULL, 1048586, "16"}, { "pkcs-5-aes192-CBC-params", 1612709895, NULL }, { NULL, 1048586, "16"}, { "pkcs-5-aes256-CBC-params", 1612709895, NULL }, { NULL, 1048586, "16"}, { "Gost28147-89-Parameters", 1610612741, NULL }, { "iv", 1073741831, NULL }, { "encryptionParamSet", 12, NULL }, { "pkcs-5-PBE-params", 1610612741, NULL }, { "salt", 1073741831, NULL }, { "iterationCount", 3, NULL }, { "pkcs-5-PBES2-params", 1610612741, NULL }, { "keyDerivationFunc", 1073741826, "AlgorithmIdentifier"}, { "encryptionScheme", 2, "AlgorithmIdentifier"}, { "pkcs-5-PBKDF2-params", 1610612741, NULL }, { "salt", 1610612754, NULL }, { "specified", 1073741831, NULL }, { "otherSource", 2, "AlgorithmIdentifier"}, { "iterationCount", 1611137027, NULL }, { "1", 10, "MAX"}, { "keyLength", 1611153411, NULL }, { "1", 10, "MAX"}, { "prf", 16386, "AlgorithmIdentifier"}, { "pkcs-12-PFX", 1610612741, NULL }, { "version", 1610874883, NULL }, { "v3", 1, "3"}, { "authSafe", 1073741826, "pkcs-7-ContentInfo"}, { "macData", 16386, "pkcs-12-MacData"}, { "pkcs-12-PbeParams", 1610612741, NULL }, { "salt", 1073741831, NULL }, { "iterations", 3, NULL }, { "pkcs-12-MacData", 1610612741, NULL }, { "mac", 1073741826, "pkcs-7-DigestInfo"}, { "macSalt", 1073741831, NULL }, { "iterations", 536903683, NULL }, { NULL, 9, "1"}, { "pkcs-12-AuthenticatedSafe", 1610612747, NULL }, { NULL, 2, "pkcs-7-ContentInfo"}, { "pkcs-12-SafeContents", 1610612747, NULL }, { NULL, 2, "pkcs-12-SafeBag"}, { "pkcs-12-SafeBag", 1610612741, NULL }, { "bagId", 1073741836, NULL }, { "bagValue", 1614815245, NULL }, { NULL, 1073743880, "0"}, { "badId", 1, NULL }, { "bagAttributes", 536887311, NULL }, { NULL, 2, "Attribute"}, { "pkcs-12-CertBag", 1610612741, NULL }, { "certId", 1073741836, NULL }, { "certValue", 541073421, NULL }, { NULL, 1073743880, "0"}, { "certId", 1, NULL }, { "pkcs-12-CRLBag", 1610612741, NULL }, { "crlId", 1073741836, NULL }, { "crlValue", 541073421, NULL }, { NULL, 1073743880, "0"}, { "crlId", 1, NULL }, { "pkcs-12-SecretBag", 1610612741, NULL }, { "secretTypeId", 1073741836, NULL }, { "secretValue", 541073421, NULL }, { NULL, 1073743880, "0"}, { "secretTypeId", 1, NULL }, { "pkcs-7-Data", 1073741831, NULL }, { "pkcs-7-EncryptedData", 1610612741, NULL }, { "version", 1073741827, NULL }, { "encryptedContentInfo", 1073741826, "pkcs-7-EncryptedContentInfo"}, { "unprotectedAttrs", 536895490, "pkcs-7-UnprotectedAttributes"}, { NULL, 4104, "1"}, { "pkcs-7-EncryptedContentInfo", 1610612741, NULL }, { "contentType", 1073741836, NULL }, { "contentEncryptionAlgorithm", 1073741826, "pkcs-7-ContentEncryptionAlgorithmIdentifier"}, { "encryptedContent", 536895495, NULL }, { NULL, 4104, "0"}, { "pkcs-7-ContentEncryptionAlgorithmIdentifier", 1073741826, "AlgorithmIdentifier"}, { "pkcs-7-UnprotectedAttributes", 1612709903, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "Attribute"}, { "ProxyCertInfo", 1610612741, NULL }, { "pCPathLenConstraint", 1611153411, NULL }, { "0", 10, "MAX"}, { "proxyPolicy", 2, "ProxyPolicy"}, { "ProxyPolicy", 1610612741, NULL }, { "policyLanguage", 1073741836, NULL }, { "policy", 16391, NULL }, { "certificatePolicies", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "PolicyInformation"}, { "PolicyInformation", 1610612741, NULL }, { "policyIdentifier", 1073741836, NULL }, { "policyQualifiers", 538984459, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "PolicyQualifierInfo"}, { "PolicyQualifierInfo", 1610612741, NULL }, { "policyQualifierId", 1073741836, NULL }, { "qualifier", 541065229, NULL }, { "policyQualifierId", 1, NULL }, { "CPSuri", 1073741853, NULL }, { "UserNotice", 1610612741, NULL }, { "noticeRef", 1073758210, "NoticeReference"}, { "explicitText", 16386, "DisplayText"}, { "NoticeReference", 1610612741, NULL }, { "organization", 1073741826, "DisplayText"}, { "noticeNumbers", 536870923, NULL }, { NULL, 3, NULL }, { "DisplayText", 1610612754, NULL }, { "ia5String", 1612709917, NULL }, { "200", 524298, "1"}, { "visibleString", 1612709923, NULL }, { "200", 524298, "1"}, { "bmpString", 1612709921, NULL }, { "200", 524298, "1"}, { "utf8String", 538968098, NULL }, { "200", 524298, "1"}, { "OCSPRequest", 1610612741, NULL }, { "tbsRequest", 1073741826, "TBSRequest"}, { "optionalSignature", 536895490, "Signature"}, { NULL, 2056, "0"}, { "TBSRequest", 1610612741, NULL }, { "version", 1610653699, NULL }, { NULL, 1073741833, "0"}, { NULL, 2056, "0"}, { "requestorName", 1610637314, "GeneralName"}, { NULL, 2056, "1"}, { "requestList", 1610612747, NULL }, { NULL, 2, "Request"}, { "requestExtensions", 536895490, "Extensions"}, { NULL, 2056, "2"}, { "Signature", 1610612741, NULL }, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 1073741830, NULL }, { "certs", 536895499, NULL }, { NULL, 1073743880, "0"}, { NULL, 2, "Certificate"}, { "Request", 1610612741, NULL }, { "reqCert", 1073741826, "CertID"}, { "singleRequestExtensions", 536895490, "Extensions"}, { NULL, 2056, "0"}, { "CertID", 1610612741, NULL }, { "hashAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "issuerNameHash", 1073741831, NULL }, { "issuerKeyHash", 1073741831, NULL }, { "serialNumber", 2, "CertificateSerialNumber"}, { "OCSPResponse", 1610612741, NULL }, { "responseStatus", 1073741826, "OCSPResponseStatus"}, { "responseBytes", 536895490, "ResponseBytes"}, { NULL, 2056, "0"}, { "OCSPResponseStatus", 1610874901, NULL }, { "successful", 1073741825, "0"}, { "malformedRequest", 1073741825, "1"}, { "internalError", 1073741825, "2"}, { "tryLater", 1073741825, "3"}, { "sigRequired", 1073741825, "5"}, { "unauthorized", 1, "6"}, { "ResponseBytes", 1610612741, NULL }, { "responseType", 1073741836, NULL }, { "response", 7, NULL }, { "BasicOCSPResponse", 1610612741, NULL }, { "tbsResponseData", 1073741826, "ResponseData"}, { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "signature", 1073741830, NULL }, { "certs", 536895499, NULL }, { NULL, 1073743880, "0"}, { NULL, 2, "Certificate"}, { "ResponseData", 1610612741, NULL }, { "version", 1610653699, NULL }, { NULL, 1073741833, "0"}, { NULL, 2056, "0"}, { "responderID", 1073741826, "ResponderID"}, { "producedAt", 1073741861, NULL }, { "responses", 1610612747, NULL }, { NULL, 2, "SingleResponse"}, { "responseExtensions", 536895490, "Extensions"}, { NULL, 2056, "1"}, { "ResponderID", 1610612754, NULL }, { "byName", 1610620939, NULL }, { NULL, 1073743880, "1"}, { NULL, 2, "RelativeDistinguishedName"}, { "byKey", 536879111, NULL }, { NULL, 2056, "2"}, { "SingleResponse", 1610612741, NULL }, { "certID", 1073741826, "CertID"}, { "certStatus", 1073741826, "CertStatus"}, { "thisUpdate", 1073741861, NULL }, { "nextUpdate", 1610637349, NULL }, { NULL, 2056, "0"}, { "singleExtensions", 536895490, "Extensions"}, { NULL, 2056, "1"}, { "CertStatus", 1610612754, NULL }, { "good", 1610620948, NULL }, { NULL, 4104, "0"}, { "revoked", 1610620930, "RevokedInfo"}, { NULL, 4104, "1"}, { "unknown", 536879106, "UnknownInfo"}, { NULL, 4104, "2"}, { "RevokedInfo", 1610612741, NULL }, { "revocationTime", 1073741861, NULL }, { "revocationReason", 537157653, NULL }, { NULL, 1073743880, "0"}, { "unspecified", 1, "0"}, { "UnknownInfo", 1073741844, NULL }, { "NameConstraints", 1610612741, NULL }, { "permittedSubtrees", 1610637314, "GeneralSubtrees"}, { NULL, 4104, "0"}, { "excludedSubtrees", 536895490, "GeneralSubtrees"}, { NULL, 4104, "1"}, { "GeneralSubtrees", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "GeneralSubtree"}, { "GeneralSubtree", 1610612741, NULL }, { "base", 1073741826, "GeneralName"}, { "minimum", 1610653699, NULL }, { NULL, 1073741833, "0"}, { NULL, 4104, "0"}, { "maximum", 536895491, NULL }, { NULL, 4104, "1"}, { "TlsFeatures", 536870923, NULL }, { NULL, 3, NULL }, { NULL, 0, NULL } }; int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { static ASN1_TYPE _gnutls_pkix1_asn = ASN1_TYPE_EMPTY; static int first = 1; ASN1_TYPE dn; int res, start, end; if (size > 10000) // same as max_len = 10000 in .options file return 0; if (first) { first = 0; // from _gnutls_global_init() res = asn1_array2tree(pkix_asn1_tab, &_gnutls_pkix1_asn, NULL); assert(res == ASN1_SUCCESS); } // from cert_get_issuer_dn() if ((res = asn1_create_element(_gnutls_pkix1_asn, "PKIX1.Certificate", &dn)) != ASN1_SUCCESS) { goto out; } // from cert_get_issuer_dn() res = asn1_der_decoding(&dn, data, size, NULL); if (res != ASN1_SUCCESS) { goto out; } // from cert_get_issuer_dn() res = asn1_der_decoding_startEnd(dn, data, size, "tbsCertificate.issuer", &start, &end); if (res != ASN1_SUCCESS) { goto out; } out: asn1_delete_structure(&dn); return 0; } libtasn1-4.16.0/fuzz/asn1_get_object_id_der_fuzzer.c0000644000000000000000000000207313606256053017322 00000000000000/* * Copyright(c) 2020 Free Software Foundation, Inc. * * This file is part of libtasn1. * * Libtasn1 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libtasn1 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libtasn1. If not, see . * * This fuzzer is testing asn1_array2tree()'s robustness with arbitrary * input data. */ #include #include "libtasn1.h" #include "fuzzer.h" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int ret_len; char str[256]; asn1_get_object_id_der(data, size, &ret_len, str, sizeof(str)); return 0; } libtasn1-4.16.0/fuzz/libtasn1_array2tree_fuzzer.repro/0000755000000000000000000000000013615400132017667 500000000000000libtasn1-4.16.0/fuzz/Makefile.in0000644000000000000000000017123613615375040013267 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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) 2017-2019 Tim Ruehsen # # 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 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. # # This file is part of libtasn1. # aminclude_static.am generated automatically by Autoconf # from AX_AM_MACROS_STATIC on Sat Feb 1 23:22:24 CET 2020 VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @FUZZING_FALSE@noinst_PROGRAMS = corpus2array$(EXEEXT) @FUZZING_TRUE@noinst_PROGRAMS = $(FUZZERS) @FUZZING_TRUE@am__append_1 = -fsanitize=fuzzer @FUZZING_FALSE@am__append_2 = -DTEST_RUN subdir = fuzz ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ $(top_srcdir)/m4/ax_am_macros_static.m4 \ $(top_srcdir)/m4/ax_check_gnu_make.m4 \ $(top_srcdir)/m4/ax_code_coverage.m4 \ $(top_srcdir)/m4/ax_file_escapes.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4-gl/00gnulib.m4 \ $(top_srcdir)/m4-gl/__inline.m4 \ $(top_srcdir)/m4-gl/absolute-header.m4 \ $(top_srcdir)/m4-gl/extensions.m4 \ $(top_srcdir)/m4-gl/extern-inline.m4 \ $(top_srcdir)/m4-gl/gnulib-common.m4 \ $(top_srcdir)/m4-gl/gnulib-comp.m4 \ $(top_srcdir)/m4-gl/include_next.m4 \ $(top_srcdir)/m4-gl/ld-version-script.m4 \ $(top_srcdir)/m4-gl/limits-h.m4 \ $(top_srcdir)/m4-gl/longlong.m4 \ $(top_srcdir)/m4-gl/manywarnings.m4 \ $(top_srcdir)/m4-gl/minmax.m4 $(top_srcdir)/m4-gl/multiarch.m4 \ $(top_srcdir)/m4-gl/off_t.m4 $(top_srcdir)/m4-gl/ssize_t.m4 \ $(top_srcdir)/m4-gl/stdbool.m4 $(top_srcdir)/m4-gl/stddef_h.m4 \ $(top_srcdir)/m4-gl/stdint.m4 $(top_srcdir)/m4-gl/string_h.m4 \ $(top_srcdir)/m4-gl/strverscmp.m4 \ $(top_srcdir)/m4-gl/sys_types_h.m4 \ $(top_srcdir)/m4-gl/valgrind-tests.m4 \ $(top_srcdir)/m4-gl/visibility.m4 \ $(top_srcdir)/m4-gl/warn-on-use.m4 \ $(top_srcdir)/m4-gl/warnings.m4 $(top_srcdir)/m4-gl/wchar_t.m4 \ $(top_srcdir)/m4-gl/wint_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am__asn1_decode_simple_ber_fuzzer_SOURCES_DIST = \ asn1_decode_simple_ber_fuzzer.c main.c fuzzer.h @FUZZING_FALSE@am__objects_1 = main.$(OBJEXT) am_asn1_decode_simple_ber_fuzzer_OBJECTS = \ asn1_decode_simple_ber_fuzzer.$(OBJEXT) $(am__objects_1) asn1_decode_simple_ber_fuzzer_OBJECTS = \ $(am_asn1_decode_simple_ber_fuzzer_OBJECTS) asn1_decode_simple_ber_fuzzer_LDADD = $(LDADD) am__DEPENDENCIES_1 = asn1_decode_simple_ber_fuzzer_DEPENDENCIES = ../lib/gl/libgnu.la \ ../lib/libtasn1.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am__asn1_decode_simple_der_fuzzer_SOURCES_DIST = \ asn1_decode_simple_der_fuzzer.c main.c fuzzer.h am_asn1_decode_simple_der_fuzzer_OBJECTS = \ asn1_decode_simple_der_fuzzer.$(OBJEXT) $(am__objects_1) asn1_decode_simple_der_fuzzer_OBJECTS = \ $(am_asn1_decode_simple_der_fuzzer_OBJECTS) asn1_decode_simple_der_fuzzer_LDADD = $(LDADD) asn1_decode_simple_der_fuzzer_DEPENDENCIES = ../lib/gl/libgnu.la \ ../lib/libtasn1.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__asn1_get_object_id_der_fuzzer_SOURCES_DIST = \ asn1_get_object_id_der_fuzzer.c main.c fuzzer.h am_asn1_get_object_id_der_fuzzer_OBJECTS = \ asn1_get_object_id_der_fuzzer.$(OBJEXT) $(am__objects_1) asn1_get_object_id_der_fuzzer_OBJECTS = \ $(am_asn1_get_object_id_der_fuzzer_OBJECTS) asn1_get_object_id_der_fuzzer_LDADD = $(LDADD) asn1_get_object_id_der_fuzzer_DEPENDENCIES = ../lib/gl/libgnu.la \ ../lib/libtasn1.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__corpus2array_SOURCES_DIST = corpus2array.c @FUZZING_FALSE@am_corpus2array_OBJECTS = corpus2array.$(OBJEXT) corpus2array_OBJECTS = $(am_corpus2array_OBJECTS) corpus2array_LDADD = $(LDADD) corpus2array_DEPENDENCIES = ../lib/gl/libgnu.la ../lib/libtasn1.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__libtasn1_array2tree_fuzzer_SOURCES_DIST = \ libtasn1_array2tree_fuzzer.c main.c fuzzer.h am_libtasn1_array2tree_fuzzer_OBJECTS = \ libtasn1_array2tree_fuzzer.$(OBJEXT) $(am__objects_1) libtasn1_array2tree_fuzzer_OBJECTS = \ $(am_libtasn1_array2tree_fuzzer_OBJECTS) libtasn1_array2tree_fuzzer_LDADD = $(LDADD) libtasn1_array2tree_fuzzer_DEPENDENCIES = ../lib/gl/libgnu.la \ ../lib/libtasn1.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__libtasn1_gnutls_der_fuzzer_SOURCES_DIST = \ libtasn1_gnutls_der_fuzzer.c main.c fuzzer.h am_libtasn1_gnutls_der_fuzzer_OBJECTS = \ libtasn1_gnutls_der_fuzzer.$(OBJEXT) $(am__objects_1) libtasn1_gnutls_der_fuzzer_OBJECTS = \ $(am_libtasn1_gnutls_der_fuzzer_OBJECTS) libtasn1_gnutls_der_fuzzer_LDADD = $(LDADD) libtasn1_gnutls_der_fuzzer_DEPENDENCIES = ../lib/gl/libgnu.la \ ../lib/libtasn1.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__libtasn1_parser2tree_fuzzer_SOURCES_DIST = \ libtasn1_parser2tree_fuzzer.c main.c fuzzer.h am_libtasn1_parser2tree_fuzzer_OBJECTS = \ libtasn1_parser2tree_fuzzer.$(OBJEXT) $(am__objects_1) libtasn1_parser2tree_fuzzer_OBJECTS = \ $(am_libtasn1_parser2tree_fuzzer_OBJECTS) libtasn1_parser2tree_fuzzer_LDADD = $(LDADD) libtasn1_parser2tree_fuzzer_DEPENDENCIES = ../lib/gl/libgnu.la \ ../lib/libtasn1.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__libtasn1_pkix_der_fuzzer_SOURCES_DIST = \ libtasn1_pkix_der_fuzzer.c main.c fuzzer.h am_libtasn1_pkix_der_fuzzer_OBJECTS = \ libtasn1_pkix_der_fuzzer.$(OBJEXT) $(am__objects_1) libtasn1_pkix_der_fuzzer_OBJECTS = \ $(am_libtasn1_pkix_der_fuzzer_OBJECTS) libtasn1_pkix_der_fuzzer_LDADD = $(LDADD) libtasn1_pkix_der_fuzzer_DEPENDENCIES = ../lib/gl/libgnu.la \ ../lib/libtasn1.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/asn1_decode_simple_ber_fuzzer.Po \ ./$(DEPDIR)/asn1_decode_simple_der_fuzzer.Po \ ./$(DEPDIR)/asn1_get_object_id_der_fuzzer.Po \ ./$(DEPDIR)/corpus2array.Po \ ./$(DEPDIR)/libtasn1_array2tree_fuzzer.Po \ ./$(DEPDIR)/libtasn1_gnutls_der_fuzzer.Po \ ./$(DEPDIR)/libtasn1_parser2tree_fuzzer.Po \ ./$(DEPDIR)/libtasn1_pkix_der_fuzzer.Po ./$(DEPDIR)/main.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(asn1_decode_simple_ber_fuzzer_SOURCES) \ $(asn1_decode_simple_der_fuzzer_SOURCES) \ $(asn1_get_object_id_der_fuzzer_SOURCES) \ $(corpus2array_SOURCES) $(libtasn1_array2tree_fuzzer_SOURCES) \ $(libtasn1_gnutls_der_fuzzer_SOURCES) \ $(libtasn1_parser2tree_fuzzer_SOURCES) \ $(libtasn1_pkix_der_fuzzer_SOURCES) DIST_SOURCES = $(am__asn1_decode_simple_ber_fuzzer_SOURCES_DIST) \ $(am__asn1_decode_simple_der_fuzzer_SOURCES_DIST) \ $(am__asn1_get_object_id_der_fuzzer_SOURCES_DIST) \ $(am__corpus2array_SOURCES_DIST) \ $(am__libtasn1_array2tree_fuzzer_SOURCES_DIST) \ $(am__libtasn1_gnutls_der_fuzzer_SOURCES_DIST) \ $(am__libtasn1_parser2tree_fuzzer_SOURCES_DIST) \ $(am__libtasn1_pkix_der_fuzzer_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/aminclude_static.am \ $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASN1_VERSION_MAJOR = @ASN1_VERSION_MAJOR@ ASN1_VERSION_MINOR = @ASN1_VERSION_MINOR@ ASN1_VERSION_NUMBER = @ASN1_VERSION_NUMBER@ ASN1_VERSION_PATCH = @ASN1_VERSION_PATCH@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FUZZ_LIBS = @FUZZ_LIBS@ GCOV = @GCOV@ GENHTML = @GENHTML@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTOOL = @LIBTOOL@ LIB_FUZZING_ENGINE = @LIB_FUZZING_ENGINE@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ ifGNUmake = @ifGNUmake@ ifnGNUmake = @ifnGNUmake@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @CODE_COVERAGE_ENABLED_TRUE@GITIGNOREFILES = $(GITIGNOREFILES) $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap_0 = @echo " LCOV --capture" $(CODE_COVERAGE_OUTPUT_FILE); @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign_0 = @echo " LCOV --remove /tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN); @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml_0 = @echo " GEN " "$(CODE_COVERAGE_OUTPUT_DIRECTORY)"; @CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet = $(code_coverage_quiet_$(V)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY)) @CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet_0 = --quiet # sanitizes the test-name: replaces with underscores: dashes and dots @CODE_COVERAGE_ENABLED_TRUE@code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1))) @CODE_COVERAGE_ENABLED_TRUE@AM_DISTCHECK_CONFIGURE_FLAGS = $(AM_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage AM_CFLAGS = $(WERROR_CFLAGS) $(WARN_CFLAGS) $(CODE_COVERAGE_CFLAGS) AM_CPPFLAGS = -I$(top_builddir)/lib/includes \ -I$(top_srcdir)/lib/includes -I$(srcdir) \ -I$(top_builddir)/lib/gl -I$(top_srcdir)/lib/gl \ -DSRCDIR=\"$(abs_srcdir)\" $(CODE_COVERAGE_CPPFLAGS) \ $(am__append_2) AM_LDFLAGS = -no-install -static $(am__append_1) LDADD = ../lib/gl/libgnu.la ../lib/libtasn1.la $(FUZZ_LIBS) $(CODE_COVERAGE_LIBS) FUZZERS = \ libtasn1_array2tree_fuzzer$(EXEEXT) \ libtasn1_parser2tree_fuzzer$(EXEEXT) \ libtasn1_pkix_der_fuzzer$(EXEEXT) \ libtasn1_gnutls_der_fuzzer$(EXEEXT) \ asn1_get_object_id_der_fuzzer$(EXEEXT) \ asn1_decode_simple_ber_fuzzer$(EXEEXT) \ asn1_decode_simple_der_fuzzer$(EXEEXT) @FUZZING_FALSE@MAIN = main.c fuzzer.h @FUZZING_TRUE@MAIN = fuzzer.h @FUZZING_FALSE@TESTS = $(FUZZERS) @FUZZING_FALSE@check_PROGRAMS = $(FUZZERS) @FUZZING_FALSE@corpus2array_SOURCES = corpus2array.c libtasn1_array2tree_fuzzer_SOURCES = libtasn1_array2tree_fuzzer.c $(MAIN) libtasn1_parser2tree_fuzzer_SOURCES = libtasn1_parser2tree_fuzzer.c $(MAIN) libtasn1_pkix_der_fuzzer_SOURCES = libtasn1_pkix_der_fuzzer.c $(MAIN) libtasn1_gnutls_der_fuzzer_SOURCES = libtasn1_gnutls_der_fuzzer.c $(MAIN) asn1_get_object_id_der_fuzzer_SOURCES = asn1_get_object_id_der_fuzzer.c $(MAIN) asn1_decode_simple_der_fuzzer_SOURCES = asn1_decode_simple_der_fuzzer.c $(MAIN) asn1_decode_simple_ber_fuzzer_SOURCES = asn1_decode_simple_ber_fuzzer.c $(MAIN) LOG_COMPILER = $(VALGRIND) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/aminclude_static.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign fuzz/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign fuzz/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/aminclude_static.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list asn1_decode_simple_ber_fuzzer$(EXEEXT): $(asn1_decode_simple_ber_fuzzer_OBJECTS) $(asn1_decode_simple_ber_fuzzer_DEPENDENCIES) $(EXTRA_asn1_decode_simple_ber_fuzzer_DEPENDENCIES) @rm -f asn1_decode_simple_ber_fuzzer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asn1_decode_simple_ber_fuzzer_OBJECTS) $(asn1_decode_simple_ber_fuzzer_LDADD) $(LIBS) asn1_decode_simple_der_fuzzer$(EXEEXT): $(asn1_decode_simple_der_fuzzer_OBJECTS) $(asn1_decode_simple_der_fuzzer_DEPENDENCIES) $(EXTRA_asn1_decode_simple_der_fuzzer_DEPENDENCIES) @rm -f asn1_decode_simple_der_fuzzer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asn1_decode_simple_der_fuzzer_OBJECTS) $(asn1_decode_simple_der_fuzzer_LDADD) $(LIBS) asn1_get_object_id_der_fuzzer$(EXEEXT): $(asn1_get_object_id_der_fuzzer_OBJECTS) $(asn1_get_object_id_der_fuzzer_DEPENDENCIES) $(EXTRA_asn1_get_object_id_der_fuzzer_DEPENDENCIES) @rm -f asn1_get_object_id_der_fuzzer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asn1_get_object_id_der_fuzzer_OBJECTS) $(asn1_get_object_id_der_fuzzer_LDADD) $(LIBS) corpus2array$(EXEEXT): $(corpus2array_OBJECTS) $(corpus2array_DEPENDENCIES) $(EXTRA_corpus2array_DEPENDENCIES) @rm -f corpus2array$(EXEEXT) $(AM_V_CCLD)$(LINK) $(corpus2array_OBJECTS) $(corpus2array_LDADD) $(LIBS) libtasn1_array2tree_fuzzer$(EXEEXT): $(libtasn1_array2tree_fuzzer_OBJECTS) $(libtasn1_array2tree_fuzzer_DEPENDENCIES) $(EXTRA_libtasn1_array2tree_fuzzer_DEPENDENCIES) @rm -f libtasn1_array2tree_fuzzer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(libtasn1_array2tree_fuzzer_OBJECTS) $(libtasn1_array2tree_fuzzer_LDADD) $(LIBS) libtasn1_gnutls_der_fuzzer$(EXEEXT): $(libtasn1_gnutls_der_fuzzer_OBJECTS) $(libtasn1_gnutls_der_fuzzer_DEPENDENCIES) $(EXTRA_libtasn1_gnutls_der_fuzzer_DEPENDENCIES) @rm -f libtasn1_gnutls_der_fuzzer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(libtasn1_gnutls_der_fuzzer_OBJECTS) $(libtasn1_gnutls_der_fuzzer_LDADD) $(LIBS) libtasn1_parser2tree_fuzzer$(EXEEXT): $(libtasn1_parser2tree_fuzzer_OBJECTS) $(libtasn1_parser2tree_fuzzer_DEPENDENCIES) $(EXTRA_libtasn1_parser2tree_fuzzer_DEPENDENCIES) @rm -f libtasn1_parser2tree_fuzzer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(libtasn1_parser2tree_fuzzer_OBJECTS) $(libtasn1_parser2tree_fuzzer_LDADD) $(LIBS) libtasn1_pkix_der_fuzzer$(EXEEXT): $(libtasn1_pkix_der_fuzzer_OBJECTS) $(libtasn1_pkix_der_fuzzer_DEPENDENCIES) $(EXTRA_libtasn1_pkix_der_fuzzer_DEPENDENCIES) @rm -f libtasn1_pkix_der_fuzzer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(libtasn1_pkix_der_fuzzer_OBJECTS) $(libtasn1_pkix_der_fuzzer_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1_decode_simple_ber_fuzzer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1_decode_simple_der_fuzzer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1_get_object_id_der_fuzzer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/corpus2array.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtasn1_array2tree_fuzzer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtasn1_gnutls_der_fuzzer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtasn1_parser2tree_fuzzer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtasn1_pkix_der_fuzzer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? libtasn1_array2tree_fuzzer.log: libtasn1_array2tree_fuzzer$(EXEEXT) @p='libtasn1_array2tree_fuzzer$(EXEEXT)'; \ b='libtasn1_array2tree_fuzzer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) libtasn1_parser2tree_fuzzer.log: libtasn1_parser2tree_fuzzer$(EXEEXT) @p='libtasn1_parser2tree_fuzzer$(EXEEXT)'; \ b='libtasn1_parser2tree_fuzzer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) libtasn1_pkix_der_fuzzer.log: libtasn1_pkix_der_fuzzer$(EXEEXT) @p='libtasn1_pkix_der_fuzzer$(EXEEXT)'; \ b='libtasn1_pkix_der_fuzzer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) libtasn1_gnutls_der_fuzzer.log: libtasn1_gnutls_der_fuzzer$(EXEEXT) @p='libtasn1_gnutls_der_fuzzer$(EXEEXT)'; \ b='libtasn1_gnutls_der_fuzzer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) asn1_get_object_id_der_fuzzer.log: asn1_get_object_id_der_fuzzer$(EXEEXT) @p='asn1_get_object_id_der_fuzzer$(EXEEXT)'; \ b='asn1_get_object_id_der_fuzzer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) asn1_decode_simple_ber_fuzzer.log: asn1_decode_simple_ber_fuzzer$(EXEEXT) @p='asn1_decode_simple_ber_fuzzer$(EXEEXT)'; \ b='asn1_decode_simple_ber_fuzzer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) asn1_decode_simple_der_fuzzer.log: asn1_decode_simple_der_fuzzer$(EXEEXT) @p='asn1_decode_simple_der_fuzzer$(EXEEXT)'; \ b='asn1_decode_simple_der_fuzzer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/asn1_decode_simple_ber_fuzzer.Po -rm -f ./$(DEPDIR)/asn1_decode_simple_der_fuzzer.Po -rm -f ./$(DEPDIR)/asn1_get_object_id_der_fuzzer.Po -rm -f ./$(DEPDIR)/corpus2array.Po -rm -f ./$(DEPDIR)/libtasn1_array2tree_fuzzer.Po -rm -f ./$(DEPDIR)/libtasn1_gnutls_der_fuzzer.Po -rm -f ./$(DEPDIR)/libtasn1_parser2tree_fuzzer.Po -rm -f ./$(DEPDIR)/libtasn1_pkix_der_fuzzer.Po -rm -f ./$(DEPDIR)/main.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/asn1_decode_simple_ber_fuzzer.Po -rm -f ./$(DEPDIR)/asn1_decode_simple_der_fuzzer.Po -rm -f ./$(DEPDIR)/asn1_get_object_id_der_fuzzer.Po -rm -f ./$(DEPDIR)/corpus2array.Po -rm -f ./$(DEPDIR)/libtasn1_array2tree_fuzzer.Po -rm -f ./$(DEPDIR)/libtasn1_gnutls_der_fuzzer.Po -rm -f ./$(DEPDIR)/libtasn1_parser2tree_fuzzer.Po -rm -f ./$(DEPDIR)/libtasn1_pkix_der_fuzzer.Po -rm -f ./$(DEPDIR)/main.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-local clean-noinstPROGRAMS cscopelist-am ctags ctags-am \ dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-local distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Code coverage # # Optional: # - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. # Multiple directories may be specified, separated by whitespace. # (Default: $(top_builddir)) # - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated # by lcov for code coverage. (Default: # $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info) # - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage # reports to be created. (Default: # $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage) # - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage, # set to 0 to disable it and leave empty to stay with the default. # (Default: empty) # - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov # instances. (Default: based on ) # - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov # instances. (Default: ) # - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov # - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the # collecting lcov instance. (Default: ) # - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov # instance. (Default: ) # - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering # lcov instance. (Default: empty) # - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov # instance. (Default: ) # - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the # genhtml instance. (Default: based on ) # - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml # instance. (Default: ) # - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore # # The generated report will be titled using the $(PACKAGE_NAME) and # $(PACKAGE_VERSION). In order to add the current git hash to the title, # use the git-version-gen script, available online. # Optional variables # run only on top dir @CODE_COVERAGE_ENABLED_TRUE@ ifeq ($(abs_builddir), $(abs_top_builddir)) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_DIRECTORY ?= $(top_builddir) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_BRANCH_COVERAGE ?= @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)" @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?= @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=$(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) @CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_IGNORE_PATTERN ?= # Use recursive makes in order to ignore errors during check @CODE_COVERAGE_ENABLED_TRUE@check-code-coverage: @CODE_COVERAGE_ENABLED_TRUE@ -$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check @CODE_COVERAGE_ENABLED_TRUE@ $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture # Capture code coverage data @CODE_COVERAGE_ENABLED_TRUE@code-coverage-capture: code-coverage-capture-hook @CODE_COVERAGE_ENABLED_TRUE@ $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS) @CODE_COVERAGE_ENABLED_TRUE@ $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS) @CODE_COVERAGE_ENABLED_TRUE@ -@rm -f "$(CODE_COVERAGE_OUTPUT_FILE).tmp" @CODE_COVERAGE_ENABLED_TRUE@ $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS) @CODE_COVERAGE_ENABLED_TRUE@ @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html" @CODE_COVERAGE_ENABLED_TRUE@code-coverage-clean: @CODE_COVERAGE_ENABLED_TRUE@ -$(LCOV) --directory $(top_builddir) -z @CODE_COVERAGE_ENABLED_TRUE@ -rm -rf "$(CODE_COVERAGE_OUTPUT_FILE)" "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" @CODE_COVERAGE_ENABLED_TRUE@ -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete @CODE_COVERAGE_ENABLED_TRUE@code-coverage-dist-clean: @CODE_COVERAGE_ENABLED_TRUE@ else # ifneq ($(abs_builddir), $(abs_top_builddir)) @CODE_COVERAGE_ENABLED_TRUE@check-code-coverage: @CODE_COVERAGE_ENABLED_TRUE@code-coverage-capture: code-coverage-capture-hook @CODE_COVERAGE_ENABLED_TRUE@code-coverage-clean: @CODE_COVERAGE_ENABLED_TRUE@code-coverage-dist-clean: @CODE_COVERAGE_ENABLED_TRUE@ endif # ifeq ($(abs_builddir), $(abs_top_builddir)) # Use recursive makes in order to ignore errors during check @CODE_COVERAGE_ENABLED_FALSE@check-code-coverage: @CODE_COVERAGE_ENABLED_FALSE@ @echo "Need to reconfigure with --enable-code-coverage" # Capture code coverage data @CODE_COVERAGE_ENABLED_FALSE@code-coverage-capture: code-coverage-capture-hook @CODE_COVERAGE_ENABLED_FALSE@ @echo "Need to reconfigure with --enable-code-coverage" @CODE_COVERAGE_ENABLED_FALSE@code-coverage-clean: @CODE_COVERAGE_ENABLED_FALSE@code-coverage-dist-clean: # Hook rule executed before code-coverage-capture, overridable by the user code-coverage-capture-hook: .PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook @FUZZING_TRUE@ # fuzzing mode, enabled with ./configure --enable-fuzzing # comment out below to exclude directories/files from the tarball dist-hook: find $(srcdir) -name '*.options' -exec cp -v '{}' $(distdir) ';' find $(srcdir) -name '*.dict' -exec cp -v '{}' $(distdir) ';' # find $(srcdir) -name '*.in' -exec cp -vr '{}' $(distdir) ';' find $(srcdir) -name '*.repro' -exec cp -vr '{}' $(distdir) ';' clean-local: code-coverage-clean rm -rf *.gc?? *.log lcov distclean-local: code-coverage-dist-clean oss-fuzz: if test "$$OUT" != ""; then \ XLIBS=""; \ for ccfile in *_fuzzer.c; do \ fuzzer=$$(basename $$ccfile .c); \ $$CXX $$CXXFLAGS -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes -I$(top_srcdir) \ "$${fuzzer}.c" -o "$${fuzzer}" \ ../lib/.libs/libtasn1.a $${LIB_FUZZING_ENGINE} \ -Wl,-Bstatic $${XLIBS} -Wl,-Bdynamic; \ done; \ fi .PHONY: oss-fuzz # 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: libtasn1-4.16.0/fuzz/asn1_decode_simple_der_fuzzer.c0000644000000000000000000000250713606256053017337 00000000000000/* * Copyright(c) 2020 Free Software Foundation, Inc. * * This file is part of libtasn1. * * Libtasn1 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libtasn1 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libtasn1. If not, see . * * This fuzzer is testing asn1_array2tree()'s robustness with arbitrary * input data. */ #include #include #include "libtasn1.h" #include "fuzzer.h" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int ret; unsigned int ret_len; const unsigned char *str; ret = asn1_decode_simple_der(ASN1_ETYPE_BIT_STRING, data, size, &str, &ret_len); if (ret == ASN1_SUCCESS) { assert(ret_len <= size); } ret = asn1_decode_simple_der(ASN1_ETYPE_OCTET_STRING, data, size, &str, &ret_len); if (ret == ASN1_SUCCESS) { assert(ret_len <= size); } return 0; } libtasn1-4.16.0/fuzz/asn1_decode_simple_ber_fuzzer.c0000644000000000000000000000257313606256053017340 00000000000000/* * Copyright(c) 2020 Free Software Foundation, Inc. * * This file is part of libtasn1. * * Libtasn1 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libtasn1 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libtasn1. If not, see . * * This fuzzer is testing asn1_array2tree()'s robustness with arbitrary * input data. */ #include #include #include #include "libtasn1.h" #include "fuzzer.h" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int ret; unsigned int ret_len; unsigned char *str; ret = asn1_decode_simple_ber(ASN1_ETYPE_BIT_STRING, data, size, &str, &ret_len, NULL); if (ret == ASN1_SUCCESS) { free(str); assert(ret_len <= size); } ret = asn1_decode_simple_ber(ASN1_ETYPE_OCTET_STRING, data, size, &str, &ret_len, NULL); if (ret == ASN1_SUCCESS) { free(str); assert(ret_len <= size); } return 0; } libtasn1-4.16.0/fuzz/libtasn1_parser2tree_fuzzer.c0000644000000000000000000000356113520774070017022 00000000000000/* * Copyright(c) 2019 Free Software Foundation, Inc. * * This file is part of libtasn1. * * Libtasn1 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libtasn1 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libtasn1. If not, see . * * This fuzzer is testing asn1_parser2tree()'s robustness with arbitrary ASN.1 * input data. */ #include #include // malloc, free #include // strcmp, memcpy #include "libtasn1.h" #include "fuzzer.h" static const uint8_t *g_data; static size_t g_size; #if defined HAVE_DLFCN_H && defined HAVE_FMEMOPEN #include #ifdef RTLD_NEXT /* Not defined e.g. on CygWin */ FILE *fopen(const char *pathname, const char *mode) { FILE * (*libc_fopen)(const char *, const char *) = (FILE * (*)(const char *, const char *)) dlsym(RTLD_NEXT, "fopen"); if (!strcmp(pathname, "pkix.asn")) return fmemopen((void *) g_data, g_size, mode); return libc_fopen(pathname, mode); } #endif #endif int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; asn1_node definitions = NULL; if (size > 10000) // same as max_len = 10000 in .options file return 0; g_data = data; g_size = size; int rc = asn1_parser2tree("pkix.asn", &definitions, errorDescription); if (rc == ASN1_SUCCESS) { asn1_delete_structure(&definitions); } return 0; } libtasn1-4.16.0/fuzz/libtasn1_parser2tree_fuzzer.repro/0000755000000000000000000000000013615400132020045 500000000000000libtasn1-4.16.0/fuzz/fuzzer.h0000644000000000000000000000211213520774070012703 00000000000000/* * Copyright(c) 2017-2019 Free Software Foundation, Inc. * * This file is part of libtasn1. * * Libtasn1 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libtasn1 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libtasn1. If not, see . */ #include // size_t #include // uint8_t #if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) #pragma GCC diagnostic ignored "-Wunused" #pragma GCC diagnostic ignored "-Wpedantic" #endif #ifdef __cplusplus extern "C" #endif int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); libtasn1-4.16.0/fuzz/corpus2array.c0000644000000000000000000000634013520774070014014 00000000000000/* * Copyright (C) 2019 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ /* Helper tool to convert a corpus from libtasn1_array2tree_fuzzer into a asn1_static_node C code. Example usage: $ cat libtasn1_array2tree_fuzzer.in/e04b8bc97fcf0d6386dfa44e32b1700e42e0eb64 | ./corpus2array const asn1_static_node tab[] = { { "999=999", CONST_UNIVERSAL|CONST_IMPLICIT|CONST_SET|CONST_ASSIGN|CONST_DOWN, "993\xff~\xff$y\xd9\x80" }, { NULL, 0, NULL } }; cat leak-d69d42ff01f6c3acca35dee27538a99e6821fced | ./corpus2array */ #include #include #include struct fuzz_elem { unsigned int type; char name[20]; char value[20]; }; static char *escape(unsigned char *s) { static char out[19 * 6 + 1]; char *p = out; while (*s) { if (*s > 127) { if (isxdigit(s[1])) { sprintf(p, "\\u%04x", *s++); p += 6; } else { sprintf(p, "\\x%02x", *s++); p += 4; } } else if (*s == '\n') { sprintf(p, "\\n"); p += 2; s++; } else if (*s == '\t') { sprintf(p, "\\t"); p += 2; s++; } else *p++ = *s++; } *p = 0; return out; } static const char *typename[24] = { "CONST_UNIVERSAL", "CONST_PRIVATE", "CONST_APPLICATION", "CONST_EXPLICIT", "CONST_IMPLICIT", "CONST_TAG", "CONST_OPTION", "CONST_DEFAULT", "CONST_TRUE", "CONST_FALSE", "CONST_LIST", "CONST_MIN_MAX", "CONST_1_PARAM", "CONST_SIZE", "CONST_DEFINED_BY", "CONST_GENERALIZED", "CONST_UTC", NULL, /* #define CONST_IMPORTS (1<<25) */ "CONST_NOT_USED", "CONST_SET", "CONST_ASSIGN", "CONST_DOWN", "CONST_RIGHT", NULL }; int main(void) { struct fuzz_elem e; printf("const asn1_static_node tab[] = {\n"); while (fread(&e, sizeof(e), 1, stdin) == 1) { e.name[sizeof(e.name) - 1] = 0; e.value[sizeof(e.value) - 1] = 0; if (strcmp(e.name, "NULL")) printf(" { \"%s\"", escape((unsigned char *) e.name)); else printf(" { NULL"); if (e.type) { int add = 0; // we leave the lowest 8 bit out if ((e.type & 0xFF) == 17) { printf(", ASN1_ETYPE_TIME"); add = 1; } for (int i = 8; i < 32 ; i++) { if ((e.type & (1U << i)) && typename[i - 8]) { printf(add ? "|%s" : ", %s", typename[i - 8]); add = 1; } } if (!add) printf(", %u", e.type); } else printf(", 0"); if (strcmp(e.value, "NULL")) printf(", \"%s\" },\n", escape((unsigned char *) e.value)); else printf(", NULL },"); } printf(" { NULL, 0, NULL }\n"); printf("};\n"); return 0; } libtasn1-4.16.0/ChangeLog0000644000000000000000000000000013615375031011752 00000000000000libtasn1-4.16.0/configure.ac0000644000000000000000000001157413615374450012514 00000000000000dnl Process this file with autoconf to produce a configure script. # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . AC_PREREQ([2.63]) AC_INIT([GNU Libtasn1],[4.16.0],[help-libtasn1@gnu.org]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIRS([m4 m4-gl]) AC_CONFIG_HEADERS(config.h) AM_INIT_AUTOMAKE([1.10 foreign -Wall -Wno-override]) AM_SILENT_RULES([yes]) # Library code modified: REVISION++ # Interfaces changed/added/removed: CURRENT++ REVISION=0 # Interfaces added: AGE++ # Interfaces removed: AGE=0 AC_SUBST(LT_CURRENT, 12) AC_SUBST(LT_REVISION, 0) AC_SUBST(LT_AGE, 6) # Generate version defines for include file AC_SUBST([ASN1_VERSION_MAJOR], [`echo $VERSION|cut -d'.' -f1`]) AC_SUBST([ASN1_VERSION_MINOR], [`echo $VERSION|cut -d'.' -f2`]) # Let's activate the following line as soon as we change to extended version numbering #AC_SUBST([ASN1_VERSION_PATCH], [`echo $VERSION|cut -d'.' -f3`]) AC_SUBST([ASN1_VERSION_PATCH], [`echo 0`]) AC_SUBST([ASN1_VERSION_NUMBER], [`printf '0x%02x%02x%02x' $ASN1_VERSION_MAJOR $ASN1_VERSION_MINOR $ASN1_VERSION_PATCH`]) AC_CONFIG_FILES([lib/includes/libtasn1.h]) AC_PROG_CC gl_EARLY AC_PROG_YACC AC_ARG_ENABLE(doc, AS_HELP_STRING([--disable-doc], [don't generate any documentation]), enable_doc=$enableval, enable_doc=yes) AM_CONDITIONAL(ENABLE_DOC, test "$enable_doc" != "no") AC_CHECK_FUNCS([clock_gettime fmemopen]) dnl Checks for programs. AM_MISSING_PROG(HELP2MAN, help2man, $missing_dir) AC_LIBTOOL_WIN32_DLL AM_PROG_AR AM_PROG_LIBTOOL GTK_DOC_CHECK(1.2) AC_CHECK_SIZEOF(unsigned long int, 4) AC_CHECK_SIZEOF(unsigned int, 4) # For gnulib compatibility modules. gl_INIT AC_ARG_ENABLE([gcc-warnings], [AS_HELP_STRING([--disable-gcc-warnings], [disable GCC warnings (for developers)])], [case $enableval in yes|no) ;; *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;; esac gl_gcc_warnings=$enableval], [gl_gcc_warnings=yes] ) if test "$gl_gcc_warnings" = yes; then gl_MANYWARN_ALL_GCC([warnings]) nw= nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings nw="$nw -Wc++-compat" # We don't care strongly about C++ compilers nw="$nw -Wundef" # All compiler preprocessors support #if UNDEF nw="$nw -Wtraditional" # All compilers nowadays support ANSI C nw="$nw -Wconversion" # These warnings usually don't point to mistakes. nw="$nw -Wpadded" # Padding internal structs doesn't help. nw="$nw -Wunused-macros" # Lot's of warnings in ASN1.y nw="$nw -Woverlength-strings" # Modern compilers handle strings > 4096 gracefully nw="$nw -Wsuggest-attribute=pure" # Asked for several nodes handling functions gl_MANYWARN_COMPLEMENT([warnings], [$warnings], [$nw]) for w in $warnings; do gl_WARN_ADD([$w]) done gl_WARN_ADD([-Wno-type-limits]) # Too many warnings from gnulib macros gl_WARN_ADD([-Wformat-truncation=1]) gl_WARN_ADD([-Wimplicit-fallthrough=2]) gl_WARN_ADD([-Wno-unused-parameter]) gl_WARN_ADD([-fdiagnostics-show-option]) gl_WARN_ADD([-fdiagnostics-color=always]) # colors even when using ccache fi AX_CODE_COVERAGE AC_ARG_ENABLE([fuzzing], [AS_HELP_STRING([--enable-fuzzing], [Turn on fuzzing build (for developers)])], [enable_fuzzing=yes; AC_SUBST([LIB_FUZZING_ENGINE])], [enable_fuzzing=no; LIB_FUZZING_ENGINE=""]) AM_CONDITIONAL([FUZZING], [test "$enable_fuzzing" = "yes"]) OLD_LIBS=$LIBS AC_SEARCH_LIBS([dlsym], [dl dld]) FUZZ_LIBS=$LIBS LIBS=$OLD_LIBS AC_SUBST([FUZZ_LIBS]) AC_CONFIG_FILES([ Makefile doc/Makefile doc/reference/Makefile examples/Makefile lib/Makefile lib/gl/Makefile lib/libtasn1.pc src/Makefile tests/Makefile fuzz/Makefile ]) AC_OUTPUT AC_MSG_NOTICE([summary of build options: version: ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE Host type: ${host} Install prefix: ${prefix} Compiler: ${CC} Warning flags: errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS} Library types: Shared=${enable_shared}, Static=${enable_static} Valgrind: ${VALGRIND} Version script: $have_ld_version_script Fuzzing build: $enable_fuzzing, $LIB_FUZZING_ENGINE ]) libtasn1-4.16.0/lib/0000755000000000000000000000000013615400132011027 500000000000000libtasn1-4.16.0/lib/parser_aux.c0000644000000000000000000007355713603737041013316 00000000000000/* * Copyright (C) 2000-2016 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ #include // WORD_BIT #include "int.h" #include "parser_aux.h" #include "gstr.h" #include "structure.h" #include "element.h" #include "c-ctype.h" char _asn1_identifierMissing[ASN1_MAX_NAME_SIZE + 1]; /* identifier name not found */ /* Return a hash of the N bytes of X using the method described by Bruno Haible in https://www.haible.de/bruno/hashfunc.html. Note that while many hash functions reduce their result via modulo to a 0..table_size-1 range, this function does not do that. This implementation has been changed from size_t -> unsigned int. */ #ifdef __clang__ __attribute__((no_sanitize("integer"))) #endif _GL_ATTRIBUTE_PURE static unsigned int _asn1_hash_name (const char *x) { const unsigned char *s = (unsigned char *) x; unsigned h = 0; while (*s) h = (*s++) + ((h << 9) | (h >> (WORD_BIT - 9))); return h; } /******************************************************/ /* Function : _asn1_add_static_node */ /* Description: creates a new NODE_ASN element and */ /* puts it in the list pointed by e_list. */ /* Parameters: */ /* e_list: of type list_type; must be NULL initially */ /* type: type of the new element (see ASN1_ETYPE_ */ /* and CONST_ constants). */ /* Return: pointer to the new element. */ /******************************************************/ asn1_node _asn1_add_static_node (list_type **e_list, unsigned int type) { list_type *p; asn1_node punt; punt = calloc (1, sizeof (struct asn1_node_st)); if (punt == NULL) return NULL; p = malloc (sizeof (list_type)); if (p == NULL) { free (punt); return NULL; } p->node = punt; p->next = *e_list; *e_list = p; punt->type = type; return punt; } static int _asn1_add_static_node2 (list_type **e_list, asn1_node node) { list_type *p; p = malloc (sizeof (list_type)); if (p == NULL) { return -1; } p->node = node; p->next = *e_list; *e_list = p; return 0; } /** * asn1_find_node: * @pointer: NODE_ASN element pointer. * @name: null terminated string with the element's name to find. * * Searches for an element called @name starting from @pointer. The * name is composed by different identifiers separated by dots. When * *@pointer has a name, the first identifier must be the name of * *@pointer, otherwise it must be the name of one child of *@pointer. * * Returns: the search result, or %NULL if not found. **/ asn1_node asn1_find_node (asn1_node_const pointer, const char *name) { asn1_node_const p; char *n_end, n[ASN1_MAX_NAME_SIZE + 1]; const char *n_start; unsigned int nsize; unsigned int nhash; if (pointer == NULL) return NULL; if (name == NULL) return NULL; p = pointer; n_start = name; if (name[0] == '?' && name[1] == 'C' && p->name[0] == '?') { /* ?CURRENT */ n_start = strchr(n_start, '.'); if (n_start) n_start++; } else if (p->name[0] != 0) { /* has *pointer got a name ? */ n_end = strchr (n_start, '.'); /* search the first dot */ if (n_end) { nsize = n_end - n_start; if (nsize >= sizeof(n)) return NULL; memcpy (n, n_start, nsize); n[nsize] = 0; n_start = n_end; n_start++; nhash = _asn1_hash_name (n); } else { _asn1_str_cpy (n, sizeof (n), n_start); nhash = _asn1_hash_name (n); n_start = NULL; } while (p) { if (nhash == p->name_hash && (!strcmp (p->name, n))) break; else p = p->right; } /* while */ if (p == NULL) return NULL; } else { /* *pointer doesn't have a name */ if (n_start[0] == 0) return (asn1_node) p; } while (n_start) { /* Has the end of NAME been reached? */ n_end = strchr (n_start, '.'); /* search the next dot */ if (n_end) { nsize = n_end - n_start; if (nsize >= sizeof(n)) return NULL; memcpy (n, n_start, nsize); n[nsize] = 0; n_start = n_end; n_start++; nhash = _asn1_hash_name (n); } else { _asn1_str_cpy (n, sizeof (n), n_start); nhash = _asn1_hash_name (n); n_start = NULL; } if (p->down == NULL) return NULL; p = p->down; if (p == NULL) return NULL; /* The identifier "?LAST" indicates the last element in the right chain. */ if (n[0] == '?' && n[1] == 'L') /* ?LAST */ { while (p->right) p = p->right; } else { /* no "?LAST" */ while (p) { if (p->name_hash == nhash && !strcmp (p->name, n)) break; else p = p->right; } } if (p == NULL) return NULL; } /* while */ return (asn1_node) p; } /******************************************************************/ /* Function : _asn1_set_value */ /* Description: sets the field VALUE in a NODE_ASN element. The */ /* previous value (if exist) will be lost */ /* Parameters: */ /* node: element pointer. */ /* value: pointer to the value that you want to set. */ /* len: character number of value. */ /* Return: pointer to the NODE_ASN element. */ /******************************************************************/ asn1_node _asn1_set_value (asn1_node node, const void *value, unsigned int len) { if (node == NULL) return node; if (node->value) { if (node->value != node->small_value) free (node->value); node->value = NULL; node->value_len = 0; } if (!len) return node; if (len < sizeof (node->small_value)) { node->value = node->small_value; } else { node->value = malloc (len); if (node->value == NULL) return NULL; } node->value_len = len; memcpy (node->value, value, len); return node; } /******************************************************************/ /* Function : _asn1_set_value_lv */ /* Description: sets the field VALUE in a NODE_ASN element. The */ /* previous value (if exist) will be lost. The value */ /* given is stored as an length-value format (LV */ /* Parameters: */ /* node: element pointer. */ /* value: pointer to the value that you want to set. */ /* len: character number of value. */ /* Return: pointer to the NODE_ASN element. */ /******************************************************************/ asn1_node _asn1_set_value_lv (asn1_node node, const void *value, unsigned int len) { int len2; void *temp; if (node == NULL) return node; asn1_length_der (len, NULL, &len2); temp = malloc (len + len2); if (temp == NULL) return NULL; asn1_octet_der (value, len, temp, &len2); return _asn1_set_value_m (node, temp, len2); } /* the same as _asn1_set_value except that it sets an already malloc'ed * value. */ asn1_node _asn1_set_value_m (asn1_node node, void *value, unsigned int len) { if (node == NULL) return node; if (node->value) { if (node->value != node->small_value) free (node->value); node->value = NULL; node->value_len = 0; } if (!len) return node; node->value = value; node->value_len = len; return node; } /******************************************************************/ /* Function : _asn1_append_value */ /* Description: appends to the field VALUE in a NODE_ASN element. */ /* */ /* Parameters: */ /* node: element pointer. */ /* value: pointer to the value that you want to be appended. */ /* len: character number of value. */ /* Return: pointer to the NODE_ASN element. */ /******************************************************************/ asn1_node _asn1_append_value (asn1_node node, const void *value, unsigned int len) { if (node == NULL) return node; if (node->value == NULL) return _asn1_set_value (node, value, len); if (len == 0) return node; if (node->value == node->small_value) { /* value is in node */ int prev_len = node->value_len; node->value_len += len; node->value = malloc (node->value_len); if (node->value == NULL) { node->value_len = 0; return NULL; } if (prev_len > 0) memcpy (node->value, node->small_value, prev_len); memcpy (&node->value[prev_len], value, len); return node; } else /* if (node->value != NULL && node->value != node->small_value) */ { /* value is allocated */ int prev_len = node->value_len; node->value_len += len; node->value = _asn1_realloc (node->value, node->value_len); if (node->value == NULL) { node->value_len = 0; return NULL; } memcpy (&node->value[prev_len], value, len); return node; } } /******************************************************************/ /* Function : _asn1_set_name */ /* Description: sets the field NAME in a NODE_ASN element. The */ /* previous value (if exist) will be lost */ /* Parameters: */ /* node: element pointer. */ /* name: a null terminated string with the name that you want */ /* to set. */ /* Return: pointer to the NODE_ASN element. */ /******************************************************************/ asn1_node _asn1_set_name (asn1_node node, const char *name) { if (node == NULL) return node; _asn1_str_cpy (node->name, sizeof (node->name), name ? name : ""); node->name_hash = _asn1_hash_name (node->name); return node; } /******************************************************************/ /* Function : _asn1_cpy_name */ /* Description: copies the field NAME in a NODE_ASN element. */ /* Parameters: */ /* dst: a dest element pointer. */ /* src: a source element pointer. */ /* Return: pointer to the NODE_ASN element. */ /******************************************************************/ asn1_node _asn1_cpy_name (asn1_node dst, asn1_node_const src) { if (dst == NULL) return dst; if (src == NULL) { dst->name[0] = 0; dst->name_hash = _asn1_hash_name (dst->name); return dst; } _asn1_str_cpy (dst->name, sizeof (dst->name), src->name); dst->name_hash = src->name_hash; return dst; } /******************************************************************/ /* Function : _asn1_set_right */ /* Description: sets the field RIGHT in a NODE_ASN element. */ /* Parameters: */ /* node: element pointer. */ /* right: pointer to a NODE_ASN element that you want be pointed*/ /* by NODE. */ /* Return: pointer to *NODE. */ /******************************************************************/ asn1_node _asn1_set_right (asn1_node node, asn1_node right) { if (node == NULL) return node; node->right = right; if (right) right->left = node; return node; } /******************************************************************/ /* Function : _asn1_get_last_right */ /* Description: return the last element along the right chain. */ /* Parameters: */ /* node: starting element pointer. */ /* Return: pointer to the last element along the right chain. */ /******************************************************************/ asn1_node _asn1_get_last_right (asn1_node_const node) { asn1_node_const p; if (node == NULL) return NULL; p = node; while (p->right) p = p->right; return (asn1_node) p; } /******************************************************************/ /* Function : _asn1_remove_node */ /* Description: gets free the memory allocated for an NODE_ASN */ /* element (not the elements pointed by it). */ /* Parameters: */ /* node: NODE_ASN element pointer. */ /* flags: ASN1_DELETE_FLAG_* */ /******************************************************************/ void _asn1_remove_node (asn1_node node, unsigned int flags) { if (node == NULL) return; if (node->value != NULL) { if (flags & ASN1_DELETE_FLAG_ZEROIZE) { safe_memset(node->value, 0, node->value_len); } if (node->value != node->small_value) free (node->value); } free (node); } /******************************************************************/ /* Function : _asn1_find_up */ /* Description: return the father of the NODE_ASN element. */ /* Parameters: */ /* node: NODE_ASN element pointer. */ /* Return: Null if not found. */ /******************************************************************/ asn1_node _asn1_find_up (asn1_node_const node) { asn1_node_const p; if (node == NULL) return NULL; p = node; while ((p->left != NULL) && (p->left->right == p)) p = p->left; return p->left; } static unsigned _asn1_is_up (asn1_node_const up_cand, asn1_node_const down) { asn1_node_const d, u; if (up_cand == NULL || down == NULL) return 0; d = down; while ((u = _asn1_find_up(d)) != NULL && u != d) { if (u == up_cand) return 1; d = u; } return 0; } /******************************************************************/ /* Function : _asn1_delete_node_from_list */ /* Description: deletes the list element given */ /******************************************************************/ void _asn1_delete_node_from_list (list_type *list, asn1_node node) { list_type *p = list; while (p) { if (p->node == node) p->node = NULL; p = p->next; } } /******************************************************************/ /* Function : _asn1_delete_list */ /* Description: deletes the list elements (not the elements */ /* pointed by them). */ /******************************************************************/ void _asn1_delete_list (list_type *e_list) { list_type *p; while (e_list) { p = e_list; e_list = e_list->next; free (p); } } /******************************************************************/ /* Function : _asn1_delete_list_and nodes */ /* Description: deletes the list elements and the elements */ /* pointed by them. */ /******************************************************************/ void _asn1_delete_list_and_nodes (list_type *e_list) { list_type *p; while (e_list) { p = e_list; e_list = e_list->next; _asn1_remove_node (p->node, 0); free (p); } } char * _asn1_ltostr (int64_t v, char str[LTOSTR_MAX_SIZE]) { uint64_t d, r; char temp[LTOSTR_MAX_SIZE]; int count, k, start; uint64_t val; if (v < 0) { str[0] = '-'; start = 1; val = -((uint64_t)v); } else { val = v; start = 0; } count = 0; do { d = val / 10; r = val - d * 10; temp[start + count] = '0' + (char) r; count++; val = d; } while (val && ((start+count) < LTOSTR_MAX_SIZE-1)); for (k = 0; k < count; k++) str[k + start] = temp[start + count - k - 1]; str[count + start] = 0; return str; } /******************************************************************/ /* Function : _asn1_change_integer_value */ /* Description: converts into DER coding the value assign to an */ /* INTEGER constant. */ /* Parameters: */ /* node: root of an ASN1element. */ /* Return: */ /* ASN1_ELEMENT_NOT_FOUND if NODE is NULL, */ /* otherwise ASN1_SUCCESS */ /******************************************************************/ int _asn1_change_integer_value (asn1_node node) { asn1_node p; unsigned char val[SIZEOF_UNSIGNED_LONG_INT]; unsigned char val2[SIZEOF_UNSIGNED_LONG_INT + 1]; int len; if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; p = node; while (p) { if ((type_field (p->type) == ASN1_ETYPE_INTEGER) && (p->type & CONST_ASSIGN)) { if (p->value) { _asn1_convert_integer (p->value, val, sizeof (val), &len); asn1_octet_der (val, len, val2, &len); _asn1_set_value (p, val2, len); } } if (p->down) { p = p->down; } else { if (p == node) p = NULL; else if (p->right) p = p->right; else { while (1) { p = _asn1_find_up (p); if (p == node) { p = NULL; break; } if (p && p->right) { p = p->right; break; } } } } } return ASN1_SUCCESS; } #define MAX_CONSTANTS 1024 /******************************************************************/ /* Function : _asn1_expand_object_id */ /* Description: expand the IDs of an OBJECT IDENTIFIER constant. */ /* Parameters: */ /* list: root of an object list */ /* node: root of an ASN1 element. */ /* Return: */ /* ASN1_ELEMENT_NOT_FOUND if NODE is NULL, */ /* otherwise ASN1_SUCCESS */ /******************************************************************/ int _asn1_expand_object_id (list_type **list, asn1_node node) { asn1_node p, p2, p3, p4, p5; char name_root[ASN1_MAX_NAME_SIZE], name2[2 * ASN1_MAX_NAME_SIZE + 1]; int move, tlen, tries; unsigned max_constants; if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; _asn1_str_cpy (name_root, sizeof (name_root), node->name); p = node; move = DOWN; tries = 0; while (!((p == node) && (move == UP))) { if (move != UP) { if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) && (p->type & CONST_ASSIGN)) { p2 = p->down; if (p2 && (type_field (p2->type) == ASN1_ETYPE_CONSTANT)) { if (p2->value && !c_isdigit (p2->value[0])) { _asn1_str_cpy (name2, sizeof (name2), name_root); _asn1_str_cat (name2, sizeof (name2), "."); _asn1_str_cat (name2, sizeof (name2), (char *) p2->value); p3 = asn1_find_node (node, name2); if (!p3 || _asn1_is_up(p2, p3) || (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID) || !(p3->type & CONST_ASSIGN)) return ASN1_ELEMENT_NOT_FOUND; _asn1_set_down (p, p2->right); if (p2->down) _asn1_delete_structure (*list, &p2->down, 0); _asn1_delete_node_from_list(*list, p2); _asn1_remove_node (p2, 0); p2 = p; p4 = p3->down; max_constants = 0; while (p4) { if (type_field (p4->type) == ASN1_ETYPE_CONSTANT) { max_constants++; if (max_constants == MAX_CONSTANTS) return ASN1_RECURSION; p5 = _asn1_add_single_node (ASN1_ETYPE_CONSTANT); _asn1_set_name (p5, p4->name); if (p4->value) { tlen = _asn1_strlen (p4->value); if (tlen > 0) _asn1_set_value (p5, p4->value, tlen + 1); } _asn1_add_static_node2(list, p5); if (p2 == p) { _asn1_set_right (p5, p->down); _asn1_set_down (p, p5); } else { _asn1_set_right (p5, p2->right); _asn1_set_right (p2, p5); } p2 = p5; } p4 = p4->right; } move = DOWN; tries++; if (tries >= EXPAND_OBJECT_ID_MAX_RECURSION) return ASN1_RECURSION; continue; } } } move = DOWN; } else move = RIGHT; tries = 0; if (move == DOWN) { if (p->down) p = p->down; else move = RIGHT; } if (p == node) { move = UP; continue; } if (move == RIGHT) { if (p && p->right) p = p->right; else move = UP; } if (move == UP) p = _asn1_find_up (p); } /*******************************/ /* expand DEFAULT */ /*******************************/ p = node; move = DOWN; while (!((p == node) && (move == UP))) { if (move != UP) { if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) && (p->type & CONST_DEFAULT)) { p2 = p->down; if (p2 && (type_field (p2->type) == ASN1_ETYPE_DEFAULT)) { _asn1_str_cpy (name2, sizeof (name2), name_root); _asn1_str_cat (name2, sizeof (name2), "."); if (p2->value) _asn1_str_cat (name2, sizeof (name2), (char *) p2->value); p3 = asn1_find_node (node, name2); if (!p3 || (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID) || !(p3->type & CONST_ASSIGN)) return ASN1_ELEMENT_NOT_FOUND; p4 = p3->down; name2[0] = 0; while (p4) { if (type_field (p4->type) == ASN1_ETYPE_CONSTANT) { if (p4->value == NULL) return ASN1_VALUE_NOT_FOUND; if (name2[0]) _asn1_str_cat (name2, sizeof (name2), "."); _asn1_str_cat (name2, sizeof (name2), (char *) p4->value); } p4 = p4->right; } tlen = strlen (name2); if (tlen > 0) _asn1_set_value (p2, name2, tlen + 1); } } move = DOWN; } else move = RIGHT; if (move == DOWN) { if (p->down) p = p->down; else move = RIGHT; } if (p == node) { move = UP; continue; } if (move == RIGHT) { if (p && p->right) p = p->right; else move = UP; } if (move == UP) p = _asn1_find_up (p); } return ASN1_SUCCESS; } /******************************************************************/ /* Function : _asn1_type_set_config */ /* Description: sets the CONST_SET and CONST_NOT_USED properties */ /* in the fields of the SET elements. */ /* Parameters: */ /* node: root of an ASN1 element. */ /* Return: */ /* ASN1_ELEMENT_NOT_FOUND if NODE is NULL, */ /* otherwise ASN1_SUCCESS */ /******************************************************************/ int _asn1_type_set_config (asn1_node node) { asn1_node p, p2; int move; if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; p = node; move = DOWN; while (!((p == node) && (move == UP))) { if (move != UP) { if (type_field (p->type) == ASN1_ETYPE_SET) { p2 = p->down; while (p2) { if (type_field (p2->type) != ASN1_ETYPE_TAG) p2->type |= CONST_SET | CONST_NOT_USED; p2 = p2->right; } } move = DOWN; } else move = RIGHT; if (move == DOWN) { if (p->down) p = p->down; else move = RIGHT; } if (p == node) { move = UP; continue; } if (move == RIGHT) { if (p && p->right) p = p->right; else move = UP; } if (move == UP) p = _asn1_find_up (p); } return ASN1_SUCCESS; } /******************************************************************/ /* Function : _asn1_check_identifier */ /* Description: checks the definitions of all the identifiers */ /* and the first element of an OBJECT_ID (e.g. {pkix 0 4}). */ /* The _asn1_identifierMissing global variable is filled if */ /* necessary. */ /* Parameters: */ /* node: root of an ASN1 element. */ /* Return: */ /* ASN1_ELEMENT_NOT_FOUND if NODE is NULL, */ /* ASN1_IDENTIFIER_NOT_FOUND if an identifier is not defined, */ /* otherwise ASN1_SUCCESS */ /******************************************************************/ int _asn1_check_identifier (asn1_node_const node) { asn1_node_const p, p2; char name2[ASN1_MAX_NAME_SIZE * 2 + 2]; if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; p = node; while (p) { if (p->value && type_field (p->type) == ASN1_ETYPE_IDENTIFIER) { _asn1_str_cpy (name2, sizeof (name2), node->name); _asn1_str_cat (name2, sizeof (name2), "."); _asn1_str_cat (name2, sizeof (name2), (char *) p->value); p2 = asn1_find_node (node, name2); if (p2 == NULL) { if (p->value) _asn1_str_cpy (_asn1_identifierMissing, sizeof(_asn1_identifierMissing), (char*)p->value); else _asn1_strcpy (_asn1_identifierMissing, "(null)"); return ASN1_IDENTIFIER_NOT_FOUND; } } else if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) && (p->type & CONST_DEFAULT)) { p2 = p->down; if (p2 && (type_field (p2->type) == ASN1_ETYPE_DEFAULT)) { _asn1_str_cpy (name2, sizeof (name2), node->name); if (p2->value) { _asn1_str_cat (name2, sizeof (name2), "."); _asn1_str_cat (name2, sizeof (name2), (char *) p2->value); _asn1_str_cpy (_asn1_identifierMissing, sizeof(_asn1_identifierMissing), (char*)p2->value); } else _asn1_strcpy (_asn1_identifierMissing, "(null)"); p2 = asn1_find_node (node, name2); if (!p2 || (type_field (p2->type) != ASN1_ETYPE_OBJECT_ID) || !(p2->type & CONST_ASSIGN)) return ASN1_IDENTIFIER_NOT_FOUND; else _asn1_identifierMissing[0] = 0; } } else if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) && (p->type & CONST_ASSIGN)) { p2 = p->down; if (p2 && (type_field (p2->type) == ASN1_ETYPE_CONSTANT)) { if (p2->value && !c_isdigit (p2->value[0])) { _asn1_str_cpy (name2, sizeof (name2), node->name); _asn1_str_cat (name2, sizeof (name2), "."); _asn1_str_cat (name2, sizeof (name2), (char *) p2->value); _asn1_str_cpy (_asn1_identifierMissing, sizeof(_asn1_identifierMissing), (char*)p2->value); p2 = asn1_find_node (node, name2); if (!p2 || (type_field (p2->type) != ASN1_ETYPE_OBJECT_ID) || !(p2->type & CONST_ASSIGN)) return ASN1_IDENTIFIER_NOT_FOUND; else _asn1_identifierMissing[0] = 0; } } } if (p->down) { p = p->down; } else if (p->right) p = p->right; else { while (p) { p = _asn1_find_up (p); if (p == node) { p = NULL; break; } if (p && p->right) { p = p->right; break; } } } } return ASN1_SUCCESS; } /******************************************************************/ /* Function : _asn1_set_default_tag */ /* Description: sets the default IMPLICIT or EXPLICIT property in */ /* the tagged elements that don't have this declaration. */ /* Parameters: */ /* node: pointer to a DEFINITIONS element. */ /* Return: */ /* ASN1_ELEMENT_NOT_FOUND if NODE is NULL or not a pointer to */ /* a DEFINITIONS element, */ /* otherwise ASN1_SUCCESS */ /******************************************************************/ int _asn1_set_default_tag (asn1_node node) { asn1_node p; if ((node == NULL) || (type_field (node->type) != ASN1_ETYPE_DEFINITIONS)) return ASN1_ELEMENT_NOT_FOUND; p = node; while (p) { if ((type_field (p->type) == ASN1_ETYPE_TAG) && !(p->type & CONST_EXPLICIT) && !(p->type & CONST_IMPLICIT)) { if (node->type & CONST_EXPLICIT) p->type |= CONST_EXPLICIT; else p->type |= CONST_IMPLICIT; } if (p->down) { p = p->down; } else if (p->right) p = p->right; else { while (1) { p = _asn1_find_up (p); if (p == node) { p = NULL; break; } if (p && p->right) { p = p->right; break; } } } } return ASN1_SUCCESS; } libtasn1-4.16.0/lib/element.h0000644000000000000000000000242513512007177012564 00000000000000/* * Copyright (C) 2000-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ #ifndef _ELEMENT_H #define _ELEMENT_H struct node_tail_cache_st { asn1_node head; /* the first element of the sequence */ asn1_node tail; }; int _asn1_append_sequence_set (asn1_node node, struct node_tail_cache_st *pcached); int _asn1_convert_integer (const unsigned char *value, unsigned char *value_out, int value_out_size, int *len); void _asn1_hierarchical_name (asn1_node_const node, char *name, int name_size); #endif libtasn1-4.16.0/lib/includes/0000755000000000000000000000000013615400132012635 500000000000000libtasn1-4.16.0/lib/includes/libtasn1.h0000644000000000000000000003606013615375053014465 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * LIBTASN1 is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * LIBTASN1 is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with LIBTASN1; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA * */ /** * libtasn1:Short_Description: * * GNU ASN.1 library */ /** * libtasn1:Long_Description: * * The Libtasn1 library provides Abstract Syntax Notation One (ASN.1, as * specified by the X.680 ITU-T recommendation) parsing and structures * management, and Distinguished Encoding Rules (DER, as per X.690) * encoding and decoding functions. */ #ifndef LIBTASN1_H #define LIBTASN1_H #ifndef ASN1_API #if defined ASN1_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY #define ASN1_API __attribute__((__visibility__("default"))) #elif defined ASN1_BUILDING && defined _MSC_VER && ! defined ASN1_STATIC #define ASN1_API __declspec(dllexport) #elif defined _MSC_VER && ! defined ASN1_STATIC #define ASN1_API __declspec(dllimport) #else #define ASN1_API #endif #endif #ifdef __GNUC__ # define __LIBTASN1_CONST__ __attribute__((const)) # define __LIBTASN1_PURE__ __attribute__((pure)) #else # define __LIBTASN1_CONST__ # define __LIBTASN1_PURE__ #endif #include #include #include /* for FILE* */ #ifdef __cplusplus extern "C" { #endif /** * ASN1_VERSION: * * Version of the library as a string. */ #define ASN1_VERSION "4.16.0" /** * ASN1_VERSION_MAJOR: * * Major version number of the library. */ #define ASN1_VERSION_MAJOR 4 /** * ASN1_VERSION_MINOR: * * Minor version number of the library. */ #define ASN1_VERSION_MINOR 16 /** * ASN1_VERSION_PATCH: * * Patch version number of the library. */ #define ASN1_VERSION_PATCH 0 /** * ASN1_VERSION_NUMBER: * * Version number of the library as a number. */ #define ASN1_VERSION_NUMBER 0x041000 #if defined __GNUC__ && !defined ASN1_INTERNAL_BUILD # define _ASN1_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) # if _ASN1_GCC_VERSION >= 30100 # define _ASN1_GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__)) # endif #endif #ifndef _ASN1_GCC_ATTR_DEPRECATED #define _ASN1_GCC_ATTR_DEPRECATED #endif /*****************************************/ /* Errors returned by libtasn1 functions */ /*****************************************/ #define ASN1_SUCCESS 0 #define ASN1_FILE_NOT_FOUND 1 #define ASN1_ELEMENT_NOT_FOUND 2 #define ASN1_IDENTIFIER_NOT_FOUND 3 #define ASN1_DER_ERROR 4 #define ASN1_VALUE_NOT_FOUND 5 #define ASN1_GENERIC_ERROR 6 #define ASN1_VALUE_NOT_VALID 7 #define ASN1_TAG_ERROR 8 #define ASN1_TAG_IMPLICIT 9 #define ASN1_ERROR_TYPE_ANY 10 #define ASN1_SYNTAX_ERROR 11 #define ASN1_MEM_ERROR 12 #define ASN1_MEM_ALLOC_ERROR 13 #define ASN1_DER_OVERFLOW 14 #define ASN1_NAME_TOO_LONG 15 #define ASN1_ARRAY_ERROR 16 #define ASN1_ELEMENT_NOT_EMPTY 17 #define ASN1_TIME_ENCODING_ERROR 18 #define ASN1_RECURSION 19 /*************************************/ /* Constants used in asn1_visit_tree */ /*************************************/ #define ASN1_PRINT_NAME 1 #define ASN1_PRINT_NAME_TYPE 2 #define ASN1_PRINT_NAME_TYPE_VALUE 3 #define ASN1_PRINT_ALL 4 /*****************************************/ /* Constants returned by asn1_read_tag */ /*****************************************/ #define ASN1_CLASS_UNIVERSAL 0x00 /* old: 1 */ #define ASN1_CLASS_APPLICATION 0x40 /* old: 2 */ #define ASN1_CLASS_CONTEXT_SPECIFIC 0x80 /* old: 3 */ #define ASN1_CLASS_PRIVATE 0xC0 /* old: 4 */ #define ASN1_CLASS_STRUCTURED 0x20 /*****************************************/ /* Constants returned by asn1_read_tag */ /*****************************************/ #define ASN1_TAG_BOOLEAN 0x01 #define ASN1_TAG_INTEGER 0x02 #define ASN1_TAG_SEQUENCE 0x10 #define ASN1_TAG_SET 0x11 #define ASN1_TAG_OCTET_STRING 0x04 #define ASN1_TAG_BIT_STRING 0x03 #define ASN1_TAG_UTCTime 0x17 #define ASN1_TAG_GENERALIZEDTime 0x18 #define ASN1_TAG_OBJECT_ID 0x06 #define ASN1_TAG_ENUMERATED 0x0A #define ASN1_TAG_NULL 0x05 #define ASN1_TAG_GENERALSTRING 0x1B #define ASN1_TAG_NUMERIC_STRING 0x12 #define ASN1_TAG_IA5_STRING 0x16 #define ASN1_TAG_TELETEX_STRING 0x14 #define ASN1_TAG_PRINTABLE_STRING 0x13 #define ASN1_TAG_UNIVERSAL_STRING 0x1C #define ASN1_TAG_BMP_STRING 0x1E #define ASN1_TAG_UTF8_STRING 0x0C #define ASN1_TAG_VISIBLE_STRING 0x1A /** * asn1_node: * * Structure definition used for the node of the tree * that represents an ASN.1 DEFINITION. */ typedef struct asn1_node_st asn1_node_st; typedef asn1_node_st *asn1_node; typedef const asn1_node_st *asn1_node_const; /** * ASN1_MAX_NAME_SIZE: * * Maximum number of characters of a name * inside a file with ASN1 definitions. */ #define ASN1_MAX_NAME_SIZE 64 /** * asn1_static_node: * @name: Node name * @type: Node typ * @value: Node value * * For the on-disk format of ASN.1 trees, created by asn1_parser2array(). */ struct asn1_static_node_st { const char *name; /* Node name */ unsigned int type; /* Node type */ const void *value; /* Node value */ }; typedef struct asn1_static_node_st asn1_static_node; /* List of constants for field type of node_asn */ #define ASN1_ETYPE_INVALID 0 #define ASN1_ETYPE_CONSTANT 1 #define ASN1_ETYPE_IDENTIFIER 2 #define ASN1_ETYPE_INTEGER 3 #define ASN1_ETYPE_BOOLEAN 4 #define ASN1_ETYPE_SEQUENCE 5 #define ASN1_ETYPE_BIT_STRING 6 #define ASN1_ETYPE_OCTET_STRING 7 #define ASN1_ETYPE_TAG 8 #define ASN1_ETYPE_DEFAULT 9 #define ASN1_ETYPE_SIZE 10 #define ASN1_ETYPE_SEQUENCE_OF 11 #define ASN1_ETYPE_OBJECT_ID 12 #define ASN1_ETYPE_ANY 13 #define ASN1_ETYPE_SET 14 #define ASN1_ETYPE_SET_OF 15 #define ASN1_ETYPE_DEFINITIONS 16 #define ASN1_ETYPE_CHOICE 18 #define ASN1_ETYPE_IMPORTS 19 #define ASN1_ETYPE_NULL 20 #define ASN1_ETYPE_ENUMERATED 21 #define ASN1_ETYPE_GENERALSTRING 27 #define ASN1_ETYPE_NUMERIC_STRING 28 #define ASN1_ETYPE_IA5_STRING 29 #define ASN1_ETYPE_TELETEX_STRING 30 #define ASN1_ETYPE_PRINTABLE_STRING 31 #define ASN1_ETYPE_UNIVERSAL_STRING 32 #define ASN1_ETYPE_BMP_STRING 33 #define ASN1_ETYPE_UTF8_STRING 34 #define ASN1_ETYPE_VISIBLE_STRING 35 #define ASN1_ETYPE_UTC_TIME 36 #define ASN1_ETYPE_GENERALIZED_TIME 37 /** * ASN1_DELETE_FLAG_ZEROIZE: * * Used by: asn1_delete_structure2() * * Zeroize values prior to deinitialization. */ #define ASN1_DELETE_FLAG_ZEROIZE 1 /** * ASN1_DECODE_FLAG_ALLOW_PADDING: * * Used by: asn1_der_decoding2() * * This flag would allow arbitrary data past the DER data. */ #define ASN1_DECODE_FLAG_ALLOW_PADDING 1 /** * ASN1_DECODE_FLAG_STRICT_DER: * * Used by: asn1_der_decoding2() * * This flag would ensure that no BER decoding takes place. */ #define ASN1_DECODE_FLAG_STRICT_DER (1<<1) /** * ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME: * * Used by: asn1_der_decoding2() * * This flag will tolerate Time encoding errors when in strict DER. */ #define ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME (1<<2) /** * asn1_data_node_st: * @name: Node name * @value: Node value * @value_len: Node value size * @type: Node value type (ASN1_ETYPE_*) * * Data node inside a #asn1_node structure. */ struct asn1_data_node_st { const char *name; /* Node name */ const void *value; /* Node value */ unsigned int value_len; /* Node value size */ unsigned int type; /* Node value type (ASN1_ETYPE_*) */ }; typedef struct asn1_data_node_st asn1_data_node_st; /***********************************/ /* Fixed constants */ /***********************************/ /** * ASN1_MAX_ERROR_DESCRIPTION_SIZE: * * Maximum number of characters * of a description message * (null character included). */ #define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128 /***********************************/ /* Functions definitions */ /***********************************/ extern ASN1_API int asn1_parser2tree (const char *file, asn1_node * definitions, char *error_desc); extern ASN1_API int asn1_parser2array (const char *inputFileName, const char *outputFileName, const char *vectorName, char *error_desc); extern ASN1_API int asn1_array2tree (const asn1_static_node * array, asn1_node * definitions, char *errorDescription); extern ASN1_API void asn1_print_structure (FILE * out, asn1_node_const structure, const char *name, int mode); extern ASN1_API int asn1_create_element (asn1_node_const definitions, const char *source_name, asn1_node * element); extern ASN1_API int asn1_delete_structure (asn1_node * structure); extern ASN1_API int asn1_delete_structure2 (asn1_node * structure, unsigned int flags); extern ASN1_API int asn1_delete_element (asn1_node structure, const char *element_name); extern ASN1_API int asn1_write_value (asn1_node node_root, const char *name, const void *ivalue, int len); extern ASN1_API int asn1_read_value (asn1_node_const root, const char *name, void *ivalue, int *len); extern ASN1_API int asn1_read_value_type (asn1_node_const root, const char *name, void *ivalue, int *len, unsigned int *etype); extern ASN1_API int asn1_read_node_value (asn1_node_const node, asn1_data_node_st * data); extern ASN1_API int asn1_number_of_elements (asn1_node_const element, const char *name, int *num); extern ASN1_API int asn1_der_coding (asn1_node_const element, const char *name, void *ider, int *len, char *ErrorDescription); extern ASN1_API int asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, unsigned int flags, char *errorDescription); extern ASN1_API int asn1_der_decoding (asn1_node * element, const void *ider, int ider_len, char *errorDescription); /* Do not use. Use asn1_der_decoding() instead. */ extern ASN1_API int asn1_der_decoding_element (asn1_node * structure, const char *elementName, const void *ider, int len, char *errorDescription) _ASN1_GCC_ATTR_DEPRECATED; extern ASN1_API int asn1_der_decoding_startEnd (asn1_node element, const void *ider, int ider_len, const char *name_element, int *start, int *end); extern ASN1_API int asn1_expand_any_defined_by (asn1_node_const definitions, asn1_node * element); extern ASN1_API int asn1_expand_octet_string (asn1_node_const definitions, asn1_node * element, const char *octetName, const char *objectName); extern ASN1_API int asn1_read_tag (asn1_node_const root, const char *name, int *tagValue, int *classValue); extern ASN1_API const char *asn1_find_structure_from_oid (asn1_node_const definitions, const char *oidValue); __LIBTASN1_PURE__ extern ASN1_API const char *asn1_check_version (const char *req_version); __LIBTASN1_PURE__ extern ASN1_API const char *asn1_strerror (int error); extern ASN1_API void asn1_perror (int error); #define ASN1_MAX_TAG_SIZE 4 #define ASN1_MAX_LENGTH_SIZE 9 #define ASN1_MAX_TL_SIZE (ASN1_MAX_TAG_SIZE+ASN1_MAX_LENGTH_SIZE) extern ASN1_API long asn1_get_length_der (const unsigned char *der, int der_len, int *len); extern ASN1_API long asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len); extern ASN1_API void asn1_length_der (unsigned long int len, unsigned char *der, int *der_len); /* Other utility functions. */ extern ASN1_API int asn1_decode_simple_der (unsigned int etype, const unsigned char *der, unsigned int _der_len, const unsigned char **str, unsigned int *str_len); extern ASN1_API int asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, unsigned int _der_len, unsigned char **str, unsigned int *str_len, unsigned int *ber_len); extern ASN1_API int asn1_encode_simple_der (unsigned int etype, const unsigned char *str, unsigned int str_len, unsigned char *tl, unsigned int *tl_len); extern ASN1_API asn1_node asn1_find_node (asn1_node_const pointer, const char *name); extern ASN1_API int asn1_copy_node (asn1_node dst, const char *dst_name, asn1_node_const src, const char *src_name); extern ASN1_API asn1_node asn1_dup_node (asn1_node_const src, const char *src_name); /* Internal and low-level DER utility functions. */ extern ASN1_API int asn1_get_tag_der (const unsigned char *der, int der_len, unsigned char *cls, int *len, unsigned long *tag); extern ASN1_API void asn1_octet_der (const unsigned char *str, int str_len, unsigned char *der, int *der_len); extern ASN1_API int asn1_get_octet_der (const unsigned char *der, int der_len, int *ret_len, unsigned char *str, int str_size, int *str_len); extern ASN1_API void asn1_bit_der (const unsigned char *str, int bit_len, unsigned char *der, int *der_len); extern ASN1_API int asn1_get_bit_der (const unsigned char *der, int der_len, int *ret_len, unsigned char *str, int str_size, int *bit_len); extern ASN1_API int asn1_get_object_id_der (const unsigned char *der, int der_len, int *ret_len, char *str, int str_size); extern ASN1_API int asn1_object_id_der (const char *str, unsigned char *der, int *der_len, unsigned flags); /* Compatibility types */ /** * asn1_retCode: * * Type formerly returned by libtasn1 functions. * * Deprecated: 3.0: Use int instead. */ typedef int asn1_retCode; /** * node_asn_struct: * * Compat #define. * * Deprecated: 3.0: Use #asn1_node instead. */ #define node_asn_struct asn1_node_st /** * node_asn: * * Compat #define. * * Deprecated: 3.0: Use #asn1_node instead. */ #define node_asn asn1_node_st /** * ASN1_TYPE: * * Compat #define. * * Deprecated: 3.0: Use #asn1_node instead. */ #define ASN1_TYPE asn1_node /** * ASN1_TYPE_EMPTY: * * Compat #define. * * Deprecated: 3.0: Use NULL instead. */ #define ASN1_TYPE_EMPTY NULL /** * static_struct_asn: * * Compat #define. * * Deprecated: 3.0: Use #asn1_static_node instead. */ #define static_struct_asn asn1_static_node_st /** * ASN1_ARRAY_TYPE: * * Compat #define. * * Deprecated: 3.0: Use #asn1_static_node instead. */ #define ASN1_ARRAY_TYPE asn1_static_node /** * asn1_static_node_t: * * Compat #define. * * Deprecated: 3.0: Use #asn1_static_node instead. */ #define asn1_static_node_t asn1_static_node /** * node_data_struct: * * Compat #define. * * Deprecated: 3.0: Use #asn1_data_node_st instead. */ #define node_data_struct asn1_data_node_st /** * ASN1_DATA_NODE: * * Compat #define. * * Deprecated: 3.0: Use #asn1_data_node_st instead. */ #define ASN1_DATA_NODE asn1_data_node_st #ifdef __cplusplus } #endif #endif /* LIBTASN1_H */ libtasn1-4.16.0/lib/includes/libtasn1.h.in0000644000000000000000000003617013611145057015067 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * LIBTASN1 is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * LIBTASN1 is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with LIBTASN1; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA * */ /** * libtasn1:Short_Description: * * GNU ASN.1 library */ /** * libtasn1:Long_Description: * * The Libtasn1 library provides Abstract Syntax Notation One (ASN.1, as * specified by the X.680 ITU-T recommendation) parsing and structures * management, and Distinguished Encoding Rules (DER, as per X.690) * encoding and decoding functions. */ #ifndef LIBTASN1_H #define LIBTASN1_H #ifndef ASN1_API #if defined ASN1_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY #define ASN1_API __attribute__((__visibility__("default"))) #elif defined ASN1_BUILDING && defined _MSC_VER && ! defined ASN1_STATIC #define ASN1_API __declspec(dllexport) #elif defined _MSC_VER && ! defined ASN1_STATIC #define ASN1_API __declspec(dllimport) #else #define ASN1_API #endif #endif #ifdef __GNUC__ # define __LIBTASN1_CONST__ __attribute__((const)) # define __LIBTASN1_PURE__ __attribute__((pure)) #else # define __LIBTASN1_CONST__ # define __LIBTASN1_PURE__ #endif #include #include #include /* for FILE* */ #ifdef __cplusplus extern "C" { #endif /** * ASN1_VERSION: * * Version of the library as a string. */ #define ASN1_VERSION "@VERSION@" /** * ASN1_VERSION_MAJOR: * * Major version number of the library. */ #define ASN1_VERSION_MAJOR @ASN1_VERSION_MAJOR@ /** * ASN1_VERSION_MINOR: * * Minor version number of the library. */ #define ASN1_VERSION_MINOR @ASN1_VERSION_MINOR@ /** * ASN1_VERSION_PATCH: * * Patch version number of the library. */ #define ASN1_VERSION_PATCH @ASN1_VERSION_PATCH@ /** * ASN1_VERSION_NUMBER: * * Version number of the library as a number. */ #define ASN1_VERSION_NUMBER @ASN1_VERSION_NUMBER@ #if defined __GNUC__ && !defined ASN1_INTERNAL_BUILD # define _ASN1_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) # if _ASN1_GCC_VERSION >= 30100 # define _ASN1_GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__)) # endif #endif #ifndef _ASN1_GCC_ATTR_DEPRECATED #define _ASN1_GCC_ATTR_DEPRECATED #endif /*****************************************/ /* Errors returned by libtasn1 functions */ /*****************************************/ #define ASN1_SUCCESS 0 #define ASN1_FILE_NOT_FOUND 1 #define ASN1_ELEMENT_NOT_FOUND 2 #define ASN1_IDENTIFIER_NOT_FOUND 3 #define ASN1_DER_ERROR 4 #define ASN1_VALUE_NOT_FOUND 5 #define ASN1_GENERIC_ERROR 6 #define ASN1_VALUE_NOT_VALID 7 #define ASN1_TAG_ERROR 8 #define ASN1_TAG_IMPLICIT 9 #define ASN1_ERROR_TYPE_ANY 10 #define ASN1_SYNTAX_ERROR 11 #define ASN1_MEM_ERROR 12 #define ASN1_MEM_ALLOC_ERROR 13 #define ASN1_DER_OVERFLOW 14 #define ASN1_NAME_TOO_LONG 15 #define ASN1_ARRAY_ERROR 16 #define ASN1_ELEMENT_NOT_EMPTY 17 #define ASN1_TIME_ENCODING_ERROR 18 #define ASN1_RECURSION 19 /*************************************/ /* Constants used in asn1_visit_tree */ /*************************************/ #define ASN1_PRINT_NAME 1 #define ASN1_PRINT_NAME_TYPE 2 #define ASN1_PRINT_NAME_TYPE_VALUE 3 #define ASN1_PRINT_ALL 4 /*****************************************/ /* Constants returned by asn1_read_tag */ /*****************************************/ #define ASN1_CLASS_UNIVERSAL 0x00 /* old: 1 */ #define ASN1_CLASS_APPLICATION 0x40 /* old: 2 */ #define ASN1_CLASS_CONTEXT_SPECIFIC 0x80 /* old: 3 */ #define ASN1_CLASS_PRIVATE 0xC0 /* old: 4 */ #define ASN1_CLASS_STRUCTURED 0x20 /*****************************************/ /* Constants returned by asn1_read_tag */ /*****************************************/ #define ASN1_TAG_BOOLEAN 0x01 #define ASN1_TAG_INTEGER 0x02 #define ASN1_TAG_SEQUENCE 0x10 #define ASN1_TAG_SET 0x11 #define ASN1_TAG_OCTET_STRING 0x04 #define ASN1_TAG_BIT_STRING 0x03 #define ASN1_TAG_UTCTime 0x17 #define ASN1_TAG_GENERALIZEDTime 0x18 #define ASN1_TAG_OBJECT_ID 0x06 #define ASN1_TAG_ENUMERATED 0x0A #define ASN1_TAG_NULL 0x05 #define ASN1_TAG_GENERALSTRING 0x1B #define ASN1_TAG_NUMERIC_STRING 0x12 #define ASN1_TAG_IA5_STRING 0x16 #define ASN1_TAG_TELETEX_STRING 0x14 #define ASN1_TAG_PRINTABLE_STRING 0x13 #define ASN1_TAG_UNIVERSAL_STRING 0x1C #define ASN1_TAG_BMP_STRING 0x1E #define ASN1_TAG_UTF8_STRING 0x0C #define ASN1_TAG_VISIBLE_STRING 0x1A /** * asn1_node: * * Structure definition used for the node of the tree * that represents an ASN.1 DEFINITION. */ typedef struct asn1_node_st asn1_node_st; typedef asn1_node_st *asn1_node; typedef const asn1_node_st *asn1_node_const; /** * ASN1_MAX_NAME_SIZE: * * Maximum number of characters of a name * inside a file with ASN1 definitions. */ #define ASN1_MAX_NAME_SIZE 64 /** * asn1_static_node: * @name: Node name * @type: Node typ * @value: Node value * * For the on-disk format of ASN.1 trees, created by asn1_parser2array(). */ struct asn1_static_node_st { const char *name; /* Node name */ unsigned int type; /* Node type */ const void *value; /* Node value */ }; typedef struct asn1_static_node_st asn1_static_node; /* List of constants for field type of node_asn */ #define ASN1_ETYPE_INVALID 0 #define ASN1_ETYPE_CONSTANT 1 #define ASN1_ETYPE_IDENTIFIER 2 #define ASN1_ETYPE_INTEGER 3 #define ASN1_ETYPE_BOOLEAN 4 #define ASN1_ETYPE_SEQUENCE 5 #define ASN1_ETYPE_BIT_STRING 6 #define ASN1_ETYPE_OCTET_STRING 7 #define ASN1_ETYPE_TAG 8 #define ASN1_ETYPE_DEFAULT 9 #define ASN1_ETYPE_SIZE 10 #define ASN1_ETYPE_SEQUENCE_OF 11 #define ASN1_ETYPE_OBJECT_ID 12 #define ASN1_ETYPE_ANY 13 #define ASN1_ETYPE_SET 14 #define ASN1_ETYPE_SET_OF 15 #define ASN1_ETYPE_DEFINITIONS 16 #define ASN1_ETYPE_CHOICE 18 #define ASN1_ETYPE_IMPORTS 19 #define ASN1_ETYPE_NULL 20 #define ASN1_ETYPE_ENUMERATED 21 #define ASN1_ETYPE_GENERALSTRING 27 #define ASN1_ETYPE_NUMERIC_STRING 28 #define ASN1_ETYPE_IA5_STRING 29 #define ASN1_ETYPE_TELETEX_STRING 30 #define ASN1_ETYPE_PRINTABLE_STRING 31 #define ASN1_ETYPE_UNIVERSAL_STRING 32 #define ASN1_ETYPE_BMP_STRING 33 #define ASN1_ETYPE_UTF8_STRING 34 #define ASN1_ETYPE_VISIBLE_STRING 35 #define ASN1_ETYPE_UTC_TIME 36 #define ASN1_ETYPE_GENERALIZED_TIME 37 /** * ASN1_DELETE_FLAG_ZEROIZE: * * Used by: asn1_delete_structure2() * * Zeroize values prior to deinitialization. */ #define ASN1_DELETE_FLAG_ZEROIZE 1 /** * ASN1_DECODE_FLAG_ALLOW_PADDING: * * Used by: asn1_der_decoding2() * * This flag would allow arbitrary data past the DER data. */ #define ASN1_DECODE_FLAG_ALLOW_PADDING 1 /** * ASN1_DECODE_FLAG_STRICT_DER: * * Used by: asn1_der_decoding2() * * This flag would ensure that no BER decoding takes place. */ #define ASN1_DECODE_FLAG_STRICT_DER (1<<1) /** * ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME: * * Used by: asn1_der_decoding2() * * This flag will tolerate Time encoding errors when in strict DER. */ #define ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME (1<<2) /** * asn1_data_node_st: * @name: Node name * @value: Node value * @value_len: Node value size * @type: Node value type (ASN1_ETYPE_*) * * Data node inside a #asn1_node structure. */ struct asn1_data_node_st { const char *name; /* Node name */ const void *value; /* Node value */ unsigned int value_len; /* Node value size */ unsigned int type; /* Node value type (ASN1_ETYPE_*) */ }; typedef struct asn1_data_node_st asn1_data_node_st; /***********************************/ /* Fixed constants */ /***********************************/ /** * ASN1_MAX_ERROR_DESCRIPTION_SIZE: * * Maximum number of characters * of a description message * (null character included). */ #define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128 /***********************************/ /* Functions definitions */ /***********************************/ extern ASN1_API int asn1_parser2tree (const char *file, asn1_node * definitions, char *error_desc); extern ASN1_API int asn1_parser2array (const char *inputFileName, const char *outputFileName, const char *vectorName, char *error_desc); extern ASN1_API int asn1_array2tree (const asn1_static_node * array, asn1_node * definitions, char *errorDescription); extern ASN1_API void asn1_print_structure (FILE * out, asn1_node_const structure, const char *name, int mode); extern ASN1_API int asn1_create_element (asn1_node_const definitions, const char *source_name, asn1_node * element); extern ASN1_API int asn1_delete_structure (asn1_node * structure); extern ASN1_API int asn1_delete_structure2 (asn1_node * structure, unsigned int flags); extern ASN1_API int asn1_delete_element (asn1_node structure, const char *element_name); extern ASN1_API int asn1_write_value (asn1_node node_root, const char *name, const void *ivalue, int len); extern ASN1_API int asn1_read_value (asn1_node_const root, const char *name, void *ivalue, int *len); extern ASN1_API int asn1_read_value_type (asn1_node_const root, const char *name, void *ivalue, int *len, unsigned int *etype); extern ASN1_API int asn1_read_node_value (asn1_node_const node, asn1_data_node_st * data); extern ASN1_API int asn1_number_of_elements (asn1_node_const element, const char *name, int *num); extern ASN1_API int asn1_der_coding (asn1_node_const element, const char *name, void *ider, int *len, char *ErrorDescription); extern ASN1_API int asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, unsigned int flags, char *errorDescription); extern ASN1_API int asn1_der_decoding (asn1_node * element, const void *ider, int ider_len, char *errorDescription); /* Do not use. Use asn1_der_decoding() instead. */ extern ASN1_API int asn1_der_decoding_element (asn1_node * structure, const char *elementName, const void *ider, int len, char *errorDescription) _ASN1_GCC_ATTR_DEPRECATED; extern ASN1_API int asn1_der_decoding_startEnd (asn1_node element, const void *ider, int ider_len, const char *name_element, int *start, int *end); extern ASN1_API int asn1_expand_any_defined_by (asn1_node_const definitions, asn1_node * element); extern ASN1_API int asn1_expand_octet_string (asn1_node_const definitions, asn1_node * element, const char *octetName, const char *objectName); extern ASN1_API int asn1_read_tag (asn1_node_const root, const char *name, int *tagValue, int *classValue); extern ASN1_API const char *asn1_find_structure_from_oid (asn1_node_const definitions, const char *oidValue); __LIBTASN1_PURE__ extern ASN1_API const char *asn1_check_version (const char *req_version); __LIBTASN1_PURE__ extern ASN1_API const char *asn1_strerror (int error); extern ASN1_API void asn1_perror (int error); #define ASN1_MAX_TAG_SIZE 4 #define ASN1_MAX_LENGTH_SIZE 9 #define ASN1_MAX_TL_SIZE (ASN1_MAX_TAG_SIZE+ASN1_MAX_LENGTH_SIZE) extern ASN1_API long asn1_get_length_der (const unsigned char *der, int der_len, int *len); extern ASN1_API long asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len); extern ASN1_API void asn1_length_der (unsigned long int len, unsigned char *der, int *der_len); /* Other utility functions. */ extern ASN1_API int asn1_decode_simple_der (unsigned int etype, const unsigned char *der, unsigned int _der_len, const unsigned char **str, unsigned int *str_len); extern ASN1_API int asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, unsigned int _der_len, unsigned char **str, unsigned int *str_len, unsigned int *ber_len); extern ASN1_API int asn1_encode_simple_der (unsigned int etype, const unsigned char *str, unsigned int str_len, unsigned char *tl, unsigned int *tl_len); extern ASN1_API asn1_node asn1_find_node (asn1_node_const pointer, const char *name); extern ASN1_API int asn1_copy_node (asn1_node dst, const char *dst_name, asn1_node_const src, const char *src_name); extern ASN1_API asn1_node asn1_dup_node (asn1_node_const src, const char *src_name); /* Internal and low-level DER utility functions. */ extern ASN1_API int asn1_get_tag_der (const unsigned char *der, int der_len, unsigned char *cls, int *len, unsigned long *tag); extern ASN1_API void asn1_octet_der (const unsigned char *str, int str_len, unsigned char *der, int *der_len); extern ASN1_API int asn1_get_octet_der (const unsigned char *der, int der_len, int *ret_len, unsigned char *str, int str_size, int *str_len); extern ASN1_API void asn1_bit_der (const unsigned char *str, int bit_len, unsigned char *der, int *der_len); extern ASN1_API int asn1_get_bit_der (const unsigned char *der, int der_len, int *ret_len, unsigned char *str, int str_size, int *bit_len); extern ASN1_API int asn1_get_object_id_der (const unsigned char *der, int der_len, int *ret_len, char *str, int str_size); extern ASN1_API int asn1_object_id_der (const char *str, unsigned char *der, int *der_len, unsigned flags); /* Compatibility types */ /** * asn1_retCode: * * Type formerly returned by libtasn1 functions. * * Deprecated: 3.0: Use int instead. */ typedef int asn1_retCode; /** * node_asn_struct: * * Compat #define. * * Deprecated: 3.0: Use #asn1_node instead. */ #define node_asn_struct asn1_node_st /** * node_asn: * * Compat #define. * * Deprecated: 3.0: Use #asn1_node instead. */ #define node_asn asn1_node_st /** * ASN1_TYPE: * * Compat #define. * * Deprecated: 3.0: Use #asn1_node instead. */ #define ASN1_TYPE asn1_node /** * ASN1_TYPE_EMPTY: * * Compat #define. * * Deprecated: 3.0: Use NULL instead. */ #define ASN1_TYPE_EMPTY NULL /** * static_struct_asn: * * Compat #define. * * Deprecated: 3.0: Use #asn1_static_node instead. */ #define static_struct_asn asn1_static_node_st /** * ASN1_ARRAY_TYPE: * * Compat #define. * * Deprecated: 3.0: Use #asn1_static_node instead. */ #define ASN1_ARRAY_TYPE asn1_static_node /** * asn1_static_node_t: * * Compat #define. * * Deprecated: 3.0: Use #asn1_static_node instead. */ #define asn1_static_node_t asn1_static_node /** * node_data_struct: * * Compat #define. * * Deprecated: 3.0: Use #asn1_data_node_st instead. */ #define node_data_struct asn1_data_node_st /** * ASN1_DATA_NODE: * * Compat #define. * * Deprecated: 3.0: Use #asn1_data_node_st instead. */ #define ASN1_DATA_NODE asn1_data_node_st #ifdef __cplusplus } #endif #endif /* LIBTASN1_H */ libtasn1-4.16.0/lib/decoding.c0000644000000000000000000016550613611145057012714 00000000000000/* * Copyright (C) 2002-2016 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ /*****************************************************/ /* File: decoding.c */ /* Description: Functions to manage DER decoding */ /*****************************************************/ #include #include #include #include #include #include #include #include #ifdef DEBUG # define warn() fprintf(stderr, "%s: %d\n", __func__, __LINE__) #else # define warn() #endif #define IS_ERR(len, flags) (len < -1 || ((flags & ASN1_DECODE_FLAG_STRICT_DER) && len < 0)) #define HAVE_TWO(x) (x>=2?1:0) /* Decoding flags (dflags) used in several decoding functions. * DECODE_FLAG_HAVE_TAG: The provided buffer includes a tag * DECODE_FLAG_CONSTRUCTED: The provided buffer is of indefinite encoding (useful * when no tags are present). * DECODE_FLAG_LEVEL1: Internal flag to indicate a level of recursion for BER strings. * DECODE_FLAG_LEVEL2: Internal flag to indicate two levels of recursion for BER strings. * DECODE_FLAG_LEVEL3: Internal flag to indicate three levels of recursion for BER strings. * This is the maximum levels of recursion possible to prevent stack * exhaustion. */ #define DECODE_FLAG_HAVE_TAG 1 #define DECODE_FLAG_CONSTRUCTED (1<<1) #define DECODE_FLAG_LEVEL1 (1<<2) #define DECODE_FLAG_LEVEL2 (1<<3) #define DECODE_FLAG_LEVEL3 (1<<4) #define DECR_LEN(l, s) do { \ l -= s; \ if (l < 0) { \ warn(); \ result = ASN1_DER_ERROR; \ goto cleanup; \ } \ } while (0) static int _asn1_get_indefinite_length_string (const unsigned char *der, int der_len, int *len); static int _asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, unsigned int _der_len, unsigned char **str, unsigned int *str_len, unsigned int *ber_len, unsigned dflags); static int _asn1_decode_simple_der (unsigned int etype, const unsigned char *der, unsigned int _der_len, const unsigned char **str, unsigned int *str_len, unsigned dflags); static void _asn1_error_description_tag_error (asn1_node node, char *ErrorDescription) { Estrcpy (ErrorDescription, ":: tag error near element '"); _asn1_hierarchical_name (node, ErrorDescription + strlen (ErrorDescription), ASN1_MAX_ERROR_DESCRIPTION_SIZE - 40); Estrcat (ErrorDescription, "'"); } /** * asn1_get_length_der: * @der: DER data to decode. * @der_len: Length of DER data to decode. * @len: Output variable containing the length of the DER length field. * * Extract a length field from DER data. * * Returns: Return the decoded length value, or -1 on indefinite * length, or -2 when the value was too big to fit in a int, or -4 * when the decoded length value plus @len would exceed @der_len. **/ long asn1_get_length_der (const unsigned char *der, int der_len, int *len) { unsigned int ans; int k, punt, sum; *len = 0; if (der_len <= 0) return 0; if (!(der[0] & 128)) { /* short form */ *len = 1; ans = der[0]; } else { /* Long form */ k = der[0] & 0x7F; punt = 1; if (k) { /* definite length method */ ans = 0; while (punt <= k && punt < der_len) { if (INT_MULTIPLY_OVERFLOW (ans, 256)) return -2; ans *= 256; if (INT_ADD_OVERFLOW (ans, ((unsigned) der[punt]))) return -2; ans += der[punt]; punt++; } } else { /* indefinite length method */ *len = punt; return -1; } *len = punt; } sum = ans; if (ans >= INT_MAX || INT_ADD_OVERFLOW (sum, (*len))) return -2; sum += *len; if (sum > der_len) return -4; return ans; } /** * asn1_get_tag_der: * @der: DER data to decode. * @der_len: Length of DER data to decode. * @cls: Output variable containing decoded class. * @len: Output variable containing the length of the DER TAG data. * @tag: Output variable containing the decoded tag (may be %NULL). * * Decode the class and TAG from DER code. * * Returns: Returns %ASN1_SUCCESS on success, or an error. **/ int asn1_get_tag_der (const unsigned char *der, int der_len, unsigned char *cls, int *len, unsigned long *tag) { unsigned int ris; int punt; if (der == NULL || der_len < 2 || len == NULL) return ASN1_DER_ERROR; *cls = der[0] & 0xE0; if ((der[0] & 0x1F) != 0x1F) { /* short form */ *len = 1; ris = der[0] & 0x1F; } else { /* Long form */ punt = 1; ris = 0; while (punt < der_len && der[punt] & 128) { if (INT_MULTIPLY_OVERFLOW (ris, 128)) return ASN1_DER_ERROR; ris *= 128; if (INT_ADD_OVERFLOW (ris, ((unsigned) (der[punt] & 0x7F)))) return ASN1_DER_ERROR; ris += (der[punt] & 0x7F); punt++; } if (punt >= der_len) return ASN1_DER_ERROR; if (INT_MULTIPLY_OVERFLOW (ris, 128)) return ASN1_DER_ERROR; ris *= 128; if (INT_ADD_OVERFLOW (ris, ((unsigned) (der[punt] & 0x7F)))) return ASN1_DER_ERROR; ris += (der[punt] & 0x7F); punt++; *len = punt; } if (tag) *tag = ris; return ASN1_SUCCESS; } /** * asn1_get_length_ber: * @ber: BER data to decode. * @ber_len: Length of BER data to decode. * @len: Output variable containing the length of the BER length field. * * Extract a length field from BER data. The difference to * asn1_get_length_der() is that this function will return a length * even if the value has indefinite encoding. * * Returns: Return the decoded length value, or negative value when * the value was too big. * * Since: 2.0 **/ long asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len) { int ret; long err; ret = asn1_get_length_der (ber, ber_len, len); if (ret == -1 && ber_len > 1) { /* indefinite length method */ err = _asn1_get_indefinite_length_string (ber + 1, ber_len-1, &ret); if (err != ASN1_SUCCESS) return -3; } return ret; } /** * asn1_get_octet_der: * @der: DER data to decode containing the OCTET SEQUENCE. * @der_len: The length of the @der data to decode. * @ret_len: Output variable containing the encoded length of the DER data. * @str: Pre-allocated output buffer to put decoded OCTET SEQUENCE in. * @str_size: Length of pre-allocated output buffer. * @str_len: Output variable containing the length of the contents of the OCTET SEQUENCE. * * Extract an OCTET SEQUENCE from DER data. Note that this function * expects the DER data past the tag field, i.e., the length and * content octets. * * Returns: Returns %ASN1_SUCCESS on success, or an error. **/ int asn1_get_octet_der (const unsigned char *der, int der_len, int *ret_len, unsigned char *str, int str_size, int *str_len) { int len_len = 0; if (der_len <= 0) return ASN1_GENERIC_ERROR; *str_len = asn1_get_length_der (der, der_len, &len_len); if (*str_len < 0) return ASN1_DER_ERROR; *ret_len = *str_len + len_len; if (str_size >= *str_len) { if (*str_len > 0 && str != NULL) memcpy (str, der + len_len, *str_len); } else { return ASN1_MEM_ERROR; } return ASN1_SUCCESS; } /*- * _asn1_get_time_der: * @type: %ASN1_ETYPE_GENERALIZED_TIME or %ASN1_ETYPE_UTC_TIME * @der: DER data to decode containing the time * @der_len: Length of DER data to decode. * @ret_len: Output variable containing the length of the DER data. * @str: Pre-allocated output buffer to put the textual time in. * @str_size: Length of pre-allocated output buffer. * @flags: Zero or %ASN1_DECODE_FLAG_STRICT_DER * * Performs basic checks in the DER encoded time object and returns its textual form. * The textual form will be in the YYYYMMDD000000Z format for GeneralizedTime * and YYMMDD000000Z for UTCTime. * * Returns: %ASN1_SUCCESS on success, or an error. -*/ static int _asn1_get_time_der (unsigned type, const unsigned char *der, int der_len, int *ret_len, char *str, int str_size, unsigned flags) { int len_len, str_len; unsigned i; unsigned sign_count = 0; unsigned dot_count = 0; const unsigned char *p; if (der_len <= 0 || str == NULL) return ASN1_DER_ERROR; str_len = asn1_get_length_der (der, der_len, &len_len); if (str_len <= 0 || str_size < str_len) return ASN1_DER_ERROR; /* perform some sanity checks on the data */ if (str_len < 8) { warn(); return ASN1_TIME_ENCODING_ERROR; } if ((flags & ASN1_DECODE_FLAG_STRICT_DER) && !(flags & ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME)) { p = &der[len_len]; for (i=0;i<(unsigned)(str_len-1);i++) { if (c_isdigit(p[i]) == 0) { if (type == ASN1_ETYPE_GENERALIZED_TIME) { /* tolerate lax encodings */ if (p[i] == '.' && dot_count == 0) { dot_count++; continue; } /* This is not really valid DER, but there are * structures using that */ if (!(flags & ASN1_DECODE_FLAG_STRICT_DER) && (p[i] == '+' || p[i] == '-') && sign_count == 0) { sign_count++; continue; } } warn(); return ASN1_TIME_ENCODING_ERROR; } } if (sign_count == 0 && p[str_len-1] != 'Z') { warn(); return ASN1_TIME_ENCODING_ERROR; } } memcpy (str, der + len_len, str_len); str[str_len] = 0; *ret_len = str_len + len_len; return ASN1_SUCCESS; } /** * asn1_get_object_id_der: * @der: DER data to decode containing the OBJECT IDENTIFIER * @der_len: Length of DER data to decode. * @ret_len: Output variable containing the length of the DER data. * @str: Pre-allocated output buffer to put the textual object id in. * @str_size: Length of pre-allocated output buffer. * * Converts a DER encoded object identifier to its textual form. This * function expects the DER object identifier without the tag. * * Returns: %ASN1_SUCCESS on success, or an error. **/ int asn1_get_object_id_der (const unsigned char *der, int der_len, int *ret_len, char *str, int str_size) { int len_len, len, k; int leading, parsed; char temp[LTOSTR_MAX_SIZE]; uint64_t val, val1, val0; *ret_len = 0; if (str && str_size > 0) str[0] = 0; /* no oid */ if (str == NULL || der_len <= 0) return ASN1_GENERIC_ERROR; len = asn1_get_length_der (der, der_len, &len_len); if (len <= 0 || len + len_len > der_len) return ASN1_DER_ERROR; /* leading octet can never be 0x80 */ if (der[len_len] == 0x80) return ASN1_DER_ERROR; val0 = 0; for (k = 0; k < len; k++) { if (INT_LEFT_SHIFT_OVERFLOW (val0, 7)) return ASN1_DER_ERROR; val0 <<= 7; val0 |= der[len_len + k] & 0x7F; if (!(der[len_len + k] & 0x80)) break; } parsed = ++k; /* val0 = (X*40) + Y, X={0,1,2}, Y<=39 when X={0,1} */ /* X = val, Y = val1 */ /* check if X == 0 */ val = 0; val1 = val0; if (val1 > 39) { val = 1; val1 = val0 - 40; if (val1 > 39) { val = 2; val1 = val0 - 80; } } _asn1_str_cpy (str, str_size, _asn1_ltostr (val, temp)); _asn1_str_cat (str, str_size, "."); _asn1_str_cat (str, str_size, _asn1_ltostr (val1, temp)); val = 0; leading = 1; for (k = parsed; k < len; k++) { /* X.690 mandates that the leading byte must never be 0x80 */ if (leading != 0 && der[len_len + k] == 0x80) return ASN1_DER_ERROR; leading = 0; /* check for wrap around */ if (INT_LEFT_SHIFT_OVERFLOW (val, 7)) return ASN1_DER_ERROR; val = val << 7; val |= der[len_len + k] & 0x7F; if (!(der[len_len + k] & 0x80)) { _asn1_str_cat (str, str_size, "."); _asn1_str_cat (str, str_size, _asn1_ltostr (val, temp)); val = 0; leading = 1; } } if (INT_ADD_OVERFLOW (len, len_len)) return ASN1_DER_ERROR; *ret_len = len + len_len; return ASN1_SUCCESS; } /** * asn1_get_bit_der: * @der: DER data to decode containing the BIT SEQUENCE. * @der_len: Length of DER data to decode. * @ret_len: Output variable containing the length of the DER data. * @str: Pre-allocated output buffer to put decoded BIT SEQUENCE in. * @str_size: Length of pre-allocated output buffer. * @bit_len: Output variable containing the size of the BIT SEQUENCE. * * Extract a BIT SEQUENCE from DER data. * * Returns: %ASN1_SUCCESS on success, or an error. **/ int asn1_get_bit_der (const unsigned char *der, int der_len, int *ret_len, unsigned char *str, int str_size, int *bit_len) { int len_len = 0, len_byte; if (der_len <= 0) return ASN1_GENERIC_ERROR; len_byte = asn1_get_length_der (der, der_len, &len_len) - 1; if (len_byte < 0) return ASN1_DER_ERROR; *ret_len = len_byte + len_len + 1; *bit_len = len_byte * 8 - der[len_len]; if (*bit_len < 0) return ASN1_DER_ERROR; if (str_size >= len_byte) { if (len_byte > 0 && str) memcpy (str, der + len_len + 1, len_byte); } else { return ASN1_MEM_ERROR; } return ASN1_SUCCESS; } /* tag_len: the total tag length (explicit+inner) * inner_tag_len: the inner_tag length */ static int _asn1_extract_tag_der (asn1_node node, const unsigned char *der, int der_len, int *tag_len, int *inner_tag_len, unsigned flags) { asn1_node p; int counter, len2, len3, is_tag_implicit; int result; unsigned long tag, tag_implicit = 0; unsigned char class, class2, class_implicit = 0; if (der_len <= 0) return ASN1_GENERIC_ERROR; counter = is_tag_implicit = 0; if (node->type & CONST_TAG) { p = node->down; while (p) { if (type_field (p->type) == ASN1_ETYPE_TAG) { if (p->type & CONST_APPLICATION) class2 = ASN1_CLASS_APPLICATION; else if (p->type & CONST_UNIVERSAL) class2 = ASN1_CLASS_UNIVERSAL; else if (p->type & CONST_PRIVATE) class2 = ASN1_CLASS_PRIVATE; else class2 = ASN1_CLASS_CONTEXT_SPECIFIC; if (p->type & CONST_EXPLICIT) { if (asn1_get_tag_der (der + counter, der_len, &class, &len2, &tag) != ASN1_SUCCESS) return ASN1_DER_ERROR; DECR_LEN(der_len, len2); counter += len2; if (flags & ASN1_DECODE_FLAG_STRICT_DER) len3 = asn1_get_length_der (der + counter, der_len, &len2); else len3 = asn1_get_length_ber (der + counter, der_len, &len2); if (len3 < 0) return ASN1_DER_ERROR; DECR_LEN(der_len, len2); counter += len2; if (!is_tag_implicit) { if ((class != (class2 | ASN1_CLASS_STRUCTURED)) || (tag != strtoul ((char *) p->value, NULL, 10))) return ASN1_TAG_ERROR; } else { /* ASN1_TAG_IMPLICIT */ if ((class != class_implicit) || (tag != tag_implicit)) return ASN1_TAG_ERROR; } is_tag_implicit = 0; } else { /* ASN1_TAG_IMPLICIT */ if (!is_tag_implicit) { if ((type_field (node->type) == ASN1_ETYPE_SEQUENCE) || (type_field (node->type) == ASN1_ETYPE_SEQUENCE_OF) || (type_field (node->type) == ASN1_ETYPE_SET) || (type_field (node->type) == ASN1_ETYPE_SET_OF)) class2 |= ASN1_CLASS_STRUCTURED; class_implicit = class2; tag_implicit = strtoul ((char *) p->value, NULL, 10); is_tag_implicit = 1; } } } p = p->right; } } if (is_tag_implicit) { if (asn1_get_tag_der (der + counter, der_len, &class, &len2, &tag) != ASN1_SUCCESS) return ASN1_DER_ERROR; DECR_LEN(der_len, len2); if ((class != class_implicit) || (tag != tag_implicit)) { if (type_field (node->type) == ASN1_ETYPE_OCTET_STRING) { class_implicit |= ASN1_CLASS_STRUCTURED; if ((class != class_implicit) || (tag != tag_implicit)) return ASN1_TAG_ERROR; } else return ASN1_TAG_ERROR; } } else { unsigned type = type_field (node->type); if (type == ASN1_ETYPE_TAG) { *tag_len = 0; if (inner_tag_len) *inner_tag_len = 0; return ASN1_SUCCESS; } if (asn1_get_tag_der (der + counter, der_len, &class, &len2, &tag) != ASN1_SUCCESS) return ASN1_DER_ERROR; DECR_LEN(der_len, len2); switch (type) { case ASN1_ETYPE_NULL: case ASN1_ETYPE_BOOLEAN: case ASN1_ETYPE_INTEGER: case ASN1_ETYPE_ENUMERATED: case ASN1_ETYPE_OBJECT_ID: case ASN1_ETYPE_GENERALSTRING: case ASN1_ETYPE_NUMERIC_STRING: case ASN1_ETYPE_IA5_STRING: case ASN1_ETYPE_TELETEX_STRING: case ASN1_ETYPE_PRINTABLE_STRING: case ASN1_ETYPE_UNIVERSAL_STRING: case ASN1_ETYPE_BMP_STRING: case ASN1_ETYPE_UTF8_STRING: case ASN1_ETYPE_VISIBLE_STRING: case ASN1_ETYPE_BIT_STRING: case ASN1_ETYPE_SEQUENCE: case ASN1_ETYPE_SEQUENCE_OF: case ASN1_ETYPE_SET: case ASN1_ETYPE_SET_OF: case ASN1_ETYPE_GENERALIZED_TIME: case ASN1_ETYPE_UTC_TIME: if ((class != _asn1_tags[type].class) || (tag != _asn1_tags[type].tag)) return ASN1_DER_ERROR; break; case ASN1_ETYPE_OCTET_STRING: /* OCTET STRING is handled differently to allow * BER encodings (structured class). */ if (((class != ASN1_CLASS_UNIVERSAL) && (class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED))) || (tag != ASN1_TAG_OCTET_STRING)) return ASN1_DER_ERROR; break; case ASN1_ETYPE_ANY: counter -= len2; break; case ASN1_ETYPE_CHOICE: counter -= len2; break; default: return ASN1_DER_ERROR; break; } } counter += len2; *tag_len = counter; if (inner_tag_len) *inner_tag_len = len2; return ASN1_SUCCESS; cleanup: return result; } static int extract_tag_der_recursive(asn1_node node, const unsigned char *der, int der_len, int *ret_len, int *inner_len, unsigned flags) { asn1_node p; int ris = ASN1_DER_ERROR; if (type_field (node->type) == ASN1_ETYPE_CHOICE) { p = node->down; while (p) { ris = _asn1_extract_tag_der (p, der, der_len, ret_len, inner_len, flags); if (ris == ASN1_SUCCESS) break; p = p->right; } *ret_len = 0; return ris; } else return _asn1_extract_tag_der (node, der, der_len, ret_len, inner_len, flags); } static int _asn1_delete_not_used (asn1_node node) { asn1_node p, p2; if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; p = node; while (p) { if (p->type & CONST_NOT_USED) { p2 = NULL; if (p != node) { p2 = _asn1_find_left (p); if (!p2) p2 = _asn1_find_up (p); } asn1_delete_structure (&p); p = p2; } if (!p) break; /* reach node */ if (p->down) { p = p->down; } else { if (p == node) p = NULL; else if (p->right) p = p->right; else { while (1) { p = _asn1_find_up (p); if (p == node) { p = NULL; break; } if (p->right) { p = p->right; break; } } } } } return ASN1_SUCCESS; } static int _asn1_get_indefinite_length_string (const unsigned char *der, int der_len, int *len) { int len2, len3, counter, indefinite; int result; unsigned long tag; unsigned char class; counter = indefinite = 0; while (1) { if (HAVE_TWO(der_len) && (der[counter] == 0) && (der[counter + 1] == 0)) { counter += 2; DECR_LEN(der_len, 2); indefinite--; if (indefinite <= 0) break; else continue; } if (asn1_get_tag_der (der + counter, der_len, &class, &len2, &tag) != ASN1_SUCCESS) return ASN1_DER_ERROR; DECR_LEN(der_len, len2); counter += len2; len2 = asn1_get_length_der (der + counter, der_len, &len3); if (len2 < -1) return ASN1_DER_ERROR; if (len2 == -1) { indefinite++; counter += 1; DECR_LEN(der_len, 1); } else { counter += len2 + len3; DECR_LEN(der_len, len2+len3); } } *len = counter; return ASN1_SUCCESS; cleanup: return result; } static void delete_unneeded_choice_fields(asn1_node p) { asn1_node p2; while (p->right) { p2 = p->right; asn1_delete_structure (&p2); } } /** * asn1_der_decoding2 * @element: pointer to an ASN1 structure. * @ider: vector that contains the DER encoding. * @max_ider_len: pointer to an integer giving the information about the * maximal number of bytes occupied by *@ider. The real size of the DER * encoding is returned through this pointer. * @flags: flags controlling the behaviour of the function. * @errorDescription: null-terminated string contains details when an * error occurred. * * Fill the structure *@element with values of a DER encoding string. The * structure must just be created with function asn1_create_element(). * * If %ASN1_DECODE_FLAG_ALLOW_PADDING flag is set then the function will ignore * padding after the decoded DER data. Upon a successful return the value of * *@max_ider_len will be set to the number of bytes decoded. * * If %ASN1_DECODE_FLAG_STRICT_DER flag is set then the function will * not decode any BER-encoded elements. * * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND * if @ELEMENT is %NULL, and %ASN1_TAG_ERROR or * %ASN1_DER_ERROR if the der encoding doesn't match the structure * name (*@ELEMENT deleted). **/ int asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, unsigned int flags, char *errorDescription) { asn1_node node, p, p2, p3; char temp[128]; int counter, len2, len3, len4, move, ris, tlen; struct node_tail_cache_st tcache = {NULL, NULL}; unsigned char class; unsigned long tag; int tag_len; int indefinite, result, total_len = *max_ider_len, ider_len = *max_ider_len; int inner_tag_len; unsigned char *ptmp; const unsigned char *ptag; const unsigned char *der = ider; node = *element; if (errorDescription != NULL) errorDescription[0] = 0; if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; if (node->type & CONST_OPTION) { result = ASN1_GENERIC_ERROR; warn(); goto cleanup; } counter = 0; move = DOWN; p = node; while (1) { tag_len = 0; inner_tag_len = 0; ris = ASN1_SUCCESS; if (move != UP) { if (p->type & CONST_SET) { p2 = _asn1_find_up (p); len2 = p2->tmp_ival; if (len2 == -1) { if (HAVE_TWO(ider_len) && !der[counter] && !der[counter + 1]) { p = p2; move = UP; counter += 2; DECR_LEN(ider_len, 2); continue; } } else if (counter == len2) { p = p2; move = UP; continue; } else if (counter > len2) { result = ASN1_DER_ERROR; warn(); goto cleanup; } p2 = p2->down; while (p2) { if ((p2->type & CONST_SET) && (p2->type & CONST_NOT_USED)) { ris = extract_tag_der_recursive (p2, der + counter, ider_len, &len2, NULL, flags); if (ris == ASN1_SUCCESS) { p2->type &= ~CONST_NOT_USED; p = p2; break; } } p2 = p2->right; } if (p2 == NULL) { result = ASN1_DER_ERROR; warn(); goto cleanup; } } /* the position in the DER structure this starts */ p->start = counter; p->end = total_len - 1; if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT)) { p2 = _asn1_find_up (p); len2 = p2->tmp_ival; if (counter == len2) { if (p->right) { p2 = p->right; move = RIGHT; } else move = UP; if (p->type & CONST_OPTION) asn1_delete_structure (&p); p = p2; continue; } } if (type_field (p->type) == ASN1_ETYPE_CHOICE) { while (p->down) { ris = extract_tag_der_recursive (p->down, der + counter, ider_len, &len2, NULL, flags); if (ris == ASN1_SUCCESS) { delete_unneeded_choice_fields(p->down); break; } else if (ris == ASN1_ERROR_TYPE_ANY) { result = ASN1_ERROR_TYPE_ANY; warn(); goto cleanup; } else { p2 = p->down; asn1_delete_structure (&p2); } } if (p->down == NULL) { if (!(p->type & CONST_OPTION)) { result = ASN1_DER_ERROR; warn(); goto cleanup; } } else if (type_field (p->type) != ASN1_ETYPE_CHOICE) p = p->down; p->start = counter; } if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT)) { p2 = _asn1_find_up (p); len2 = p2->tmp_ival; if ((len2 != -1) && (counter > len2)) ris = ASN1_TAG_ERROR; } if (ris == ASN1_SUCCESS) ris = extract_tag_der_recursive (p, der + counter, ider_len, &tag_len, &inner_tag_len, flags); if (ris != ASN1_SUCCESS) { if (p->type & CONST_OPTION) { p->type |= CONST_NOT_USED; move = RIGHT; } else if (p->type & CONST_DEFAULT) { _asn1_set_value (p, NULL, 0); move = RIGHT; } else { if (errorDescription != NULL) _asn1_error_description_tag_error (p, errorDescription); result = ASN1_TAG_ERROR; warn(); goto cleanup; } } else { DECR_LEN(ider_len, tag_len); counter += tag_len; } } if (ris == ASN1_SUCCESS) { switch (type_field (p->type)) { case ASN1_ETYPE_NULL: DECR_LEN(ider_len, 1); if (der[counter]) { result = ASN1_DER_ERROR; warn(); goto cleanup; } counter++; move = RIGHT; break; case ASN1_ETYPE_BOOLEAN: DECR_LEN(ider_len, 2); if (der[counter++] != 1) { result = ASN1_DER_ERROR; warn(); goto cleanup; } if (der[counter++] == 0) _asn1_set_value (p, "F", 1); else _asn1_set_value (p, "T", 1); move = RIGHT; break; case ASN1_ETYPE_INTEGER: case ASN1_ETYPE_ENUMERATED: len2 = asn1_get_length_der (der + counter, ider_len, &len3); if (len2 < 0) { result = ASN1_DER_ERROR; warn(); goto cleanup; } DECR_LEN(ider_len, len3+len2); _asn1_set_value (p, der + counter, len3 + len2); counter += len3 + len2; move = RIGHT; break; case ASN1_ETYPE_OBJECT_ID: result = asn1_get_object_id_der (der + counter, ider_len, &len2, temp, sizeof (temp)); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } DECR_LEN(ider_len, len2); tlen = strlen (temp); if (tlen > 0) _asn1_set_value (p, temp, tlen + 1); counter += len2; move = RIGHT; break; case ASN1_ETYPE_GENERALIZED_TIME: case ASN1_ETYPE_UTC_TIME: result = _asn1_get_time_der (type_field (p->type), der + counter, ider_len, &len2, temp, sizeof (temp) - 1, flags); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } DECR_LEN(ider_len, len2); tlen = strlen (temp); if (tlen > 0) _asn1_set_value (p, temp, tlen); counter += len2; move = RIGHT; break; case ASN1_ETYPE_OCTET_STRING: if (counter < inner_tag_len) { result = ASN1_DER_ERROR; warn(); goto cleanup; } ptag = der + counter - inner_tag_len; if ((flags & ASN1_DECODE_FLAG_STRICT_DER) || !(ptag[0] & ASN1_CLASS_STRUCTURED)) { if (ptag[0] & ASN1_CLASS_STRUCTURED) { result = ASN1_DER_ERROR; warn(); goto cleanup; } len2 = asn1_get_length_der (der + counter, ider_len, &len3); if (len2 < 0) { result = ASN1_DER_ERROR; warn(); goto cleanup; } DECR_LEN(ider_len, len3+len2); _asn1_set_value (p, der + counter, len3 + len2); counter += len3 + len2; } else { unsigned dflags = 0, vlen, ber_len; if (ptag[0] & ASN1_CLASS_STRUCTURED) dflags |= DECODE_FLAG_CONSTRUCTED; result = _asn1_decode_simple_ber(type_field (p->type), der+counter, ider_len, &ptmp, &vlen, &ber_len, dflags); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } DECR_LEN(ider_len, ber_len); _asn1_set_value_lv (p, ptmp, vlen); counter += ber_len; free(ptmp); } move = RIGHT; break; case ASN1_ETYPE_GENERALSTRING: case ASN1_ETYPE_NUMERIC_STRING: case ASN1_ETYPE_IA5_STRING: case ASN1_ETYPE_TELETEX_STRING: case ASN1_ETYPE_PRINTABLE_STRING: case ASN1_ETYPE_UNIVERSAL_STRING: case ASN1_ETYPE_BMP_STRING: case ASN1_ETYPE_UTF8_STRING: case ASN1_ETYPE_VISIBLE_STRING: case ASN1_ETYPE_BIT_STRING: len2 = asn1_get_length_der (der + counter, ider_len, &len3); if (len2 < 0) { result = ASN1_DER_ERROR; warn(); goto cleanup; } DECR_LEN(ider_len, len3+len2); _asn1_set_value (p, der + counter, len3 + len2); counter += len3 + len2; move = RIGHT; break; case ASN1_ETYPE_SEQUENCE: case ASN1_ETYPE_SET: if (move == UP) { len2 = p->tmp_ival; p->tmp_ival = 0; if (len2 == -1) { /* indefinite length method */ DECR_LEN(ider_len, 2); if ((der[counter]) || der[counter + 1]) { result = ASN1_DER_ERROR; warn(); goto cleanup; } counter += 2; } else { /* definite length method */ if (len2 != counter) { result = ASN1_DER_ERROR; warn(); goto cleanup; } } move = RIGHT; } else { /* move==DOWN || move==RIGHT */ len3 = asn1_get_length_der (der + counter, ider_len, &len2); if (IS_ERR(len3, flags)) { result = ASN1_DER_ERROR; warn(); goto cleanup; } DECR_LEN(ider_len, len2); counter += len2; if (len3 > 0) { p->tmp_ival = counter + len3; move = DOWN; } else if (len3 == 0) { p2 = p->down; while (p2) { if (type_field (p2->type) != ASN1_ETYPE_TAG) { p3 = p2->right; asn1_delete_structure (&p2); p2 = p3; } else p2 = p2->right; } move = RIGHT; } else { /* indefinite length method */ p->tmp_ival = -1; move = DOWN; } } break; case ASN1_ETYPE_SEQUENCE_OF: case ASN1_ETYPE_SET_OF: if (move == UP) { len2 = p->tmp_ival; if (len2 == -1) { /* indefinite length method */ if (!HAVE_TWO(ider_len) || ((der[counter]) || der[counter + 1])) { result = _asn1_append_sequence_set (p, &tcache); if (result != 0) { warn(); goto cleanup; } p = tcache.tail; move = RIGHT; continue; } p->tmp_ival = 0; tcache.tail = NULL; /* finished decoding this structure */ tcache.head = NULL; DECR_LEN(ider_len, 2); counter += 2; } else { /* definite length method */ if (len2 > counter) { result = _asn1_append_sequence_set (p, &tcache); if (result != 0) { warn(); goto cleanup; } p = tcache.tail; move = RIGHT; continue; } p->tmp_ival = 0; tcache.tail = NULL; /* finished decoding this structure */ tcache.head = NULL; if (len2 != counter) { result = ASN1_DER_ERROR; warn(); goto cleanup; } } } else { /* move==DOWN || move==RIGHT */ len3 = asn1_get_length_der (der + counter, ider_len, &len2); if (IS_ERR(len3, flags)) { result = ASN1_DER_ERROR; warn(); goto cleanup; } DECR_LEN(ider_len, len2); counter += len2; if (len3) { if (len3 > 0) { /* definite length method */ p->tmp_ival = counter + len3; } else { /* indefinite length method */ p->tmp_ival = -1; } p2 = p->down; if (p2 == NULL) { result = ASN1_DER_ERROR; warn(); goto cleanup; } while ((type_field (p2->type) == ASN1_ETYPE_TAG) || (type_field (p2->type) == ASN1_ETYPE_SIZE)) p2 = p2->right; if (p2->right == NULL) { result = _asn1_append_sequence_set (p, &tcache); if (result != 0) { warn(); goto cleanup; } } p = p2; } } move = RIGHT; break; case ASN1_ETYPE_ANY: /* Check indefinite lenth method in an EXPLICIT TAG */ if (!(flags & ASN1_DECODE_FLAG_STRICT_DER) && (p->type & CONST_TAG) && tag_len == 2 && (der[counter - 1] == 0x80)) indefinite = 1; else indefinite = 0; if (asn1_get_tag_der (der + counter, ider_len, &class, &len2, &tag) != ASN1_SUCCESS) { result = ASN1_DER_ERROR; warn(); goto cleanup; } DECR_LEN(ider_len, len2); len4 = asn1_get_length_der (der + counter + len2, ider_len, &len3); if (IS_ERR(len4, flags)) { result = ASN1_DER_ERROR; warn(); goto cleanup; } if (len4 != -1) /* definite */ { len2 += len4; DECR_LEN(ider_len, len4+len3); _asn1_set_value_lv (p, der + counter, len2 + len3); counter += len2 + len3; } else /* == -1 */ { /* indefinite length */ ider_len += len2; /* undo DECR_LEN */ if (counter == 0) { result = ASN1_DER_ERROR; warn(); goto cleanup; } result = _asn1_get_indefinite_length_string (der + counter, ider_len, &len2); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } DECR_LEN(ider_len, len2); _asn1_set_value_lv (p, der + counter, len2); counter += len2; } /* Check if a couple of 0x00 are present due to an EXPLICIT TAG with an indefinite length method. */ if (indefinite) { DECR_LEN(ider_len, 2); if (!der[counter] && !der[counter + 1]) { counter += 2; } else { result = ASN1_DER_ERROR; warn(); goto cleanup; } } move = RIGHT; break; default: move = (move == UP) ? RIGHT : DOWN; break; } } if (p) { p->end = counter - 1; } if (p == node && move != DOWN) break; if (move == DOWN) { if (p->down) p = p->down; else move = RIGHT; } if ((move == RIGHT) && !(p->type & CONST_SET)) { if (p->right) p = p->right; else move = UP; } if (move == UP) p = _asn1_find_up (p); } _asn1_delete_not_used (*element); if ((ider_len < 0) || (!(flags & ASN1_DECODE_FLAG_ALLOW_PADDING) && (ider_len != 0))) { warn(); result = ASN1_DER_ERROR; goto cleanup; } *max_ider_len = total_len - ider_len; return ASN1_SUCCESS; cleanup: asn1_delete_structure (element); return result; } /** * asn1_der_decoding: * @element: pointer to an ASN1 structure. * @ider: vector that contains the DER encoding. * @ider_len: number of bytes of *@ider: @ider[0]..@ider[len-1]. * @errorDescription: null-terminated string contains details when an * error occurred. * * Fill the structure *@element with values of a DER encoding * string. The structure must just be created with function * asn1_create_element(). * * Note that the *@element variable is provided as a pointer for * historical reasons. * * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND * if @ELEMENT is %NULL, and %ASN1_TAG_ERROR or * %ASN1_DER_ERROR if the der encoding doesn't match the structure * name (*@ELEMENT deleted). **/ int asn1_der_decoding (asn1_node * element, const void *ider, int ider_len, char *errorDescription) { return asn1_der_decoding2 (element, ider, &ider_len, 0, errorDescription); } /** * asn1_der_decoding_element: * @structure: pointer to an ASN1 structure * @elementName: name of the element to fill * @ider: vector that contains the DER encoding of the whole structure. * @len: number of bytes of *der: der[0]..der[len-1] * @errorDescription: null-terminated string contains details when an * error occurred. * * Fill the element named @ELEMENTNAME with values of a DER encoding * string. The structure must just be created with function * asn1_create_element(). The DER vector must contain the encoding * string of the whole @STRUCTURE. If an error occurs during the * decoding procedure, the *@STRUCTURE is deleted and set equal to * %NULL. * * This function is deprecated and may just be an alias to asn1_der_decoding * in future versions. Use asn1_der_decoding() instead. * * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND * if ELEMENT is %NULL or @elementName == NULL, and * %ASN1_TAG_ERROR or %ASN1_DER_ERROR if the der encoding doesn't * match the structure @structure (*ELEMENT deleted). **/ int asn1_der_decoding_element (asn1_node * structure, const char *elementName, const void *ider, int len, char *errorDescription) { return asn1_der_decoding(structure, ider, len, errorDescription); } /** * asn1_der_decoding_startEnd: * @element: pointer to an ASN1 element * @ider: vector that contains the DER encoding. * @ider_len: number of bytes of *@ider: @ider[0]..@ider[len-1] * @name_element: an element of NAME structure. * @start: the position of the first byte of NAME_ELEMENT decoding * (@ider[*start]) * @end: the position of the last byte of NAME_ELEMENT decoding * (@ider[*end]) * * Find the start and end point of an element in a DER encoding * string. I mean that if you have a der encoding and you have already * used the function asn1_der_decoding() to fill a structure, it may * happen that you want to find the piece of string concerning an * element of the structure. * * One example is the sequence "tbsCertificate" inside an X509 * certificate. * * Note that since libtasn1 3.7 the @ider and @ider_len parameters * can be omitted, if the element is already decoded using asn1_der_decoding(). * * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND * if ELEMENT is %asn1_node EMPTY or @name_element is not a valid * element, %ASN1_TAG_ERROR or %ASN1_DER_ERROR if the der encoding * doesn't match the structure ELEMENT. **/ int asn1_der_decoding_startEnd (asn1_node element, const void *ider, int ider_len, const char *name_element, int *start, int *end) { asn1_node node, node_to_find; int result = ASN1_DER_ERROR; node = element; if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; node_to_find = asn1_find_node (node, name_element); if (node_to_find == NULL) return ASN1_ELEMENT_NOT_FOUND; *start = node_to_find->start; *end = node_to_find->end; if (*start == 0 && *end == 0) { if (ider == NULL || ider_len == 0) return ASN1_GENERIC_ERROR; /* it seems asn1_der_decoding() wasn't called before. Do it now */ result = asn1_der_decoding (&node, ider, ider_len, NULL); if (result != ASN1_SUCCESS) { warn(); return result; } node_to_find = asn1_find_node (node, name_element); if (node_to_find == NULL) return ASN1_ELEMENT_NOT_FOUND; *start = node_to_find->start; *end = node_to_find->end; } if (*end < *start) return ASN1_GENERIC_ERROR; return ASN1_SUCCESS; } /** * asn1_expand_any_defined_by: * @definitions: ASN1 definitions * @element: pointer to an ASN1 structure * * Expands every "ANY DEFINED BY" element of a structure created from * a DER decoding process (asn1_der_decoding function). The element * ANY must be defined by an OBJECT IDENTIFIER. The type used to * expand the element ANY is the first one following the definition of * the actual value of the OBJECT IDENTIFIER. * * Returns: %ASN1_SUCCESS if Substitution OK, %ASN1_ERROR_TYPE_ANY if * some "ANY DEFINED BY" element couldn't be expanded due to a * problem in OBJECT_ID -> TYPE association, or other error codes * depending on DER decoding. **/ int asn1_expand_any_defined_by (asn1_node_const definitions, asn1_node * element) { char name[2 * ASN1_MAX_NAME_SIZE + 2], value[ASN1_MAX_NAME_SIZE]; int retCode = ASN1_SUCCESS, result; int len, len2, len3; asn1_node_const p2; asn1_node p, p3, aux = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; const char *definitionsName; if ((definitions == NULL) || (*element == NULL)) return ASN1_ELEMENT_NOT_FOUND; definitionsName = definitions->name; p = *element; while (p) { switch (type_field (p->type)) { case ASN1_ETYPE_ANY: if ((p->type & CONST_DEFINED_BY) && (p->value)) { /* search the "DEF_BY" element */ p2 = p->down; while ((p2) && (type_field (p2->type) != ASN1_ETYPE_CONSTANT)) p2 = p2->right; if (!p2) { retCode = ASN1_ERROR_TYPE_ANY; break; } p3 = _asn1_find_up (p); if (!p3) { retCode = ASN1_ERROR_TYPE_ANY; break; } p3 = p3->down; while (p3) { if (!(strcmp (p3->name, p2->name))) break; p3 = p3->right; } if ((!p3) || (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID) || (p3->value == NULL)) { p3 = _asn1_find_up (p); p3 = _asn1_find_up (p3); if (!p3) { retCode = ASN1_ERROR_TYPE_ANY; break; } p3 = p3->down; while (p3) { if (!(strcmp (p3->name, p2->name))) break; p3 = p3->right; } if ((!p3) || (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID) || (p3->value == NULL)) { retCode = ASN1_ERROR_TYPE_ANY; break; } } /* search the OBJECT_ID into definitions */ p2 = definitions->down; while (p2) { if ((type_field (p2->type) == ASN1_ETYPE_OBJECT_ID) && (p2->type & CONST_ASSIGN)) { snprintf(name, sizeof(name), "%s.%s", definitionsName, p2->name); len = ASN1_MAX_NAME_SIZE; result = asn1_read_value (definitions, name, value, &len); if ((result == ASN1_SUCCESS) && (!_asn1_strcmp (p3->value, value))) { p2 = p2->right; /* pointer to the structure to use for expansion */ while ((p2) && (p2->type & CONST_ASSIGN)) p2 = p2->right; if (p2) { snprintf(name, sizeof(name), "%s.%s", definitionsName, p2->name); result = asn1_create_element (definitions, name, &aux); if (result == ASN1_SUCCESS) { _asn1_cpy_name (aux, p); len2 = asn1_get_length_der (p->value, p->value_len, &len3); if (len2 < 0) return ASN1_DER_ERROR; result = asn1_der_decoding (&aux, p->value + len3, len2, errorDescription); if (result == ASN1_SUCCESS) { _asn1_set_right (aux, p->right); _asn1_set_right (p, aux); result = asn1_delete_structure (&p); if (result == ASN1_SUCCESS) { p = aux; aux = NULL; break; } else { /* error with asn1_delete_structure */ asn1_delete_structure (&aux); retCode = result; break; } } else { /* error with asn1_der_decoding */ retCode = result; break; } } else { /* error with asn1_create_element */ retCode = result; break; } } else { /* error with the pointer to the structure to exapand */ retCode = ASN1_ERROR_TYPE_ANY; break; } } } p2 = p2->right; } /* end while */ if (!p2) { retCode = ASN1_ERROR_TYPE_ANY; break; } } break; default: break; } if (p->down) { p = p->down; } else if (p == *element) { p = NULL; break; } else if (p->right) p = p->right; else { while (1) { p = _asn1_find_up (p); if (p == *element) { p = NULL; break; } if (p->right) { p = p->right; break; } } } } return retCode; } /** * asn1_expand_octet_string: * @definitions: ASN1 definitions * @element: pointer to an ASN1 structure * @octetName: name of the OCTECT STRING field to expand. * @objectName: name of the OBJECT IDENTIFIER field to use to define * the type for expansion. * * Expands an "OCTET STRING" element of a structure created from a DER * decoding process (the asn1_der_decoding() function). The type used * for expansion is the first one following the definition of the * actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. * * Returns: %ASN1_SUCCESS if substitution OK, %ASN1_ELEMENT_NOT_FOUND * if @objectName or @octetName are not correct, * %ASN1_VALUE_NOT_VALID if it wasn't possible to find the type to * use for expansion, or other errors depending on DER decoding. **/ int asn1_expand_octet_string (asn1_node_const definitions, asn1_node * element, const char *octetName, const char *objectName) { char name[2 * ASN1_MAX_NAME_SIZE + 1], value[ASN1_MAX_NAME_SIZE]; int retCode = ASN1_SUCCESS, result; int len, len2, len3; asn1_node_const p2; asn1_node aux = NULL; asn1_node octetNode = NULL, objectNode = NULL; char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; if ((definitions == NULL) || (*element == NULL)) return ASN1_ELEMENT_NOT_FOUND; octetNode = asn1_find_node (*element, octetName); if (octetNode == NULL) return ASN1_ELEMENT_NOT_FOUND; if (type_field (octetNode->type) != ASN1_ETYPE_OCTET_STRING) return ASN1_ELEMENT_NOT_FOUND; if (octetNode->value == NULL) return ASN1_VALUE_NOT_FOUND; objectNode = asn1_find_node (*element, objectName); if (objectNode == NULL) return ASN1_ELEMENT_NOT_FOUND; if (type_field (objectNode->type) != ASN1_ETYPE_OBJECT_ID) return ASN1_ELEMENT_NOT_FOUND; if (objectNode->value == NULL) return ASN1_VALUE_NOT_FOUND; /* search the OBJECT_ID into definitions */ p2 = definitions->down; while (p2) { if ((type_field (p2->type) == ASN1_ETYPE_OBJECT_ID) && (p2->type & CONST_ASSIGN)) { strcpy (name, definitions->name); strcat (name, "."); strcat (name, p2->name); len = sizeof (value); result = asn1_read_value (definitions, name, value, &len); if ((result == ASN1_SUCCESS) && (!_asn1_strcmp (objectNode->value, value))) { p2 = p2->right; /* pointer to the structure to use for expansion */ while ((p2) && (p2->type & CONST_ASSIGN)) p2 = p2->right; if (p2) { strcpy (name, definitions->name); strcat (name, "."); strcat (name, p2->name); result = asn1_create_element (definitions, name, &aux); if (result == ASN1_SUCCESS) { _asn1_cpy_name (aux, octetNode); len2 = asn1_get_length_der (octetNode->value, octetNode->value_len, &len3); if (len2 < 0) return ASN1_DER_ERROR; result = asn1_der_decoding (&aux, octetNode->value + len3, len2, errorDescription); if (result == ASN1_SUCCESS) { _asn1_set_right (aux, octetNode->right); _asn1_set_right (octetNode, aux); result = asn1_delete_structure (&octetNode); if (result == ASN1_SUCCESS) { aux = NULL; break; } else { /* error with asn1_delete_structure */ asn1_delete_structure (&aux); retCode = result; break; } } else { /* error with asn1_der_decoding */ retCode = result; break; } } else { /* error with asn1_create_element */ retCode = result; break; } } else { /* error with the pointer to the structure to exapand */ retCode = ASN1_VALUE_NOT_VALID; break; } } } p2 = p2->right; } if (!p2) retCode = ASN1_VALUE_NOT_VALID; return retCode; } /*- * _asn1_decode_simple_der: * @etype: The type of the string to be encoded (ASN1_ETYPE_) * @der: the encoded string * @_der_len: the bytes of the encoded string * @str: a pointer to the data * @str_len: the length of the data * @dflags: DECODE_FLAG_* * * Decodes a simple DER encoded type (e.g. a string, which is not constructed). * The output is a pointer inside the @der. * * Returns: %ASN1_SUCCESS if successful or an error value. -*/ static int _asn1_decode_simple_der (unsigned int etype, const unsigned char *der, unsigned int _der_len, const unsigned char **str, unsigned int *str_len, unsigned dflags) { int tag_len, len_len; const unsigned char *p; int der_len = _der_len; unsigned char class; unsigned long tag; long ret; if (der == NULL || der_len == 0) return ASN1_VALUE_NOT_VALID; if (ETYPE_OK (etype) == 0 || ETYPE_IS_STRING(etype) == 0) return ASN1_VALUE_NOT_VALID; /* doesn't handle constructed classes */ class = ETYPE_CLASS(etype); if (class != ASN1_CLASS_UNIVERSAL) return ASN1_VALUE_NOT_VALID; p = der; if (dflags & DECODE_FLAG_HAVE_TAG) { ret = asn1_get_tag_der (p, der_len, &class, &tag_len, &tag); if (ret != ASN1_SUCCESS) return ret; if (class != ETYPE_CLASS (etype) || tag != ETYPE_TAG (etype)) { warn(); return ASN1_DER_ERROR; } p += tag_len; der_len -= tag_len; if (der_len <= 0) return ASN1_DER_ERROR; } ret = asn1_get_length_der (p, der_len, &len_len); if (ret < 0) return ASN1_DER_ERROR; p += len_len; der_len -= len_len; if (der_len <= 0) return ASN1_DER_ERROR; *str_len = ret; *str = p; return ASN1_SUCCESS; } /** * asn1_decode_simple_der: * @etype: The type of the string to be encoded (ASN1_ETYPE_) * @der: the encoded string * @_der_len: the bytes of the encoded string * @str: a pointer to the data * @str_len: the length of the data * * Decodes a simple DER encoded type (e.g. a string, which is not constructed). * The output is a pointer inside the @der. * * Returns: %ASN1_SUCCESS if successful or an error value. **/ int asn1_decode_simple_der (unsigned int etype, const unsigned char *der, unsigned int _der_len, const unsigned char **str, unsigned int *str_len) { return _asn1_decode_simple_der(etype, der, _der_len, str, str_len, DECODE_FLAG_HAVE_TAG); } static int append(uint8_t **dst, unsigned *dst_size, const unsigned char *src, unsigned src_size) { if (src_size == 0) return ASN1_SUCCESS; *dst = _asn1_realloc(*dst, *dst_size+src_size); if (*dst == NULL) return ASN1_MEM_ALLOC_ERROR; memcpy(*dst + *dst_size, src, src_size); *dst_size += src_size; return ASN1_SUCCESS; } /*- * _asn1_decode_simple_ber: * @etype: The type of the string to be encoded (ASN1_ETYPE_) * @der: the encoded string * @_der_len: the bytes of the encoded string * @str: a pointer to the data * @str_len: the length of the data * @ber_len: the total length occupied by BER (may be %NULL) * @have_tag: whether a DER tag is included * * Decodes a BER encoded type. The output is an allocated value * of the data. This decodes BER STRINGS only. Other types are * decoded as DER. * * Returns: %ASN1_SUCCESS if successful or an error value. -*/ static int _asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, unsigned int _der_len, unsigned char **str, unsigned int *str_len, unsigned int *ber_len, unsigned dflags) { int tag_len, len_len; const unsigned char *p; int der_len = _der_len; uint8_t *total = NULL; unsigned total_size = 0; unsigned char class; unsigned long tag; unsigned char *out = NULL; const unsigned char *cout = NULL; unsigned out_len; long result; if (ber_len) *ber_len = 0; if (der == NULL || der_len == 0) { warn(); return ASN1_VALUE_NOT_VALID; } if (ETYPE_OK (etype) == 0) { warn(); return ASN1_VALUE_NOT_VALID; } /* doesn't handle constructed + definite classes */ class = ETYPE_CLASS (etype); if (class != ASN1_CLASS_UNIVERSAL) { warn(); return ASN1_VALUE_NOT_VALID; } p = der; if (dflags & DECODE_FLAG_HAVE_TAG) { result = asn1_get_tag_der (p, der_len, &class, &tag_len, &tag); if (result != ASN1_SUCCESS) { warn(); return result; } if (tag != ETYPE_TAG (etype)) { warn(); return ASN1_DER_ERROR; } p += tag_len; DECR_LEN(der_len, tag_len); if (ber_len) *ber_len += tag_len; } /* indefinite constructed */ if ((((dflags & DECODE_FLAG_CONSTRUCTED) || class == ASN1_CLASS_STRUCTURED) && ETYPE_IS_STRING(etype)) && !(dflags & DECODE_FLAG_LEVEL3)) { if (der_len == 0) { warn(); result = ASN1_DER_ERROR; goto cleanup; } if (der_len > 0 && p[0] == 0x80) /* indefinite */ { len_len = 1; DECR_LEN(der_len, len_len); p += len_len; if (ber_len) *ber_len += len_len; /* decode the available octet strings */ do { unsigned tmp_len; unsigned flags = DECODE_FLAG_HAVE_TAG; if (dflags & DECODE_FLAG_LEVEL1) flags |= DECODE_FLAG_LEVEL2; else if (dflags & DECODE_FLAG_LEVEL2) flags |= DECODE_FLAG_LEVEL3; else flags |= DECODE_FLAG_LEVEL1; result = _asn1_decode_simple_ber(etype, p, der_len, &out, &out_len, &tmp_len, flags); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } p += tmp_len; DECR_LEN(der_len, tmp_len); if (ber_len) *ber_len += tmp_len; DECR_LEN(der_len, 2); /* we need the EOC */ result = append(&total, &total_size, out, out_len); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } free(out); out = NULL; if (p[0] == 0 && p[1] == 0) /* EOC */ { if (ber_len) *ber_len += 2; break; } /* no EOC */ der_len += 2; if (der_len == 2) { warn(); result = ASN1_DER_ERROR; goto cleanup; } } while(1); } else /* constructed */ { long const_len; result = asn1_get_length_ber(p, der_len, &len_len); if (result < 0) { warn(); result = ASN1_DER_ERROR; goto cleanup; } DECR_LEN(der_len, len_len); p += len_len; const_len = result; if (ber_len) *ber_len += len_len; /* decode the available octet strings */ while(const_len > 0) { unsigned tmp_len; unsigned flags = DECODE_FLAG_HAVE_TAG; if (dflags & DECODE_FLAG_LEVEL1) flags |= DECODE_FLAG_LEVEL2; else if (dflags & DECODE_FLAG_LEVEL2) flags |= DECODE_FLAG_LEVEL3; else flags |= DECODE_FLAG_LEVEL1; result = _asn1_decode_simple_ber(etype, p, der_len, &out, &out_len, &tmp_len, flags); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } p += tmp_len; DECR_LEN(der_len, tmp_len); DECR_LEN(const_len, tmp_len); if (ber_len) *ber_len += tmp_len; result = append(&total, &total_size, out, out_len); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } free(out); out = NULL; } } } else if (class == ETYPE_CLASS(etype)) { if (ber_len) { result = asn1_get_length_der (p, der_len, &len_len); if (result < 0) { warn(); result = ASN1_DER_ERROR; goto cleanup; } *ber_len += result + len_len; } /* non-string values are decoded as DER */ result = _asn1_decode_simple_der(etype, der, _der_len, &cout, &out_len, dflags); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } result = append(&total, &total_size, cout, out_len); if (result != ASN1_SUCCESS) { warn(); goto cleanup; } } else { warn(); result = ASN1_DER_ERROR; goto cleanup; } *str = total; *str_len = total_size; return ASN1_SUCCESS; cleanup: free(out); free(total); return result; } /** * asn1_decode_simple_ber: * @etype: The type of the string to be encoded (ASN1_ETYPE_) * @der: the encoded string * @_der_len: the bytes of the encoded string * @str: a pointer to the data * @str_len: the length of the data * @ber_len: the total length occupied by BER (may be %NULL) * * Decodes a BER encoded type. The output is an allocated value * of the data. This decodes BER STRINGS only. Other types are * decoded as DER. * * Returns: %ASN1_SUCCESS if successful or an error value. **/ int asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, unsigned int _der_len, unsigned char **str, unsigned int *str_len, unsigned int *ber_len) { return _asn1_decode_simple_ber(etype, der, _der_len, str, str_len, ber_len, DECODE_FLAG_HAVE_TAG); } libtasn1-4.16.0/lib/Makefile.am0000644000000000000000000000333313603741122013011 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . SUBDIRS = gl AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAG_VISIBILITY) $(CODE_COVERAGE_CFLAGS) AM_CPPFLAGS = -I$(builddir)/gl -I$(srcdir)/gl -I$(builddir)/includes -I$(srcdir)/includes\ -DASN1_BUILDING $(CODE_COVERAGE_CPPFLAGS) AM_YFLAGS = -Wno-yacc include_HEADERS = includes/libtasn1.h pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libtasn1.pc lib_LTLIBRARIES = libtasn1.la libtasn1_la_SOURCES = \ ASN1.y \ coding.c \ decoding.c \ element.c \ element.h \ errors.c \ gstr.c \ gstr.h \ int.h \ includes/libtasn1.h \ libtasn1.map \ parser_aux.c \ parser_aux.h \ structure.c \ structure.h \ version.c libtasn1_la_LIBADD = gl/libgnu.la libtasn1_la_LDFLAGS = \ -no-undefined \ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ $(CODE_COVERAGE_LDFLAGS) if HAVE_LD_VERSION_SCRIPT libtasn1_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libtasn1.map else libtasn1_la_LDFLAGS += -export-symbols-regex '^(asn1|libtasn1_).*' endif libtasn1-4.16.0/lib/version.c0000644000000000000000000000322213246341643012612 00000000000000/* * Copyright (C) 2000-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ #ifdef HAVE_CONFIG_H #include #endif #include /* for strverscmp */ #include "libtasn1.h" /** * asn1_check_version: * @req_version: Required version number, or %NULL. * * Check that the version of the library is at minimum the * requested one and return the version string; return %NULL if the * condition is not satisfied. If a %NULL is passed to this function, * no check is done, but the version string is simply returned. * * See %ASN1_VERSION for a suitable @req_version string. * * Returns: Version string of run-time library, or %NULL if the * run-time library does not meet the required version number. */ const char * asn1_check_version (const char *req_version) { if (!req_version || strverscmp (req_version, ASN1_VERSION) <= 0) return ASN1_VERSION; return NULL; } libtasn1-4.16.0/lib/coding.c0000644000000000000000000011060613615375014012374 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ /*****************************************************/ /* File: coding.c */ /* Description: Functions to create a DER coding of */ /* an ASN1 type. */ /*****************************************************/ #include #include "parser_aux.h" #include #include "element.h" #include "minmax.h" #include #define MAX_TAG_LEN 16 /******************************************************/ /* Function : _asn1_error_description_value_not_found */ /* Description: creates the ErrorDescription string */ /* for the ASN1_VALUE_NOT_FOUND error. */ /* Parameters: */ /* node: node of the tree where the value is NULL. */ /* ErrorDescription: string returned. */ /* Return: */ /******************************************************/ static void _asn1_error_description_value_not_found (asn1_node node, char *ErrorDescription) { if (ErrorDescription == NULL) return; Estrcpy (ErrorDescription, ":: value of element '"); _asn1_hierarchical_name (node, ErrorDescription + strlen (ErrorDescription), ASN1_MAX_ERROR_DESCRIPTION_SIZE - 40); Estrcat (ErrorDescription, "' not found"); } /** * asn1_length_der: * @len: value to convert. * @der: buffer to hold the returned encoding (may be %NULL). * @der_len: number of meaningful bytes of ANS (der[0]..der[der_len-1]). * * Creates the DER encoding of the provided length value. * The @der buffer must have enough room for the output. The maximum * length this function will encode is %ASN1_MAX_LENGTH_SIZE. * * To know the size of the DER encoding use a %NULL value for @der. **/ void asn1_length_der (unsigned long int len, unsigned char *der, int *der_len) { int k; unsigned char temp[ASN1_MAX_LENGTH_SIZE]; #if SIZEOF_UNSIGNED_LONG_INT > 8 len &= 0xFFFFFFFFFFFFFFFF; #endif if (len < 128) { /* short form */ if (der != NULL) der[0] = (unsigned char) len; *der_len = 1; } else { /* Long form */ k = 0; while (len) { temp[k++] = len & 0xFF; len = len >> 8; } *der_len = k + 1; if (der != NULL) { der[0] = ((unsigned char) k & 0x7F) + 128; while (k--) der[*der_len - 1 - k] = temp[k]; } } } /******************************************************/ /* Function : _asn1_tag_der */ /* Description: creates the DER coding for the CLASS */ /* and TAG parameters. */ /* It is limited by the ASN1_MAX_TAG_SIZE variable */ /* Parameters: */ /* class: value to convert. */ /* tag_value: value to convert. */ /* ans: string returned. */ /* ans_len: number of meaningful bytes of ANS */ /* (ans[0]..ans[ans_len-1]). */ /* Return: */ /******************************************************/ static void _asn1_tag_der (unsigned char class, unsigned int tag_value, unsigned char ans[ASN1_MAX_TAG_SIZE], int *ans_len) { int k; unsigned char temp[ASN1_MAX_TAG_SIZE]; if (tag_value < 31) { /* short form */ ans[0] = (class & 0xE0) + ((unsigned char) (tag_value & 0x1F)); *ans_len = 1; } else { /* Long form */ ans[0] = (class & 0xE0) + 31; k = 0; while (tag_value != 0) { temp[k++] = tag_value & 0x7F; tag_value >>= 7; if (k > ASN1_MAX_TAG_SIZE - 1) break; /* will not encode larger tags */ } *ans_len = k + 1; while (k--) ans[*ans_len - 1 - k] = temp[k] + 128; ans[*ans_len - 1] -= 128; } } /** * asn1_octet_der: * @str: the input data. * @str_len: STR length (str[0]..str[*str_len-1]). * @der: encoded string returned. * @der_len: number of meaningful bytes of DER (der[0]..der[der_len-1]). * * Creates a length-value DER encoding for the input data. * The DER encoding of the input data will be placed in the @der variable. * * Note that the OCTET STRING tag is not included in the output. * * This function does not return any value because it is expected * that @der_len will contain enough bytes to store the string * plus the DER encoding. The DER encoding size can be obtained using * asn1_length_der(). **/ void asn1_octet_der (const unsigned char *str, int str_len, unsigned char *der, int *der_len) { int len_len; if (der == NULL || str_len < 0) return; asn1_length_der (str_len, der, &len_len); memcpy (der + len_len, str, str_len); *der_len = str_len + len_len; } /** * asn1_encode_simple_der: * @etype: The type of the string to be encoded (ASN1_ETYPE_) * @str: the string data. * @str_len: the string length * @tl: the encoded tag and length * @tl_len: the bytes of the @tl field * * Creates the DER encoding for various simple ASN.1 types like strings etc. * It stores the tag and length in @tl, which should have space for at least * %ASN1_MAX_TL_SIZE bytes. Initially @tl_len should contain the size of @tl. * * The complete DER encoding should consist of the value in @tl appended * with the provided @str. * * Returns: %ASN1_SUCCESS if successful or an error value. **/ int asn1_encode_simple_der (unsigned int etype, const unsigned char *str, unsigned int str_len, unsigned char *tl, unsigned int *tl_len) { int tag_len, len_len; unsigned tlen; unsigned char der_tag[ASN1_MAX_TAG_SIZE]; unsigned char der_length[ASN1_MAX_LENGTH_SIZE]; unsigned char *p; if (str == NULL) return ASN1_VALUE_NOT_VALID; if (ETYPE_OK (etype) == 0) return ASN1_VALUE_NOT_VALID; /* doesn't handle constructed classes */ if (ETYPE_CLASS (etype) != ASN1_CLASS_UNIVERSAL) return ASN1_VALUE_NOT_VALID; _asn1_tag_der (ETYPE_CLASS (etype), ETYPE_TAG (etype), der_tag, &tag_len); asn1_length_der (str_len, der_length, &len_len); if (tag_len <= 0 || len_len <= 0) return ASN1_VALUE_NOT_VALID; tlen = tag_len + len_len; if (*tl_len < tlen) return ASN1_MEM_ERROR; p = tl; memcpy (p, der_tag, tag_len); p += tag_len; memcpy (p, der_length, len_len); *tl_len = tlen; return ASN1_SUCCESS; } /******************************************************/ /* Function : _asn1_time_der */ /* Description: creates the DER coding for a TIME */ /* type (length included). */ /* Parameters: */ /* str: TIME null-terminated string. */ /* der: string returned. */ /* der_len: number of meaningful bytes of DER */ /* (der[0]..der[ans_len-1]). Initially it */ /* if must store the lenght of DER. */ /* Return: */ /* ASN1_MEM_ERROR when DER isn't big enough */ /* ASN1_SUCCESS otherwise */ /******************************************************/ static int _asn1_time_der (unsigned char *str, int str_len, unsigned char *der, int *der_len) { int len_len; int max_len; if (der == NULL) return ASN1_VALUE_NOT_VALID; max_len = *der_len; asn1_length_der (str_len, (max_len > 0) ? der : NULL, &len_len); if ((len_len + str_len) <= max_len) memcpy (der + len_len, str, str_len); *der_len = len_len + str_len; if ((*der_len) > max_len) return ASN1_MEM_ERROR; return ASN1_SUCCESS; } /* void _asn1_get_utctime_der(unsigned char *der,int *der_len,unsigned char *str) { int len_len,str_len; char temp[20]; if(str==NULL) return; str_len=asn1_get_length_der(der,*der_len,&len_len); if (str_len<0) return; memcpy(temp,der+len_len,str_len); *der_len=str_len+len_len; switch(str_len) { case 11: temp[10]=0; strcat(temp,"00+0000"); break; case 13: temp[12]=0; strcat(temp,"+0000"); break; case 15: temp[15]=0; memmove(temp+12,temp+10,6); temp[10]=temp[11]='0'; break; case 17: temp[17]=0; break; default: return; } strcpy(str,temp); } */ static void encode_val(uint64_t val, unsigned char *der, int max_len, int *der_len) { int first, k; unsigned char bit7; first = 0; for (k = sizeof(val); k >= 0; k--) { bit7 = (val >> (k * 7)) & 0x7F; if (bit7 || first || !k) { if (k) bit7 |= 0x80; if (max_len > (*der_len)) der[*der_len] = bit7; (*der_len)++; first = 1; } } } /******************************************************/ /* Function : _asn1_object_id_der */ /* Description: creates the DER coding for an */ /* OBJECT IDENTIFIER type (length included). */ /* Parameters: */ /* str: OBJECT IDENTIFIER null-terminated string. */ /* der: string returned. */ /* der_len: number of meaningful bytes of DER */ /* (der[0]..der[ans_len-1]). Initially it */ /* must store the length of DER. */ /* Return: */ /* ASN1_MEM_ERROR when DER isn't big enough */ /* ASN1_SUCCESS if succesful */ /* or an error value. */ /******************************************************/ static int _asn1_object_id_der (const char *str, unsigned char *der, int *der_len) { int len_len, counter, max_len; char *temp, *n_end, *n_start; uint64_t val, val1 = 0; int str_len = _asn1_strlen (str); max_len = *der_len; *der_len = 0; if (der == NULL && max_len > 0) return ASN1_VALUE_NOT_VALID; temp = malloc (str_len + 2); if (temp == NULL) return ASN1_MEM_ALLOC_ERROR; memcpy (temp, str, str_len); temp[str_len] = '.'; temp[str_len + 1] = 0; counter = 0; n_start = temp; while ((n_end = strchr (n_start, '.'))) { *n_end = 0; val = _asn1_strtou64 (n_start, NULL, 10); counter++; if (counter == 1) { val1 = val; } else if (counter == 2) { uint64_t val0; if (val1 > 2) { free(temp); return ASN1_VALUE_NOT_VALID; } else if ((val1 == 0 || val1 == 1) && val > 39) { free(temp); return ASN1_VALUE_NOT_VALID; } val0 = 40 * val1 + val; encode_val(val0, der, max_len, der_len); } else { encode_val(val, der, max_len, der_len); } n_start = n_end + 1; } asn1_length_der (*der_len, NULL, &len_len); if (max_len >= (*der_len + len_len)) { memmove (der + len_len, der, *der_len); asn1_length_der (*der_len, der, &len_len); } *der_len += len_len; free (temp); if (max_len < (*der_len)) return ASN1_MEM_ERROR; return ASN1_SUCCESS; } /** * asn1_object_id_der: * @str: An object identifier in numeric, dot format. * @der: buffer to hold the returned encoding (may be %NULL). * @der_len: initially the size of @der; will hold the final size. * @flags: must be zero * * Creates the DER encoding of the provided object identifier. * * Returns: %ASN1_SUCCESS if DER encoding was OK, %ASN1_VALUE_NOT_VALID * if @str is not a valid OID, %ASN1_MEM_ERROR if the @der * vector isn't big enough and in this case @der_len will contain the * length needed. **/ int asn1_object_id_der(const char *str, unsigned char *der, int *der_len, unsigned flags) { unsigned char tag_der[MAX_TAG_LEN]; int tag_len = 0, r; int max_len = *der_len; *der_len = 0; _asn1_tag_der (ETYPE_CLASS (ASN1_ETYPE_OBJECT_ID), ETYPE_TAG (ASN1_ETYPE_OBJECT_ID), tag_der, &tag_len); if (max_len > tag_len) { memcpy(der, tag_der, tag_len); } max_len -= tag_len; der += tag_len; r = _asn1_object_id_der (str, der, &max_len); if (r == ASN1_MEM_ERROR || r == ASN1_SUCCESS) { *der_len = max_len + tag_len; } return r; } static const unsigned char bit_mask[] = { 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80 }; /** * asn1_bit_der: * @str: BIT string. * @bit_len: number of meaningful bits in STR. * @der: string returned. * @der_len: number of meaningful bytes of DER * (der[0]..der[ans_len-1]). * * Creates a length-value DER encoding for the input data * as it would have been for a BIT STRING. * The DER encoded data will be copied in @der. * * Note that the BIT STRING tag is not included in the output. * * This function does not return any value because it is expected * that @der_len will contain enough bytes to store the string * plus the DER encoding. The DER encoding size can be obtained using * asn1_length_der(). **/ void asn1_bit_der (const unsigned char *str, int bit_len, unsigned char *der, int *der_len) { int len_len, len_byte, len_pad; if (der == NULL) return; len_byte = bit_len >> 3; len_pad = 8 - (bit_len & 7); if (len_pad == 8) len_pad = 0; else len_byte++; asn1_length_der (len_byte + 1, der, &len_len); der[len_len] = len_pad; if (str) memcpy (der + len_len + 1, str, len_byte); der[len_len + len_byte] &= bit_mask[len_pad]; *der_len = len_byte + len_len + 1; } /******************************************************/ /* Function : _asn1_complete_explicit_tag */ /* Description: add the length coding to the EXPLICIT */ /* tags. */ /* Parameters: */ /* node: pointer to the tree element. */ /* der: string with the DER coding of the whole tree*/ /* counter: number of meaningful bytes of DER */ /* (der[0]..der[*counter-1]). */ /* max_len: size of der vector */ /* Return: */ /* ASN1_MEM_ERROR if der vector isn't big enough, */ /* otherwise ASN1_SUCCESS. */ /******************************************************/ static int _asn1_complete_explicit_tag (asn1_node node, unsigned char *der, int *counter, int *max_len) { asn1_node p; int is_tag_implicit, len2, len3; unsigned char temp[SIZEOF_UNSIGNED_INT]; if (der == NULL && *max_len > 0) return ASN1_VALUE_NOT_VALID; is_tag_implicit = 0; if (node->type & CONST_TAG) { p = node->down; if (p == NULL) return ASN1_DER_ERROR; /* When there are nested tags we must complete them reverse to the order they were created. This is because completing a tag modifies all data within it, including the incomplete tags which store buffer positions -- simon@josefsson.org 2002-09-06 */ while (p->right) p = p->right; while (p && p != node->down->left) { if (type_field (p->type) == ASN1_ETYPE_TAG) { if (p->type & CONST_EXPLICIT) { len2 = strtol (p->name, NULL, 10); _asn1_set_name (p, NULL); asn1_length_der (*counter - len2, temp, &len3); if (len3 <= (*max_len)) { memmove (der + len2 + len3, der + len2, *counter - len2); memcpy (der + len2, temp, len3); } *max_len -= len3; *counter += len3; is_tag_implicit = 0; } else { /* CONST_IMPLICIT */ if (!is_tag_implicit) { is_tag_implicit = 1; } } } p = p->left; } } if (*max_len < 0) return ASN1_MEM_ERROR; return ASN1_SUCCESS; } const tag_and_class_st _asn1_tags[] = { [ASN1_ETYPE_GENERALSTRING] = {ASN1_TAG_GENERALSTRING, ASN1_CLASS_UNIVERSAL, "type:GENERALSTRING"}, [ASN1_ETYPE_NUMERIC_STRING] = {ASN1_TAG_NUMERIC_STRING, ASN1_CLASS_UNIVERSAL, "type:NUMERIC_STR"}, [ASN1_ETYPE_IA5_STRING] = {ASN1_TAG_IA5_STRING, ASN1_CLASS_UNIVERSAL, "type:IA5_STR"}, [ASN1_ETYPE_TELETEX_STRING] = {ASN1_TAG_TELETEX_STRING, ASN1_CLASS_UNIVERSAL, "type:TELETEX_STR"}, [ASN1_ETYPE_PRINTABLE_STRING] = {ASN1_TAG_PRINTABLE_STRING, ASN1_CLASS_UNIVERSAL, "type:PRINTABLE_STR"}, [ASN1_ETYPE_UNIVERSAL_STRING] = {ASN1_TAG_UNIVERSAL_STRING, ASN1_CLASS_UNIVERSAL, "type:UNIVERSAL_STR"}, [ASN1_ETYPE_BMP_STRING] = {ASN1_TAG_BMP_STRING, ASN1_CLASS_UNIVERSAL, "type:BMP_STR"}, [ASN1_ETYPE_UTF8_STRING] = {ASN1_TAG_UTF8_STRING, ASN1_CLASS_UNIVERSAL, "type:UTF8_STR"}, [ASN1_ETYPE_VISIBLE_STRING] = {ASN1_TAG_VISIBLE_STRING, ASN1_CLASS_UNIVERSAL, "type:VISIBLE_STR"}, [ASN1_ETYPE_OCTET_STRING] = {ASN1_TAG_OCTET_STRING, ASN1_CLASS_UNIVERSAL, "type:OCT_STR"}, [ASN1_ETYPE_BIT_STRING] = {ASN1_TAG_BIT_STRING, ASN1_CLASS_UNIVERSAL, "type:BIT_STR"}, [ASN1_ETYPE_OBJECT_ID] = {ASN1_TAG_OBJECT_ID, ASN1_CLASS_UNIVERSAL, "type:OBJ_ID"}, [ASN1_ETYPE_NULL] = {ASN1_TAG_NULL, ASN1_CLASS_UNIVERSAL, "type:NULL"}, [ASN1_ETYPE_BOOLEAN] = {ASN1_TAG_BOOLEAN, ASN1_CLASS_UNIVERSAL, "type:BOOLEAN"}, [ASN1_ETYPE_INTEGER] = {ASN1_TAG_INTEGER, ASN1_CLASS_UNIVERSAL, "type:INTEGER"}, [ASN1_ETYPE_ENUMERATED] = {ASN1_TAG_ENUMERATED, ASN1_CLASS_UNIVERSAL, "type:ENUMERATED"}, [ASN1_ETYPE_SEQUENCE] = {ASN1_TAG_SEQUENCE, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, "type:SEQUENCE"}, [ASN1_ETYPE_SEQUENCE_OF] = {ASN1_TAG_SEQUENCE, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, "type:SEQ_OF"}, [ASN1_ETYPE_SET] = {ASN1_TAG_SET, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, "type:SET"}, [ASN1_ETYPE_SET_OF] = {ASN1_TAG_SET, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, "type:SET_OF"}, [ASN1_ETYPE_GENERALIZED_TIME] = {ASN1_TAG_GENERALIZEDTime, ASN1_CLASS_UNIVERSAL, "type:GENERALIZED_TIME"}, [ASN1_ETYPE_UTC_TIME] = {ASN1_TAG_UTCTime, ASN1_CLASS_UNIVERSAL, "type:UTC_TIME"}, }; unsigned int _asn1_tags_size = sizeof (_asn1_tags) / sizeof (_asn1_tags[0]); /******************************************************/ /* Function : _asn1_insert_tag_der */ /* Description: creates the DER coding of tags of one */ /* NODE. */ /* Parameters: */ /* node: pointer to the tree element. */ /* der: string returned */ /* counter: number of meaningful bytes of DER */ /* (counter[0]..der[*counter-1]). */ /* max_len: size of der vector */ /* Return: */ /* ASN1_GENERIC_ERROR if the type is unknown, */ /* ASN1_MEM_ERROR if der vector isn't big enough, */ /* otherwise ASN1_SUCCESS. */ /******************************************************/ static int _asn1_insert_tag_der (asn1_node node, unsigned char *der, int *counter, int *max_len) { asn1_node p; int tag_len, is_tag_implicit; unsigned char class, class_implicit = 0, temp[MAX(SIZEOF_UNSIGNED_INT * 3 + 1, LTOSTR_MAX_SIZE)]; unsigned long tag_implicit = 0; unsigned char tag_der[MAX_TAG_LEN]; is_tag_implicit = 0; if (node->type & CONST_TAG) { p = node->down; while (p) { if (type_field (p->type) == ASN1_ETYPE_TAG) { if (p->type & CONST_APPLICATION) class = ASN1_CLASS_APPLICATION; else if (p->type & CONST_UNIVERSAL) class = ASN1_CLASS_UNIVERSAL; else if (p->type & CONST_PRIVATE) class = ASN1_CLASS_PRIVATE; else class = ASN1_CLASS_CONTEXT_SPECIFIC; if (p->type & CONST_EXPLICIT) { if (is_tag_implicit) _asn1_tag_der (class_implicit, tag_implicit, tag_der, &tag_len); else _asn1_tag_der (class | ASN1_CLASS_STRUCTURED, _asn1_strtoul (p->value, NULL, 10), tag_der, &tag_len); *max_len -= tag_len; if (der && *max_len >= 0) memcpy (der + *counter, tag_der, tag_len); *counter += tag_len; _asn1_ltostr (*counter, (char *) temp); _asn1_set_name (p, (const char *) temp); is_tag_implicit = 0; } else { /* CONST_IMPLICIT */ if (!is_tag_implicit) { if ((type_field (node->type) == ASN1_ETYPE_SEQUENCE) || (type_field (node->type) == ASN1_ETYPE_SEQUENCE_OF) || (type_field (node->type) == ASN1_ETYPE_SET) || (type_field (node->type) == ASN1_ETYPE_SET_OF)) class |= ASN1_CLASS_STRUCTURED; class_implicit = class; tag_implicit = _asn1_strtoul (p->value, NULL, 10); is_tag_implicit = 1; } } } p = p->right; } } if (is_tag_implicit) { _asn1_tag_der (class_implicit, tag_implicit, tag_der, &tag_len); } else { unsigned type = type_field (node->type); switch (type) { CASE_HANDLED_ETYPES: _asn1_tag_der (_asn1_tags[type].class, _asn1_tags[type].tag, tag_der, &tag_len); break; case ASN1_ETYPE_TAG: case ASN1_ETYPE_CHOICE: case ASN1_ETYPE_ANY: tag_len = 0; break; default: return ASN1_GENERIC_ERROR; } } *max_len -= tag_len; if (der && *max_len >= 0) memcpy (der + *counter, tag_der, tag_len); *counter += tag_len; if (*max_len < 0) return ASN1_MEM_ERROR; return ASN1_SUCCESS; } /******************************************************/ /* Function : _asn1_ordering_set */ /* Description: puts the elements of a SET type in */ /* the correct order according to DER rules. */ /* Parameters: */ /* der: string with the DER coding. */ /* node: pointer to the SET element. */ /* Return: */ /* ASN1_SUCCESS if successful */ /* or an error value. */ /******************************************************/ static int _asn1_ordering_set (unsigned char *der, int der_len, asn1_node node) { struct vet { int end; unsigned long value; struct vet *next, *prev; }; int counter, len, len2; struct vet *first, *last, *p_vet, *p2_vet; asn1_node p; unsigned char class, *temp; unsigned long tag, t; int err; counter = 0; if (type_field (node->type) != ASN1_ETYPE_SET) return ASN1_VALUE_NOT_VALID; p = node->down; while (p && ((type_field (p->type) == ASN1_ETYPE_TAG) || (type_field (p->type) == ASN1_ETYPE_SIZE))) p = p->right; if ((p == NULL) || (p->right == NULL)) return ASN1_SUCCESS; first = last = NULL; while (p) { p_vet = malloc (sizeof (struct vet)); if (p_vet == NULL) { err = ASN1_MEM_ALLOC_ERROR; goto error; } p_vet->next = NULL; p_vet->prev = last; if (first == NULL) first = p_vet; else last->next = p_vet; last = p_vet; /* tag value calculation */ err = asn1_get_tag_der (der + counter, der_len - counter, &class, &len2, &tag); if (err != ASN1_SUCCESS) goto error; t = ((unsigned int)class) << 24; p_vet->value = t | tag; counter += len2; /* extraction and length */ len2 = asn1_get_length_der (der + counter, der_len - counter, &len); if (len2 < 0) { err = ASN1_DER_ERROR; goto error; } counter += len + len2; p_vet->end = counter; p = p->right; } p_vet = first; while (p_vet) { p2_vet = p_vet->next; counter = 0; while (p2_vet) { if (p_vet->value > p2_vet->value) { /* change position */ temp = malloc (p_vet->end - counter); if (temp == NULL) { err = ASN1_MEM_ALLOC_ERROR; goto error; } memcpy (temp, der + counter, p_vet->end - counter); memcpy (der + counter, der + p_vet->end, p2_vet->end - p_vet->end); memcpy (der + counter + p2_vet->end - p_vet->end, temp, p_vet->end - counter); free (temp); tag = p_vet->value; p_vet->value = p2_vet->value; p2_vet->value = tag; p_vet->end = counter + (p2_vet->end - p_vet->end); } counter = p_vet->end; p2_vet = p2_vet->next; p_vet = p_vet->next; } if (p_vet != first) p_vet->prev->next = NULL; else first = NULL; free (p_vet); p_vet = first; } return ASN1_SUCCESS; error: while (first != NULL) { p_vet = first; first = first->next; free(p_vet); } return err; } struct vet { unsigned char *ptr; int size; }; static int setof_compar(const void *_e1, const void *_e2) { unsigned length; const struct vet *e1 = _e1, *e2 = _e2; int rval; /* The encodings of the component values of a set-of value shall * appear in ascending order, the encodings being compared * as octet strings with the shorter components being * padded at their trailing end with 0-octets. * The padding octets are for comparison purposes and * do not appear in the encodings. */ length = MIN(e1->size, e2->size); rval = memcmp(e1->ptr, e2->ptr, length); if (rval == 0 && e1->size != e2->size) { if (e1->size > e2->size) rval = 1; else if (e2->size > e1->size) rval = -1; } return rval; } /******************************************************/ /* Function : _asn1_ordering_set_of */ /* Description: puts the elements of a SET OF type in */ /* the correct order according to DER rules. */ /* Parameters: */ /* der: string with the DER coding. */ /* node: pointer to the SET OF element. */ /* Return: */ /* ASN1_SUCCESS if successful */ /* or an error value. */ /******************************************************/ static int _asn1_ordering_set_of (unsigned char *der, int der_len, asn1_node node) { int counter, len, len2; struct vet *list = NULL, *tlist; unsigned list_size = 0; struct vet *p_vet; asn1_node p; unsigned char class; unsigned i; unsigned char *out = NULL; int err; if (der == NULL) return ASN1_VALUE_NOT_VALID; counter = 0; if (type_field (node->type) != ASN1_ETYPE_SET_OF) return ASN1_VALUE_NOT_VALID; p = node->down; while (p && ((type_field (p->type) == ASN1_ETYPE_TAG) || (type_field (p->type) == ASN1_ETYPE_SIZE))) p = p->right; if (p == NULL) return ASN1_VALUE_NOT_VALID; p = p->right; if ((p == NULL) || (p->right == NULL)) return ASN1_SUCCESS; while (p) { list_size++; tlist = realloc (list, list_size*sizeof(struct vet)); if (tlist == NULL) { err = ASN1_MEM_ALLOC_ERROR; goto error; } list = tlist; p_vet = &list[list_size-1]; p_vet->ptr = der+counter; p_vet->size = 0; /* extraction of tag and length */ if (der_len - counter > 0) { err = asn1_get_tag_der (der + counter, der_len - counter, &class, &len, NULL); if (err != ASN1_SUCCESS) goto error; counter += len; p_vet->size += len; len2 = asn1_get_length_der (der + counter, der_len - counter, &len); if (len2 < 0) { err = ASN1_DER_ERROR; goto error; } counter += len + len2; p_vet->size += len + len2; } else { err = ASN1_DER_ERROR; goto error; } p = p->right; } if (counter > der_len) { err = ASN1_DER_ERROR; goto error; } qsort(list, list_size, sizeof(struct vet), setof_compar); out = malloc(der_len); if (out == NULL) { err = ASN1_MEM_ERROR; goto error; } /* the sum of p_vet->size == der_len */ counter = 0; for (i = 0; i < list_size; i++) { p_vet = &list[i]; memcpy(out+counter, p_vet->ptr, p_vet->size); counter += p_vet->size; } memcpy(der, out, der_len); free(out); err = ASN1_SUCCESS; error: free(list); return err; } /** * asn1_der_coding: * @element: pointer to an ASN1 element * @name: the name of the structure you want to encode (it must be * inside *POINTER). * @ider: vector that will contain the DER encoding. DER must be a * pointer to memory cells already allocated. * @len: number of bytes of *@ider: @ider[0]..@ider[len-1], Initialy * holds the sizeof of der vector. * @ErrorDescription: return the error description or an empty * string if success. * * Creates the DER encoding for the NAME structure (inside *POINTER * structure). * * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND * if @name is not a valid element, %ASN1_VALUE_NOT_FOUND if there * is an element without a value, %ASN1_MEM_ERROR if the @ider * vector isn't big enough and in this case @len will contain the * length needed. **/ int asn1_der_coding (asn1_node_const element, const char *name, void *ider, int *len, char *ErrorDescription) { asn1_node node, p, p2; unsigned char temp[MAX(LTOSTR_MAX_SIZE, SIZEOF_UNSIGNED_LONG_INT * 3 + 1)]; int counter, counter_old, len2, len3, move, max_len, max_len_old; int err; unsigned char *der = ider; if (ErrorDescription) ErrorDescription[0] = 0; node = asn1_find_node (element, name); if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; /* Node is now a locally allocated variable. * That is because in some point we modify the * structure, and I don't know why! --nmav */ node = _asn1_copy_structure3 (node); if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; max_len = *len; if (der == NULL && max_len > 0) return ASN1_VALUE_NOT_VALID; counter = 0; move = DOWN; p = node; while (1) { counter_old = counter; max_len_old = max_len; if (move != UP) { p->start = counter; err = _asn1_insert_tag_der (p, der, &counter, &max_len); if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR) goto error; } switch (type_field (p->type)) { case ASN1_ETYPE_NULL: max_len--; if (der != NULL && max_len >= 0) der[counter] = 0; counter++; move = RIGHT; break; case ASN1_ETYPE_BOOLEAN: if ((p->type & CONST_DEFAULT) && (p->value == NULL)) { counter = counter_old; max_len = max_len_old; } else { if (p->value == NULL) { _asn1_error_description_value_not_found (p, ErrorDescription); err = ASN1_VALUE_NOT_FOUND; goto error; } max_len -= 2; if (der != NULL && max_len >= 0) { der[counter++] = 1; if (p->value[0] == 'F') der[counter++] = 0; else der[counter++] = 0xFF; } else counter += 2; } move = RIGHT; break; case ASN1_ETYPE_INTEGER: case ASN1_ETYPE_ENUMERATED: if ((p->type & CONST_DEFAULT) && (p->value == NULL)) { counter = counter_old; max_len = max_len_old; } else { if (p->value == NULL) { _asn1_error_description_value_not_found (p, ErrorDescription); err = ASN1_VALUE_NOT_FOUND; goto error; } len2 = asn1_get_length_der (p->value, p->value_len, &len3); if (len2 < 0) { err = ASN1_DER_ERROR; goto error; } max_len -= len2 + len3; if (der != NULL && max_len >= 0) memcpy (der + counter, p->value, len3 + len2); counter += len3 + len2; } move = RIGHT; break; case ASN1_ETYPE_OBJECT_ID: if ((p->type & CONST_DEFAULT) && (p->value == NULL)) { counter = counter_old; max_len = max_len_old; } else { if (p->value == NULL) { _asn1_error_description_value_not_found (p, ErrorDescription); err = ASN1_VALUE_NOT_FOUND; goto error; } len2 = max_len; err = _asn1_object_id_der ((char*)p->value, der + counter, &len2); if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR) goto error; max_len -= len2; counter += len2; } move = RIGHT; break; case ASN1_ETYPE_GENERALIZED_TIME: case ASN1_ETYPE_UTC_TIME: if (p->value == NULL) { _asn1_error_description_value_not_found (p, ErrorDescription); err = ASN1_VALUE_NOT_FOUND; goto error; } len2 = max_len; err = _asn1_time_der (p->value, p->value_len, der + counter, &len2); if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR) goto error; max_len -= len2; counter += len2; move = RIGHT; break; case ASN1_ETYPE_OCTET_STRING: case ASN1_ETYPE_GENERALSTRING: case ASN1_ETYPE_NUMERIC_STRING: case ASN1_ETYPE_IA5_STRING: case ASN1_ETYPE_TELETEX_STRING: case ASN1_ETYPE_PRINTABLE_STRING: case ASN1_ETYPE_UNIVERSAL_STRING: case ASN1_ETYPE_BMP_STRING: case ASN1_ETYPE_UTF8_STRING: case ASN1_ETYPE_VISIBLE_STRING: case ASN1_ETYPE_BIT_STRING: if (p->value == NULL) { _asn1_error_description_value_not_found (p, ErrorDescription); err = ASN1_VALUE_NOT_FOUND; goto error; } len2 = asn1_get_length_der (p->value, p->value_len, &len3); if (len2 < 0) { err = ASN1_DER_ERROR; goto error; } max_len -= len2 + len3; if (der != NULL && max_len >= 0) memcpy (der + counter, p->value, len3 + len2); counter += len3 + len2; move = RIGHT; break; case ASN1_ETYPE_SEQUENCE: case ASN1_ETYPE_SET: if (move != UP) { p->tmp_ival = counter; if (p->down == NULL) { move = UP; continue; } else { p2 = p->down; while (p2 && (type_field (p2->type) == ASN1_ETYPE_TAG)) p2 = p2->right; if (p2) { p = p2; move = RIGHT; continue; } move = UP; continue; } } else { /* move==UP */ len2 = p->tmp_ival; p->tmp_ival = 0; if ((type_field (p->type) == ASN1_ETYPE_SET) && (max_len >= 0)) { err = _asn1_ordering_set (der + len2, counter - len2, p); if (err != ASN1_SUCCESS) goto error; } asn1_length_der (counter - len2, temp, &len3); max_len -= len3; if (der != NULL && max_len >= 0) { memmove (der + len2 + len3, der + len2, counter - len2); memcpy (der + len2, temp, len3); } counter += len3; move = RIGHT; } break; case ASN1_ETYPE_SEQUENCE_OF: case ASN1_ETYPE_SET_OF: if (move != UP) { p->tmp_ival = counter; p = p->down; while ((type_field (p->type) == ASN1_ETYPE_TAG) || (type_field (p->type) == ASN1_ETYPE_SIZE)) p = p->right; if (p->right) { p = p->right; move = RIGHT; continue; } else p = _asn1_find_up (p); move = UP; } if (move == UP) { len2 = p->tmp_ival; p->tmp_ival = 0; if ((type_field (p->type) == ASN1_ETYPE_SET_OF) && (counter - len2 > 0) && (max_len >= 0)) { err = _asn1_ordering_set_of (der + len2, counter - len2, p); if (err != ASN1_SUCCESS) goto error; } asn1_length_der (counter - len2, temp, &len3); max_len -= len3; if (der != NULL && max_len >= 0) { memmove (der + len2 + len3, der + len2, counter - len2); memcpy (der + len2, temp, len3); } counter += len3; move = RIGHT; } break; case ASN1_ETYPE_ANY: if (p->value == NULL) { _asn1_error_description_value_not_found (p, ErrorDescription); err = ASN1_VALUE_NOT_FOUND; goto error; } len2 = asn1_get_length_der (p->value, p->value_len, &len3); if (len2 < 0) { err = ASN1_DER_ERROR; goto error; } max_len -= len2; if (der != NULL && max_len >= 0) memcpy (der + counter, p->value + len3, len2); counter += len2; move = RIGHT; break; default: move = (move == UP) ? RIGHT : DOWN; break; } if ((move != DOWN) && (counter != counter_old)) { p->end = counter - 1; err = _asn1_complete_explicit_tag (p, der, &counter, &max_len); if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR) goto error; } if (p == node && move != DOWN) break; if (move == DOWN) { if (p->down) p = p->down; else move = RIGHT; } if (move == RIGHT) { if (p->right) p = p->right; else move = UP; } if (move == UP) p = _asn1_find_up (p); } *len = counter; if (max_len < 0) { err = ASN1_MEM_ERROR; goto error; } err = ASN1_SUCCESS; error: asn1_delete_structure (&node); return err; } libtasn1-4.16.0/lib/gstr.h0000644000000000000000000000303613517303137012111 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ #ifndef GSTR_H # define GSTR_H unsigned int _asn1_str_cpy (char *dest, size_t dest_tot_size, const char *src); void _asn1_str_cat (char *dest, size_t dest_tot_size, const char *src); #define Estrcpy(x,y) _asn1_str_cpy(x,ASN1_MAX_ERROR_DESCRIPTION_SIZE,y) #define Estrcat(x,y) _asn1_str_cat(x,ASN1_MAX_ERROR_DESCRIPTION_SIZE,y) inline static void safe_memset(void *data, int c, size_t size) { volatile unsigned volatile_zero = 0; volatile char *vdata = (volatile char*)data; /* This is based on a nice trick for safe memset, * sent by David Jacobson in the openssl-dev mailing list. */ if (size > 0) do { memset(data, c, size); } while(vdata[volatile_zero] != c); } #endif /* GSTR_H */ libtasn1-4.16.0/lib/parser_aux.h0000644000000000000000000001447413517123367013320 00000000000000/* * Copyright (C) 2000-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ #ifndef _PARSER_AUX_H #define _PARSER_AUX_H /***********************************************/ /* Type: list_type */ /* Description: type used in the list during */ /* the structure creation. */ /***********************************************/ typedef struct list_struct { asn1_node node; struct list_struct *next; } list_type; /***************************************/ /* Functions used by ASN.1 parser */ /***************************************/ asn1_node _asn1_add_static_node (list_type **e_list, unsigned int type); void _asn1_delete_list (list_type *e_list); void _asn1_delete_list_and_nodes (list_type *e_list); void _asn1_delete_node_from_list (list_type *list, asn1_node node); asn1_node _asn1_set_value (asn1_node node, const void *value, unsigned int len); asn1_node _asn1_set_value_m (asn1_node node, void *value, unsigned int len); asn1_node _asn1_set_value_lv (asn1_node node, const void *value, unsigned int len); asn1_node _asn1_append_value (asn1_node node, const void *value, unsigned int len); asn1_node _asn1_set_name (asn1_node node, const char *name); asn1_node _asn1_cpy_name (asn1_node dst, asn1_node_const src); asn1_node _asn1_set_right (asn1_node node, asn1_node right); asn1_node _asn1_get_last_right (asn1_node_const node); void _asn1_remove_node (asn1_node node, unsigned int flags); /* Max 64-bit integer length is 20 chars + 1 for sign + 1 for null termination */ #define LTOSTR_MAX_SIZE 22 char *_asn1_ltostr (int64_t v, char str[LTOSTR_MAX_SIZE]); asn1_node _asn1_find_up (asn1_node_const node); int _asn1_change_integer_value (asn1_node node); #define EXPAND_OBJECT_ID_MAX_RECURSION 16 int _asn1_expand_object_id (list_type **list, asn1_node node); int _asn1_type_set_config (asn1_node node); int _asn1_check_identifier (asn1_node_const node); int _asn1_set_default_tag (asn1_node node); /******************************************************************/ /* Function : _asn1_get_right */ /* Description: returns the element pointed by the RIGHT field of */ /* a NODE_ASN element. */ /* Parameters: */ /* node: NODE_ASN element pointer. */ /* Return: field RIGHT of NODE. */ /******************************************************************/ inline static asn1_node _asn1_get_right (asn1_node_const node) { if (node == NULL) return NULL; return node->right; } /******************************************************************/ /* Function : _asn1_set_down */ /* Description: sets the field DOWN in a NODE_ASN element. */ /* Parameters: */ /* node: element pointer. */ /* down: pointer to a NODE_ASN element that you want be pointed */ /* by NODE. */ /* Return: pointer to *NODE. */ /******************************************************************/ inline static asn1_node _asn1_set_down (asn1_node node, asn1_node down) { if (node == NULL) return node; node->down = down; if (down) down->left = node; return node; } /******************************************************************/ /* Function : _asn1_get_down */ /* Description: returns the element pointed by the DOWN field of */ /* a NODE_ASN element. */ /* Parameters: */ /* node: NODE_ASN element pointer. */ /* Return: field DOWN of NODE. */ /******************************************************************/ inline static asn1_node _asn1_get_down (asn1_node_const node) { if (node == NULL) return NULL; return node->down; } /******************************************************************/ /* Function : _asn1_get_name */ /* Description: returns the name of a NODE_ASN element. */ /* Parameters: */ /* node: NODE_ASN element pointer. */ /* Return: a null terminated string. */ /******************************************************************/ inline static char * _asn1_get_name (asn1_node_const node) { if (node == NULL) return NULL; return (char *) node->name; } /******************************************************************/ /* Function : _asn1_mod_type */ /* Description: change the field TYPE of an NODE_ASN element. */ /* The new value is the old one | (bitwise or) the */ /* paramener VALUE. */ /* Parameters: */ /* node: NODE_ASN element pointer. */ /* value: the integer value that must be or-ed with the current */ /* value of field TYPE. */ /* Return: NODE pointer. */ /******************************************************************/ inline static asn1_node _asn1_mod_type (asn1_node node, unsigned int value) { if (node == NULL) return node; node->type |= value; return node; } #endif libtasn1-4.16.0/lib/Makefile.in0000644000000000000000000011232313615375040013027 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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) 2002-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_LD_VERSION_SCRIPT_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/libtasn1.map @HAVE_LD_VERSION_SCRIPT_FALSE@am__append_2 = -export-symbols-regex '^(asn1|libtasn1_).*' subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ $(top_srcdir)/m4/ax_am_macros_static.m4 \ $(top_srcdir)/m4/ax_check_gnu_make.m4 \ $(top_srcdir)/m4/ax_code_coverage.m4 \ $(top_srcdir)/m4/ax_file_escapes.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4-gl/00gnulib.m4 \ $(top_srcdir)/m4-gl/__inline.m4 \ $(top_srcdir)/m4-gl/absolute-header.m4 \ $(top_srcdir)/m4-gl/extensions.m4 \ $(top_srcdir)/m4-gl/extern-inline.m4 \ $(top_srcdir)/m4-gl/gnulib-common.m4 \ $(top_srcdir)/m4-gl/gnulib-comp.m4 \ $(top_srcdir)/m4-gl/include_next.m4 \ $(top_srcdir)/m4-gl/ld-version-script.m4 \ $(top_srcdir)/m4-gl/limits-h.m4 \ $(top_srcdir)/m4-gl/longlong.m4 \ $(top_srcdir)/m4-gl/manywarnings.m4 \ $(top_srcdir)/m4-gl/minmax.m4 $(top_srcdir)/m4-gl/multiarch.m4 \ $(top_srcdir)/m4-gl/off_t.m4 $(top_srcdir)/m4-gl/ssize_t.m4 \ $(top_srcdir)/m4-gl/stdbool.m4 $(top_srcdir)/m4-gl/stddef_h.m4 \ $(top_srcdir)/m4-gl/stdint.m4 $(top_srcdir)/m4-gl/string_h.m4 \ $(top_srcdir)/m4-gl/strverscmp.m4 \ $(top_srcdir)/m4-gl/sys_types_h.m4 \ $(top_srcdir)/m4-gl/valgrind-tests.m4 \ $(top_srcdir)/m4-gl/visibility.m4 \ $(top_srcdir)/m4-gl/warn-on-use.m4 \ $(top_srcdir)/m4-gl/warnings.m4 $(top_srcdir)/m4-gl/wchar_t.m4 \ $(top_srcdir)/m4-gl/wint_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = libtasn1.pc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libtasn1_la_DEPENDENCIES = gl/libgnu.la am_libtasn1_la_OBJECTS = ASN1.lo coding.lo decoding.lo element.lo \ errors.lo gstr.lo parser_aux.lo structure.lo version.lo libtasn1_la_OBJECTS = $(am_libtasn1_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libtasn1_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libtasn1_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ASN1.Plo ./$(DEPDIR)/coding.Plo \ ./$(DEPDIR)/decoding.Plo ./$(DEPDIR)/element.Plo \ ./$(DEPDIR)/errors.Plo ./$(DEPDIR)/gstr.Plo \ ./$(DEPDIR)/parser_aux.Plo ./$(DEPDIR)/structure.Plo \ ./$(DEPDIR)/version.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = YLWRAP = $(top_srcdir)/build-aux/ylwrap SOURCES = $(libtasn1_la_SOURCES) DIST_SOURCES = $(libtasn1_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pkgconfig_DATA) HEADERS = $(include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libtasn1.pc.in \ $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \ ASN1.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASN1_VERSION_MAJOR = @ASN1_VERSION_MAJOR@ ASN1_VERSION_MINOR = @ASN1_VERSION_MINOR@ ASN1_VERSION_NUMBER = @ASN1_VERSION_NUMBER@ ASN1_VERSION_PATCH = @ASN1_VERSION_PATCH@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FUZZ_LIBS = @FUZZ_LIBS@ GCOV = @GCOV@ GENHTML = @GENHTML@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTOOL = @LIBTOOL@ LIB_FUZZING_ENGINE = @LIB_FUZZING_ENGINE@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ ifGNUmake = @ifGNUmake@ ifnGNUmake = @ifnGNUmake@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = gl AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAG_VISIBILITY) $(CODE_COVERAGE_CFLAGS) AM_CPPFLAGS = -I$(builddir)/gl -I$(srcdir)/gl -I$(builddir)/includes -I$(srcdir)/includes\ -DASN1_BUILDING $(CODE_COVERAGE_CPPFLAGS) AM_YFLAGS = -Wno-yacc include_HEADERS = includes/libtasn1.h pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libtasn1.pc lib_LTLIBRARIES = libtasn1.la libtasn1_la_SOURCES = \ ASN1.y \ coding.c \ decoding.c \ element.c \ element.h \ errors.c \ gstr.c \ gstr.h \ int.h \ includes/libtasn1.h \ libtasn1.map \ parser_aux.c \ parser_aux.h \ structure.c \ structure.h \ version.c libtasn1_la_LIBADD = gl/libgnu.la libtasn1_la_LDFLAGS = -no-undefined -version-info \ $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ $(CODE_COVERAGE_LDFLAGS) $(am__append_1) $(am__append_2) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj .y $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lib/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): libtasn1.pc: $(top_builddir)/config.status $(srcdir)/libtasn1.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libtasn1.la: $(libtasn1_la_OBJECTS) $(libtasn1_la_DEPENDENCIES) $(EXTRA_libtasn1_la_DEPENDENCIES) $(AM_V_CCLD)$(libtasn1_la_LINK) -rpath $(libdir) $(libtasn1_la_OBJECTS) $(libtasn1_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ASN1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coding.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decoding.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/element.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_aux.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/structure.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .y.c: $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f ASN1.c clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/ASN1.Plo -rm -f ./$(DEPDIR)/coding.Plo -rm -f ./$(DEPDIR)/decoding.Plo -rm -f ./$(DEPDIR)/element.Plo -rm -f ./$(DEPDIR)/errors.Plo -rm -f ./$(DEPDIR)/gstr.Plo -rm -f ./$(DEPDIR)/parser_aux.Plo -rm -f ./$(DEPDIR)/structure.Plo -rm -f ./$(DEPDIR)/version.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-includeHEADERS install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/ASN1.Plo -rm -f ./$(DEPDIR)/coding.Plo -rm -f ./$(DEPDIR)/decoding.Plo -rm -f ./$(DEPDIR)/element.Plo -rm -f ./$(DEPDIR)/errors.Plo -rm -f ./$(DEPDIR)/gstr.Plo -rm -f ./$(DEPDIR)/parser_aux.Plo -rm -f ./$(DEPDIR)/structure.Plo -rm -f ./$(DEPDIR)/version.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-pkgconfigDATA .PRECIOUS: Makefile # 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: libtasn1-4.16.0/lib/errors.c0000644000000000000000000000602213514140427012435 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ #include #ifdef STDC_HEADERS #include #endif #define LIBTASN1_ERROR_ENTRY(name) { #name, name } struct libtasn1_error_entry { const char *name; int number; }; typedef struct libtasn1_error_entry libtasn1_error_entry; static const libtasn1_error_entry error_algorithms[] = { LIBTASN1_ERROR_ENTRY (ASN1_SUCCESS), LIBTASN1_ERROR_ENTRY (ASN1_FILE_NOT_FOUND), LIBTASN1_ERROR_ENTRY (ASN1_ELEMENT_NOT_FOUND), LIBTASN1_ERROR_ENTRY (ASN1_IDENTIFIER_NOT_FOUND), LIBTASN1_ERROR_ENTRY (ASN1_DER_ERROR), LIBTASN1_ERROR_ENTRY (ASN1_VALUE_NOT_FOUND), LIBTASN1_ERROR_ENTRY (ASN1_GENERIC_ERROR), LIBTASN1_ERROR_ENTRY (ASN1_VALUE_NOT_VALID), LIBTASN1_ERROR_ENTRY (ASN1_TAG_ERROR), LIBTASN1_ERROR_ENTRY (ASN1_TAG_IMPLICIT), LIBTASN1_ERROR_ENTRY (ASN1_ERROR_TYPE_ANY), LIBTASN1_ERROR_ENTRY (ASN1_SYNTAX_ERROR), LIBTASN1_ERROR_ENTRY (ASN1_MEM_ERROR), LIBTASN1_ERROR_ENTRY (ASN1_MEM_ALLOC_ERROR), LIBTASN1_ERROR_ENTRY (ASN1_DER_OVERFLOW), LIBTASN1_ERROR_ENTRY (ASN1_NAME_TOO_LONG), LIBTASN1_ERROR_ENTRY (ASN1_ARRAY_ERROR), LIBTASN1_ERROR_ENTRY (ASN1_ELEMENT_NOT_EMPTY), LIBTASN1_ERROR_ENTRY (ASN1_TIME_ENCODING_ERROR), LIBTASN1_ERROR_ENTRY (ASN1_RECURSION), {0, 0} }; /** * asn1_perror: * @error: is an error returned by a libtasn1 function. * * Prints a string to stderr with a description of an error. This * function is like perror(). The only difference is that it accepts * an error returned by a libtasn1 function. * * Since: 1.6 **/ void asn1_perror (int error) { const char *str = asn1_strerror (error); fprintf (stderr, "LIBTASN1 ERROR: %s\n", str ? str : "(null)"); } /** * asn1_strerror: * @error: is an error returned by a libtasn1 function. * * Returns a string with a description of an error. This function is * similar to strerror. The only difference is that it accepts an * error (number) returned by a libtasn1 function. * * Returns: Pointer to static zero-terminated string describing error * code. * * Since: 1.6 **/ const char * asn1_strerror (int error) { const libtasn1_error_entry *p; for (p = error_algorithms; p->name != NULL; p++) if (p->number == error) return p->name + sizeof ("ASN1_") - 1; return NULL; } libtasn1-4.16.0/lib/gstr.c0000644000000000000000000000366413246341643012116 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ #include #include "gstr.h" /* These function are like strcat, strcpy. They only * do bounds checking (they shouldn't cause buffer overruns), * and they always produce null terminated strings. * * They should be used only with null terminated strings. */ void _asn1_str_cat (char *dest, size_t dest_tot_size, const char *src) { size_t str_size = strlen (src); size_t dest_size = strlen (dest); if (dest_tot_size - dest_size > str_size) { strcat (dest, src); } else { if (dest_tot_size - dest_size > 0) { strncat (dest, src, (dest_tot_size - dest_size) - 1); dest[dest_tot_size - 1] = 0; } } } /* Returns the bytes copied (not including the null terminator) */ unsigned int _asn1_str_cpy (char *dest, size_t dest_tot_size, const char *src) { size_t str_size = strlen (src); if (dest_tot_size > str_size) { strcpy (dest, src); return str_size; } else { if (dest_tot_size > 0) { str_size = dest_tot_size - 1; memcpy (dest, src, str_size); dest[str_size] = 0; return str_size; } else return 0; } } libtasn1-4.16.0/lib/libtasn1.pc.in0000644000000000000000000000210613246341643013427 00000000000000# Copyright (C) 2005-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # The LIBTASN1 library is free software; you can redistribute it # and/or modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libtasn1 Description: Library for ASN.1 and DER manipulation URL: http://www.gnu.org/software/libtasn1/ Version: @VERSION@ Libs: -L${libdir} -ltasn1 Cflags: -I${includedir} libtasn1-4.16.0/lib/libtasn1.map0000644000000000000000000000343113611145057013174 00000000000000# Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is part of LIBTASN1. # # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . LIBTASN1_0_3 { global: asn1_array2tree; asn1_bit_der; asn1_check_version; asn1_copy_node; asn1_create_element; asn1_delete_element; asn1_delete_structure; asn1_der_coding; asn1_der_decoding2; asn1_der_decoding; asn1_der_decoding_element; asn1_der_decoding_startEnd; asn1_expand_any_defined_by; asn1_expand_octet_string; asn1_find_node; asn1_find_structure_from_oid; asn1_get_bit_der; asn1_get_length_ber; asn1_get_length_der; asn1_get_octet_der; asn1_get_tag_der; asn1_length_der; asn1_number_of_elements; asn1_octet_der; asn1_parser2array; asn1_parser2tree; asn1_perror; asn1_print_structure; asn1_read_tag; asn1_read_value; asn1_strerror; asn1_write_value; asn1_read_node_value; asn1_encode_simple_der; asn1_decode_simple_der; asn1_read_value_type; asn1_delete_structure2; asn1_dup_node; asn1_decode_simple_ber; asn1_get_object_id_der; local: *; }; LIBTASN1_4_16_0 { global: asn1_object_id_der; } LIBTASN1_0_3; libtasn1-4.16.0/lib/int.h0000644000000000000000000001466013603737041011732 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ #ifndef INT_H #define INT_H #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #include #define ASN1_SMALL_VALUE_SIZE 16 /* This structure is also in libtasn1.h, but then contains less fields. You cannot make any modifications to these first fields without breaking ABI. */ struct asn1_node_st { /* public fields: */ char name[ASN1_MAX_NAME_SIZE + 1]; /* Node name */ unsigned int name_hash; unsigned int type; /* Node type */ unsigned char *value; /* Node value */ int value_len; asn1_node down; /* Pointer to the son node */ asn1_node right; /* Pointer to the brother node */ asn1_node left; /* Pointer to the next list element */ /* private fields: */ unsigned char small_value[ASN1_SMALL_VALUE_SIZE]; /* For small values */ /* values used during decoding/coding */ int tmp_ival; unsigned start; /* the start of the DER sequence - if decoded */ unsigned end; /* the end of the DER sequence - if decoded */ }; typedef struct tag_and_class_st { unsigned tag; unsigned class; const char *desc; } tag_and_class_st; /* the types that are handled in _asn1_tags */ #define CASE_HANDLED_ETYPES \ case ASN1_ETYPE_NULL: \ case ASN1_ETYPE_BOOLEAN: \ case ASN1_ETYPE_INTEGER: \ case ASN1_ETYPE_ENUMERATED: \ case ASN1_ETYPE_OBJECT_ID: \ case ASN1_ETYPE_OCTET_STRING: \ case ASN1_ETYPE_GENERALSTRING: \ case ASN1_ETYPE_NUMERIC_STRING: \ case ASN1_ETYPE_IA5_STRING: \ case ASN1_ETYPE_TELETEX_STRING: \ case ASN1_ETYPE_PRINTABLE_STRING: \ case ASN1_ETYPE_UNIVERSAL_STRING: \ case ASN1_ETYPE_BMP_STRING: \ case ASN1_ETYPE_UTF8_STRING: \ case ASN1_ETYPE_VISIBLE_STRING: \ case ASN1_ETYPE_BIT_STRING: \ case ASN1_ETYPE_SEQUENCE: \ case ASN1_ETYPE_SEQUENCE_OF: \ case ASN1_ETYPE_SET: \ case ASN1_ETYPE_UTC_TIME: \ case ASN1_ETYPE_GENERALIZED_TIME: \ case ASN1_ETYPE_SET_OF #define ETYPE_TAG(etype) (_asn1_tags[etype].tag) #define ETYPE_CLASS(etype) (_asn1_tags[etype].class) #define ETYPE_OK(etype) (((etype) != ASN1_ETYPE_INVALID && \ (etype) <= _asn1_tags_size && \ _asn1_tags[(etype)].desc != NULL)?1:0) #define ETYPE_IS_STRING(etype) ((etype == ASN1_ETYPE_GENERALSTRING || \ etype == ASN1_ETYPE_NUMERIC_STRING || etype == ASN1_ETYPE_IA5_STRING || \ etype == ASN1_ETYPE_TELETEX_STRING || etype == ASN1_ETYPE_PRINTABLE_STRING || \ etype == ASN1_ETYPE_UNIVERSAL_STRING || etype == ASN1_ETYPE_BMP_STRING || \ etype == ASN1_ETYPE_UTF8_STRING || etype == ASN1_ETYPE_VISIBLE_STRING || \ etype == ASN1_ETYPE_OCTET_STRING)?1:0) extern unsigned int _asn1_tags_size; extern const tag_and_class_st _asn1_tags[]; #define _asn1_strlen(s) strlen((const char *) s) #define _asn1_strtol(n,e,b) strtol((const char *) n, e, b) #define _asn1_strtoul(n,e,b) strtoul((const char *) n, e, b) #define _asn1_strcmp(a,b) strcmp((const char *)a, (const char *)b) #define _asn1_strcpy(a,b) strcpy((char *)a, (const char *)b) #define _asn1_strcat(a,b) strcat((char *)a, (const char *)b) #if SIZEOF_UNSIGNED_LONG_INT == 8 # define _asn1_strtou64(n,e,b) strtoul((const char *) n, e, b) #else # define _asn1_strtou64(n,e,b) strtoull((const char *) n, e, b) #endif #define MAX_LOG_SIZE 1024 /* maximum number of characters of a log message */ /* Define used for visiting trees. */ #define UP 1 #define RIGHT 2 #define DOWN 3 /***********************************************************************/ /* List of constants to better specify the type of typedef asn1_node_st. */ /***********************************************************************/ /* Used with TYPE_TAG */ #define CONST_UNIVERSAL (1U<<8) #define CONST_PRIVATE (1U<<9) #define CONST_APPLICATION (1U<<10) #define CONST_EXPLICIT (1U<<11) #define CONST_IMPLICIT (1U<<12) #define CONST_TAG (1U<<13) /* Used in ASN.1 assignement */ #define CONST_OPTION (1U<<14) #define CONST_DEFAULT (1U<<15) #define CONST_TRUE (1U<<16) #define CONST_FALSE (1U<<17) #define CONST_LIST (1U<<18) /* Used with TYPE_INTEGER and TYPE_BIT_STRING */ #define CONST_MIN_MAX (1U<<19) #define CONST_1_PARAM (1U<<20) #define CONST_SIZE (1U<<21) #define CONST_DEFINED_BY (1U<<22) /* Those two are deprecated and used for backwards compatibility */ #define CONST_GENERALIZED (1U<<23) #define CONST_UTC (1U<<24) /* #define CONST_IMPORTS (1U<<25) */ #define CONST_NOT_USED (1U<<26) #define CONST_SET (1U<<27) #define CONST_ASSIGN (1U<<28) #define CONST_DOWN (1U<<29) #define CONST_RIGHT (1U<<30) #define ASN1_ETYPE_TIME 17 /****************************************/ /* Returns the first 8 bits. */ /* Used with the field type of asn1_node_st */ /****************************************/ inline static unsigned int type_field (unsigned int ntype) { return (ntype & 0xff); } /* To convert old types from a static structure */ inline static unsigned int convert_old_type (unsigned int ntype) { unsigned int type = ntype & 0xff; if (type == ASN1_ETYPE_TIME) { if (ntype & CONST_UTC) type = ASN1_ETYPE_UTC_TIME; else type = ASN1_ETYPE_GENERALIZED_TIME; ntype &= ~(CONST_UTC | CONST_GENERALIZED); ntype &= 0xffffff00; ntype |= type; return ntype; } else return ntype; } static inline void *_asn1_realloc(void *ptr, size_t size) { void *ret; if (size == 0) return ptr; ret = realloc(ptr, size); if (ret == NULL) { free(ptr); } return ret; } #endif /* INT_H */ libtasn1-4.16.0/lib/structure.c0000644000000000000000000006533213520774070013176 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ /*****************************************************/ /* File: structure.c */ /* Description: Functions to create and delete an */ /* ASN1 tree. */ /*****************************************************/ #include #include #include "parser_aux.h" #include extern char _asn1_identifierMissing[]; /******************************************************/ /* Function : _asn1_add_single_node */ /* Description: creates a new NODE_ASN element. */ /* Parameters: */ /* type: type of the new element (see ASN1_ETYPE_ */ /* and CONST_ constants). */ /* Return: pointer to the new element. */ /******************************************************/ asn1_node _asn1_add_single_node (unsigned int type) { asn1_node punt; punt = calloc (1, sizeof (struct asn1_node_st)); if (punt == NULL) return NULL; punt->type = type; return punt; } /******************************************************************/ /* Function : _asn1_find_left */ /* Description: returns the NODE_ASN element with RIGHT field that*/ /* points the element NODE. */ /* Parameters: */ /* node: NODE_ASN element pointer. */ /* Return: NULL if not found. */ /******************************************************************/ asn1_node _asn1_find_left (asn1_node_const node) { if ((node == NULL) || (node->left == NULL) || (node->left->down == node)) return NULL; return node->left; } int _asn1_create_static_structure (asn1_node_const pointer, char *output_file_name, char *vector_name) { FILE *file; asn1_node_const p; unsigned long t; file = fopen (output_file_name, "w"); if (file == NULL) return ASN1_FILE_NOT_FOUND; fprintf (file, "#if HAVE_CONFIG_H\n"); fprintf (file, "# include \"config.h\"\n"); fprintf (file, "#endif\n\n"); fprintf (file, "#include \n\n"); fprintf (file, "const asn1_static_node %s[] = {\n", vector_name); p = pointer; while (p) { fprintf (file, " { "); if (p->name[0] != 0) fprintf (file, "\"%s\", ", p->name); else fprintf (file, "NULL, "); t = p->type; if (p->down) t |= CONST_DOWN; if (p->right) t |= CONST_RIGHT; fprintf (file, "%lu, ", t); if (p->value) fprintf (file, "\"%s\"},\n", p->value); else fprintf (file, "NULL },\n"); if (p->down) { p = p->down; } else if (p->right) { p = p->right; } else { while (1) { p = _asn1_find_up (p); if (p == pointer) { p = NULL; break; } if (p->right) { p = p->right; break; } } } } fprintf (file, " { NULL, 0, NULL }\n};\n"); fclose (file); return ASN1_SUCCESS; } /** * asn1_array2tree: * @array: specify the array that contains ASN.1 declarations * @definitions: return the pointer to the structure created by * *ARRAY ASN.1 declarations * @errorDescription: return the error description. * * Creates the structures needed to manage the ASN.1 definitions. * @array is a vector created by asn1_parser2array(). * * Returns: %ASN1_SUCCESS if structure was created correctly, * %ASN1_ELEMENT_NOT_EMPTY if *@definitions not NULL, * %ASN1_IDENTIFIER_NOT_FOUND if in the file there is an identifier * that is not defined (see @errorDescription for more information), * %ASN1_ARRAY_ERROR if the array pointed by @array is wrong. **/ int asn1_array2tree (const asn1_static_node * array, asn1_node * definitions, char *errorDescription) { asn1_node p, p_last = NULL; unsigned long k; int move; int result; unsigned int type; list_type *e_list = NULL; if (errorDescription) errorDescription[0] = 0; if (*definitions != NULL) return ASN1_ELEMENT_NOT_EMPTY; move = UP; for (k = 0; array[k].value || array[k].type || array[k].name; k++) { type = convert_old_type (array[k].type); p = _asn1_add_static_node (&e_list, type & (~CONST_DOWN)); if (array[k].name) _asn1_set_name (p, array[k].name); if (array[k].value) _asn1_set_value (p, array[k].value, strlen (array[k].value) + 1); if (*definitions == NULL) *definitions = p; if (move == DOWN) { if (p_last && p_last->down) _asn1_delete_structure (e_list, &p_last->down, 0); _asn1_set_down (p_last, p); } else if (move == RIGHT) { if (p_last && p_last->right) _asn1_delete_structure (e_list, &p_last->right, 0); _asn1_set_right (p_last, p); } p_last = p; if (type & CONST_DOWN) move = DOWN; else if (type & CONST_RIGHT) move = RIGHT; else { while (p_last != *definitions) { p_last = _asn1_find_up (p_last); if (p_last == NULL) break; if (p_last->type & CONST_RIGHT) { p_last->type &= ~CONST_RIGHT; move = RIGHT; break; } } /* while */ } } /* while */ if (p_last == *definitions) { result = _asn1_check_identifier (*definitions); if (result == ASN1_SUCCESS) { _asn1_change_integer_value (*definitions); result = _asn1_expand_object_id (&e_list, *definitions); } } else { result = ASN1_ARRAY_ERROR; } if (errorDescription != NULL) { if (result == ASN1_IDENTIFIER_NOT_FOUND) { Estrcpy (errorDescription, ":: identifier '"); Estrcat (errorDescription, _asn1_identifierMissing); Estrcat (errorDescription, "' not found"); } else errorDescription[0] = 0; } if (result != ASN1_SUCCESS) { _asn1_delete_list_and_nodes (e_list); *definitions = NULL; } else _asn1_delete_list (e_list); return result; } /** * asn1_delete_structure: * @structure: pointer to the structure that you want to delete. * * Deletes the structure *@structure. At the end, *@structure is set * to NULL. * * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if * *@structure was NULL. **/ int asn1_delete_structure (asn1_node * structure) { return _asn1_delete_structure (NULL, structure, 0); } /** * asn1_delete_structure2: * @structure: pointer to the structure that you want to delete. * @flags: additional flags (see %ASN1_DELETE_FLAG) * * Deletes the structure *@structure. At the end, *@structure is set * to NULL. * * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if * *@structure was NULL. **/ int asn1_delete_structure2 (asn1_node * structure, unsigned int flags) { return _asn1_delete_structure (NULL, structure, flags); } int _asn1_delete_structure (list_type *e_list, asn1_node * structure, unsigned int flags) { asn1_node p, p2, p3; if (*structure == NULL) return ASN1_ELEMENT_NOT_FOUND; p = *structure; while (p) { if (p->down) { p = p->down; } else { /* no down */ p2 = p->right; if (p != *structure) { p3 = _asn1_find_up (p); _asn1_set_down (p3, p2); if (e_list) _asn1_delete_node_from_list (e_list, p); _asn1_remove_node (p, flags); p = p3; } else { /* p==root */ p3 = _asn1_find_left (p); if (!p3) { p3 = _asn1_find_up (p); if (p3) _asn1_set_down (p3, p2); else { if (p->right) p->right->left = NULL; } } else _asn1_set_right (p3, p2); if (e_list) _asn1_delete_node_from_list (e_list, p); _asn1_remove_node (p, flags); p = NULL; } } } *structure = NULL; return ASN1_SUCCESS; } /** * asn1_delete_element: * @structure: pointer to the structure that contains the element you * want to delete. * @element_name: element's name you want to delete. * * Deletes the element named *@element_name inside *@structure. * * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if * the @element_name was not found. **/ int asn1_delete_element (asn1_node structure, const char *element_name) { asn1_node p2, p3, source_node; source_node = asn1_find_node (structure, element_name); if (source_node == NULL) return ASN1_ELEMENT_NOT_FOUND; p2 = source_node->right; p3 = _asn1_find_left (source_node); if (!p3) { p3 = _asn1_find_up (source_node); if (p3) _asn1_set_down (p3, p2); else if (source_node->right) source_node->right->left = NULL; } else _asn1_set_right (p3, p2); return asn1_delete_structure (&source_node); } #ifndef __clang_analyzer__ asn1_node _asn1_copy_structure3 (asn1_node_const source_node) { asn1_node_const p_s; asn1_node dest_node, p_d, p_d_prev; int move; if (source_node == NULL) return NULL; dest_node = _asn1_add_single_node (source_node->type); p_s = source_node; p_d = dest_node; move = DOWN; do { if (move != UP) { if (p_s->name[0] != 0) _asn1_cpy_name (p_d, p_s); if (p_s->value) _asn1_set_value (p_d, p_s->value, p_s->value_len); if (p_s->down) { p_s = p_s->down; p_d_prev = p_d; p_d = _asn1_add_single_node (p_s->type); _asn1_set_down (p_d_prev, p_d); continue; } p_d->start = p_s->start; p_d->end = p_s->end; } if (p_s == source_node) break; if (p_s->right) { move = RIGHT; p_s = p_s->right; p_d_prev = p_d; p_d = _asn1_add_single_node (p_s->type); _asn1_set_right (p_d_prev, p_d); } else { move = UP; p_s = _asn1_find_up (p_s); p_d = _asn1_find_up (p_d); } } while (p_s != source_node); return dest_node; } #else /* Non-production code */ asn1_node _asn1_copy_structure3 (asn1_node_const source_node) { return NULL; } #endif /* __clang_analyzer__ */ static asn1_node _asn1_copy_structure2 (asn1_node_const root, const char *source_name) { asn1_node source_node; source_node = asn1_find_node (root, source_name); return _asn1_copy_structure3 (source_node); } static int _asn1_type_choice_config (asn1_node node) { asn1_node p, p2, p3, p4; int move, tlen; if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; p = node; move = DOWN; while (!((p == node) && (move == UP))) { if (move != UP) { if ((type_field (p->type) == ASN1_ETYPE_CHOICE) && (p->type & CONST_TAG)) { p2 = p->down; while (p2) { if (type_field (p2->type) != ASN1_ETYPE_TAG) { p2->type |= CONST_TAG; p3 = _asn1_find_left (p2); while (p3) { if (type_field (p3->type) == ASN1_ETYPE_TAG) { p4 = _asn1_add_single_node (p3->type); tlen = _asn1_strlen (p3->value); if (tlen > 0) _asn1_set_value (p4, p3->value, tlen + 1); _asn1_set_right (p4, p2->down); _asn1_set_down (p2, p4); } p3 = _asn1_find_left (p3); } } p2 = p2->right; } p->type &= ~(CONST_TAG); p2 = p->down; while (p2) { p3 = p2->right; if (type_field (p2->type) == ASN1_ETYPE_TAG) asn1_delete_structure (&p2); p2 = p3; } } move = DOWN; } else move = RIGHT; if (move == DOWN) { if (p->down) p = p->down; else move = RIGHT; } if (p == node) { move = UP; continue; } if (move == RIGHT) { if (p->right) p = p->right; else move = UP; } if (move == UP) p = _asn1_find_up (p); } return ASN1_SUCCESS; } static int _asn1_expand_identifier (asn1_node * node, asn1_node_const root) { asn1_node p, p2, p3; char name2[ASN1_MAX_NAME_SIZE + 2]; int move; if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; p = *node; move = DOWN; while (!((p == *node) && (move == UP))) { if (move != UP) { if (type_field (p->type) == ASN1_ETYPE_IDENTIFIER) { snprintf (name2, sizeof (name2), "%s.%s", root->name, p->value); p2 = _asn1_copy_structure2 (root, name2); if (p2 == NULL) { return ASN1_IDENTIFIER_NOT_FOUND; } _asn1_cpy_name (p2, p); p2->right = p->right; p2->left = p->left; if (p->right) p->right->left = p2; p3 = p->down; if (p3) { while (p3->right) p3 = p3->right; _asn1_set_right (p3, p2->down); _asn1_set_down (p2, p->down); } p3 = _asn1_find_left (p); if (p3) _asn1_set_right (p3, p2); else { p3 = _asn1_find_up (p); if (p3) _asn1_set_down (p3, p2); else { p2->left = NULL; } } if (p->type & CONST_SIZE) p2->type |= CONST_SIZE; if (p->type & CONST_TAG) p2->type |= CONST_TAG; if (p->type & CONST_OPTION) p2->type |= CONST_OPTION; if (p->type & CONST_DEFAULT) p2->type |= CONST_DEFAULT; if (p->type & CONST_SET) p2->type |= CONST_SET; if (p->type & CONST_NOT_USED) p2->type |= CONST_NOT_USED; if (p == *node) *node = p2; _asn1_remove_node (p, 0); p = p2; move = DOWN; continue; } move = DOWN; } else move = RIGHT; if (move == DOWN) { if (p->down) p = p->down; else move = RIGHT; } if (p == *node) { move = UP; continue; } if (move == RIGHT) { if (p->right) p = p->right; else move = UP; } if (move == UP) p = _asn1_find_up (p); } return ASN1_SUCCESS; } /** * asn1_create_element: * @definitions: pointer to the structure returned by "parser_asn1" function * @source_name: the name of the type of the new structure (must be * inside p_structure). * @element: pointer to the structure created. * * Creates a structure of type @source_name. Example using * "pkix.asn": * * rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); * * Returns: %ASN1_SUCCESS if creation OK, %ASN1_ELEMENT_NOT_FOUND if * @source_name is not known. **/ int asn1_create_element (asn1_node_const definitions, const char *source_name, asn1_node * element) { asn1_node dest_node; int res; dest_node = _asn1_copy_structure2 (definitions, source_name); if (dest_node == NULL) return ASN1_ELEMENT_NOT_FOUND; _asn1_set_name (dest_node, ""); res = _asn1_expand_identifier (&dest_node, definitions); _asn1_type_choice_config (dest_node); *element = dest_node; return res; } /** * asn1_print_structure: * @out: pointer to the output file (e.g. stdout). * @structure: pointer to the structure that you want to visit. * @name: an element of the structure * @mode: specify how much of the structure to print, can be * %ASN1_PRINT_NAME, %ASN1_PRINT_NAME_TYPE, * %ASN1_PRINT_NAME_TYPE_VALUE, or %ASN1_PRINT_ALL. * * Prints on the @out file descriptor the structure's tree starting * from the @name element inside the structure @structure. **/ void asn1_print_structure (FILE * out, asn1_node_const structure, const char *name, int mode) { asn1_node_const p, root; int k, indent = 0, len, len2, len3; if (out == NULL) return; root = asn1_find_node (structure, name); if (root == NULL) return; p = root; while (p) { if (mode == ASN1_PRINT_ALL) { for (k = 0; k < indent; k++) fprintf (out, " "); fprintf (out, "name:"); if (p->name[0] != 0) fprintf (out, "%s ", p->name); else fprintf (out, "NULL "); } else { switch (type_field (p->type)) { case ASN1_ETYPE_CONSTANT: case ASN1_ETYPE_TAG: case ASN1_ETYPE_SIZE: break; default: for (k = 0; k < indent; k++) fprintf (out, " "); fprintf (out, "name:"); if (p->name[0] != 0) fprintf (out, "%s ", p->name); else fprintf (out, "NULL "); } } if (mode != ASN1_PRINT_NAME) { unsigned type = type_field (p->type); switch (type) { case ASN1_ETYPE_CONSTANT: if (mode == ASN1_PRINT_ALL) fprintf (out, "type:CONST"); break; case ASN1_ETYPE_TAG: if (mode == ASN1_PRINT_ALL) fprintf (out, "type:TAG"); break; case ASN1_ETYPE_SIZE: if (mode == ASN1_PRINT_ALL) fprintf (out, "type:SIZE"); break; case ASN1_ETYPE_DEFAULT: fprintf (out, "type:DEFAULT"); break; case ASN1_ETYPE_IDENTIFIER: fprintf (out, "type:IDENTIFIER"); break; case ASN1_ETYPE_ANY: fprintf (out, "type:ANY"); break; case ASN1_ETYPE_CHOICE: fprintf (out, "type:CHOICE"); break; case ASN1_ETYPE_DEFINITIONS: fprintf (out, "type:DEFINITIONS"); break; CASE_HANDLED_ETYPES: fprintf (out, "%s", _asn1_tags[type].desc); break; default: break; } } if ((mode == ASN1_PRINT_NAME_TYPE_VALUE) || (mode == ASN1_PRINT_ALL)) { switch (type_field (p->type)) { case ASN1_ETYPE_CONSTANT: if (mode == ASN1_PRINT_ALL) if (p->value) fprintf (out, " value:%s", p->value); break; case ASN1_ETYPE_TAG: if (mode == ASN1_PRINT_ALL) if (p->value) fprintf (out, " value:%s", p->value); break; case ASN1_ETYPE_SIZE: if (mode == ASN1_PRINT_ALL) if (p->value) fprintf (out, " value:%s", p->value); break; case ASN1_ETYPE_DEFAULT: if (p->value) fprintf (out, " value:%s", p->value); else if (p->type & CONST_TRUE) fprintf (out, " value:TRUE"); else if (p->type & CONST_FALSE) fprintf (out, " value:FALSE"); break; case ASN1_ETYPE_IDENTIFIER: if (p->value) fprintf (out, " value:%s", p->value); break; case ASN1_ETYPE_INTEGER: if (p->value) { len2 = -1; len = asn1_get_length_der (p->value, p->value_len, &len2); fprintf (out, " value:0x"); if (len > 0) for (k = 0; k < len; k++) fprintf (out, "%02x", (unsigned) (p->value)[k + len2]); } break; case ASN1_ETYPE_ENUMERATED: if (p->value) { len2 = -1; len = asn1_get_length_der (p->value, p->value_len, &len2); fprintf (out, " value:0x"); if (len > 0) for (k = 0; k < len; k++) fprintf (out, "%02x", (unsigned) (p->value)[k + len2]); } break; case ASN1_ETYPE_BOOLEAN: if (p->value) { if (p->value[0] == 'T') fprintf (out, " value:TRUE"); else if (p->value[0] == 'F') fprintf (out, " value:FALSE"); } break; case ASN1_ETYPE_BIT_STRING: if (p->value) { len2 = -1; len = asn1_get_length_der (p->value, p->value_len, &len2); if (len > 0) { fprintf (out, " value(%i):", (len - 1) * 8 - (p->value[len2])); for (k = 1; k < len; k++) fprintf (out, "%02x", (unsigned) (p->value)[k + len2]); } } break; case ASN1_ETYPE_GENERALIZED_TIME: case ASN1_ETYPE_UTC_TIME: if (p->value) { fprintf (out, " value:"); for (k = 0; k < p->value_len; k++) fprintf (out, "%c", (p->value)[k]); } break; case ASN1_ETYPE_GENERALSTRING: case ASN1_ETYPE_NUMERIC_STRING: case ASN1_ETYPE_IA5_STRING: case ASN1_ETYPE_TELETEX_STRING: case ASN1_ETYPE_PRINTABLE_STRING: case ASN1_ETYPE_UNIVERSAL_STRING: case ASN1_ETYPE_UTF8_STRING: case ASN1_ETYPE_VISIBLE_STRING: if (p->value) { len2 = -1; len = asn1_get_length_der (p->value, p->value_len, &len2); fprintf (out, " value:"); if (len > 0) for (k = 0; k < len; k++) fprintf (out, "%c", (p->value)[k + len2]); } break; case ASN1_ETYPE_BMP_STRING: case ASN1_ETYPE_OCTET_STRING: if (p->value) { len2 = -1; len = asn1_get_length_der (p->value, p->value_len, &len2); fprintf (out, " value:"); if (len > 0) for (k = 0; k < len; k++) fprintf (out, "%02x", (unsigned) (p->value)[k + len2]); } break; case ASN1_ETYPE_OBJECT_ID: if (p->value) fprintf (out, " value:%s", p->value); break; case ASN1_ETYPE_ANY: if (p->value) { len3 = -1; len2 = asn1_get_length_der (p->value, p->value_len, &len3); fprintf (out, " value:"); if (len2 > 0) for (k = 0; k < len2; k++) fprintf (out, "%02x", (unsigned) (p->value)[k + len3]); } break; case ASN1_ETYPE_SET: case ASN1_ETYPE_SET_OF: case ASN1_ETYPE_CHOICE: case ASN1_ETYPE_DEFINITIONS: case ASN1_ETYPE_SEQUENCE_OF: case ASN1_ETYPE_SEQUENCE: case ASN1_ETYPE_NULL: break; default: break; } } if (mode == ASN1_PRINT_ALL) { if (p->type & 0x1FFFFF00) { fprintf (out, " attr:"); if (p->type & CONST_UNIVERSAL) fprintf (out, "UNIVERSAL,"); if (p->type & CONST_PRIVATE) fprintf (out, "PRIVATE,"); if (p->type & CONST_APPLICATION) fprintf (out, "APPLICATION,"); if (p->type & CONST_EXPLICIT) fprintf (out, "EXPLICIT,"); if (p->type & CONST_IMPLICIT) fprintf (out, "IMPLICIT,"); if (p->type & CONST_TAG) fprintf (out, "TAG,"); if (p->type & CONST_DEFAULT) fprintf (out, "DEFAULT,"); if (p->type & CONST_TRUE) fprintf (out, "TRUE,"); if (p->type & CONST_FALSE) fprintf (out, "FALSE,"); if (p->type & CONST_LIST) fprintf (out, "LIST,"); if (p->type & CONST_MIN_MAX) fprintf (out, "MIN_MAX,"); if (p->type & CONST_OPTION) fprintf (out, "OPTION,"); if (p->type & CONST_1_PARAM) fprintf (out, "1_PARAM,"); if (p->type & CONST_SIZE) fprintf (out, "SIZE,"); if (p->type & CONST_DEFINED_BY) fprintf (out, "DEF_BY,"); if (p->type & CONST_GENERALIZED) fprintf (out, "GENERALIZED,"); if (p->type & CONST_UTC) fprintf (out, "UTC,"); if (p->type & CONST_SET) fprintf (out, "SET,"); if (p->type & CONST_NOT_USED) fprintf (out, "NOT_USED,"); if (p->type & CONST_ASSIGN) fprintf (out, "ASSIGNMENT,"); } } if (mode == ASN1_PRINT_ALL) { fprintf (out, "\n"); } else { switch (type_field (p->type)) { case ASN1_ETYPE_CONSTANT: case ASN1_ETYPE_TAG: case ASN1_ETYPE_SIZE: break; default: fprintf (out, "\n"); } } if (p->down) { p = p->down; indent += 2; } else if (p == root) { p = NULL; break; } else if (p->right) p = p->right; else { while (1) { p = _asn1_find_up (p); if (p == root) { p = NULL; break; } indent -= 2; if (p->right) { p = p->right; break; } } } } } /** * asn1_number_of_elements: * @element: pointer to the root of an ASN1 structure. * @name: the name of a sub-structure of ROOT. * @num: pointer to an integer where the result will be stored * * Counts the number of elements of a sub-structure called NAME with * names equal to "?1","?2", ... * * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if * @name is not known, %ASN1_GENERIC_ERROR if pointer @num is %NULL. **/ int asn1_number_of_elements (asn1_node_const element, const char *name, int *num) { asn1_node_const node, p; if (num == NULL) return ASN1_GENERIC_ERROR; *num = 0; node = asn1_find_node (element, name); if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; p = node->down; while (p) { if (p->name[0] == '?') (*num)++; p = p->right; } return ASN1_SUCCESS; } /** * asn1_find_structure_from_oid: * @definitions: ASN1 definitions * @oidValue: value of the OID to search (e.g. "1.2.3.4"). * * Search the structure that is defined just after an OID definition. * * Returns: %NULL when @oidValue not found, otherwise the pointer to a * constant string that contains the element name defined just after * the OID. **/ const char * asn1_find_structure_from_oid (asn1_node_const definitions, const char *oidValue) { char name[2 * ASN1_MAX_NAME_SIZE + 2]; char value[ASN1_MAX_NAME_SIZE]; asn1_node p; int len; int result; const char *definitionsName; if ((definitions == NULL) || (oidValue == NULL)) return NULL; /* ASN1_ELEMENT_NOT_FOUND; */ definitionsName = definitions->name; /* search the OBJECT_ID into definitions */ p = definitions->down; while (p) { if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) && (p->type & CONST_ASSIGN)) { snprintf(name, sizeof(name), "%s.%s", definitionsName, p->name); len = ASN1_MAX_NAME_SIZE; result = asn1_read_value (definitions, name, value, &len); if ((result == ASN1_SUCCESS) && (!strcmp (oidValue, value))) { p = p->right; if (p == NULL) /* reach the end of ASN1 definitions */ return NULL; /* ASN1_ELEMENT_NOT_FOUND; */ return p->name; } } p = p->right; } return NULL; /* ASN1_ELEMENT_NOT_FOUND; */ } /** * asn1_copy_node: * @dst: Destination asn1 node. * @dst_name: Field name in destination node. * @src: Source asn1 node. * @src_name: Field name in source node. * * Create a deep copy of a asn1_node variable. That * function requires @dst to be expanded using asn1_create_element(). * * Returns: Return %ASN1_SUCCESS on success. **/ int asn1_copy_node (asn1_node dst, const char *dst_name, asn1_node_const src, const char *src_name) { int result; asn1_node dst_node; void *data = NULL; int size = 0; result = asn1_der_coding (src, src_name, NULL, &size, NULL); if (result != ASN1_MEM_ERROR) return result; data = malloc (size); if (data == NULL) return ASN1_MEM_ERROR; result = asn1_der_coding (src, src_name, data, &size, NULL); if (result != ASN1_SUCCESS) { free (data); return result; } dst_node = asn1_find_node (dst, dst_name); if (dst_node == NULL) { free (data); return ASN1_ELEMENT_NOT_FOUND; } result = asn1_der_decoding (&dst_node, data, size, NULL); free (data); return result; } /** * asn1_dup_node: * @src: Source asn1 node. * @src_name: Field name in source node. * * Create a deep copy of a asn1_node variable. This function * will return an exact copy of the provided structure. * * Returns: Return %NULL on failure. **/ asn1_node asn1_dup_node (asn1_node_const src, const char *src_name) { return _asn1_copy_structure2(src, src_name); } libtasn1-4.16.0/lib/structure.h0000644000000000000000000000305213520774070013172 00000000000000/* * Copyright (C) 2002-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ /*************************************************/ /* File: structure.h */ /* Description: list of exported object by */ /* "structure.c" */ /*************************************************/ #ifndef _STRUCTURE_H #define _STRUCTURE_H #include "parser_aux.h" // list_type int _asn1_create_static_structure (asn1_node_const pointer, char *output_file_name, char *vector_name); asn1_node _asn1_copy_structure3 (asn1_node_const source_node); asn1_node _asn1_add_single_node (unsigned int type); asn1_node _asn1_find_left (asn1_node_const node); int _asn1_delete_structure (list_type *e_list, asn1_node *structure, unsigned int flags); #endif libtasn1-4.16.0/lib/element.c0000644000000000000000000007522213603737041012565 00000000000000/* * Copyright (C) 2000-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ /*****************************************************/ /* File: element.c */ /* Description: Functions with the read and write */ /* functions. */ /*****************************************************/ #include #include "parser_aux.h" #include #include "structure.h" #include "c-ctype.h" #include "element.h" void _asn1_hierarchical_name (asn1_node_const node, char *name, int name_size) { asn1_node_const p; char tmp_name[64]; p = node; name[0] = 0; while (p != NULL) { if (p->name[0] != 0) { _asn1_str_cpy (tmp_name, sizeof (tmp_name), name), _asn1_str_cpy (name, name_size, p->name); _asn1_str_cat (name, name_size, "."); _asn1_str_cat (name, name_size, tmp_name); } p = _asn1_find_up (p); } if (name[0] == 0) _asn1_str_cpy (name, name_size, "ROOT"); } /******************************************************************/ /* Function : _asn1_convert_integer */ /* Description: converts an integer from a null terminated string */ /* to der decoding. The convertion from a null */ /* terminated string to an integer is made with */ /* the 'strtol' function. */ /* Parameters: */ /* value: null terminated string to convert. */ /* value_out: convertion result (memory must be already */ /* allocated). */ /* value_out_size: number of bytes of value_out. */ /* len: number of significant byte of value_out. */ /* Return: ASN1_MEM_ERROR or ASN1_SUCCESS */ /******************************************************************/ int _asn1_convert_integer (const unsigned char *value, unsigned char *value_out, int value_out_size, int *len) { char negative; unsigned char val[SIZEOF_UNSIGNED_LONG_INT]; long valtmp; int k, k2; valtmp = _asn1_strtol (value, NULL, 10); for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++) { val[SIZEOF_UNSIGNED_LONG_INT - k - 1] = (valtmp >> (8 * k)) & 0xFF; } if (val[0] & 0x80) negative = 1; else negative = 0; for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT - 1; k++) { if (negative && (val[k] != 0xFF)) break; else if (!negative && val[k]) break; } if ((negative && !(val[k] & 0x80)) || (!negative && (val[k] & 0x80))) k--; *len = SIZEOF_UNSIGNED_LONG_INT - k; if (SIZEOF_UNSIGNED_LONG_INT - k > value_out_size) /* VALUE_OUT is too short to contain the value conversion */ return ASN1_MEM_ERROR; if (value_out != NULL) { for (k2 = k; k2 < SIZEOF_UNSIGNED_LONG_INT; k2++) value_out[k2 - k] = val[k2]; } #if 0 printf ("_asn1_convert_integer: valueIn=%s, lenOut=%d", value, *len); for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++) printf (", vOut[%d]=%d", k, value_out[k]); printf ("\n"); #endif return ASN1_SUCCESS; } /* Appends a new element into the sequence (or set) defined by this * node. The new element will have a name of '?number', where number * is a monotonically increased serial number. * * The last element in the list may be provided in @pcache, to avoid * traversing the list, an expensive operation in long lists. * * On success it returns in @pcache the added element (which is the * tail in the list of added elements). */ int _asn1_append_sequence_set (asn1_node node, struct node_tail_cache_st *pcache) { asn1_node p, p2; char temp[LTOSTR_MAX_SIZE]; long n; if (!node || !(node->down)) return ASN1_GENERIC_ERROR; p = node->down; while ((type_field (p->type) == ASN1_ETYPE_TAG) || (type_field (p->type) == ASN1_ETYPE_SIZE)) p = p->right; p2 = _asn1_copy_structure3 (p); if (p2 == NULL) return ASN1_GENERIC_ERROR; if (pcache == NULL || pcache->tail == NULL || pcache->head != node) { while (p->right) { p = p->right; } } else { p = pcache->tail; } _asn1_set_right (p, p2); if (pcache) { pcache->head = node; pcache->tail = p2; } if (p->name[0] == 0) _asn1_str_cpy (temp, sizeof (temp), "?1"); else { n = strtol (p->name + 1, NULL, 0); n++; temp[0] = '?'; _asn1_ltostr (n, temp + 1); } _asn1_set_name (p2, temp); /* p2->type |= CONST_OPTION; */ return ASN1_SUCCESS; } /** * asn1_write_value: * @node_root: pointer to a structure * @name: the name of the element inside the structure that you want to set. * @ivalue: vector used to specify the value to set. If len is >0, * VALUE must be a two's complement form integer. if len=0 *VALUE * must be a null terminated string with an integer value. * @len: number of bytes of *value to use to set the value: * value[0]..value[len-1] or 0 if value is a null terminated string * * Set the value of one element inside a structure. * * If an element is OPTIONAL and you want to delete it, you must use * the value=NULL and len=0. Using "pkix.asn": * * result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", * NULL, 0); * * Description for each type: * * INTEGER: VALUE must contain a two's complement form integer. * * value[0]=0xFF , len=1 -> integer=-1. * value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1. * value[0]=0x01 , len=1 -> integer= 1. * value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. * value="123" , len=0 -> integer= 123. * * ENUMERATED: As INTEGER (but only with not negative numbers). * * BOOLEAN: VALUE must be the null terminated string "TRUE" or * "FALSE" and LEN != 0. * * value="TRUE" , len=1 -> boolean=TRUE. * value="FALSE" , len=1 -> boolean=FALSE. * * OBJECT IDENTIFIER: VALUE must be a null terminated string with * each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. * * value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha. * * UTCTime: VALUE must be a null terminated string in one of these * formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", * "YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss-hh'mm'", * "YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm-hh'mm'". LEN != 0. * * value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 * at 12h 00m Greenwich Mean Time * * GeneralizedTime: VALUE must be in one of this format: * "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", * "YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s-hh'mm'", * "YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm-hh'mm'" where ss.s * indicates the seconds with any precision like "10.1" or "01.02". * LEN != 0 * * value="2001010112001.12-0700" , len=1 -> time=Jannuary * 1st, 2001 at 12h 00m 01.12s Pacific Daylight Time * * OCTET STRING: VALUE contains the octet string and LEN is the * number of octets. * * value="$\backslash$x01$\backslash$x02$\backslash$x03" , * len=3 -> three bytes octet string * * GeneralString: VALUE contains the generalstring and LEN is the * number of octets. * * value="$\backslash$x01$\backslash$x02$\backslash$x03" , * len=3 -> three bytes generalstring * * BIT STRING: VALUE contains the bit string organized by bytes and * LEN is the number of bits. * * value="$\backslash$xCF" , len=6 -> bit string="110011" (six * bits) * * CHOICE: if NAME indicates a choice type, VALUE must specify one of * the alternatives with a null terminated string. LEN != 0. Using * "pkix.asn"\: * * result=asn1_write_value(cert, * "certificate1.tbsCertificate.subject", "rdnSequence", * 1); * * ANY: VALUE indicates the der encoding of a structure. LEN != 0. * * SEQUENCE OF: VALUE must be the null terminated string "NEW" and * LEN != 0. With this instruction another element is appended in * the sequence. The name of this element will be "?1" if it's the * first one, "?2" for the second and so on. * * Using "pkix.asn"\: * * result=asn1_write_value(cert, * "certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); * * SET OF: the same as SEQUENCE OF. Using "pkix.asn": * * result=asn1_write_value(cert, * "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); * * Returns: %ASN1_SUCCESS if the value was set, * %ASN1_ELEMENT_NOT_FOUND if @name is not a valid element, and * %ASN1_VALUE_NOT_VALID if @ivalue has a wrong format. **/ int asn1_write_value (asn1_node node_root, const char *name, const void *ivalue, int len) { asn1_node node, p, p2; unsigned char *temp, *value_temp = NULL, *default_temp = NULL; int len2, k, k2, negative; size_t i; const unsigned char *value = ivalue; unsigned int type; node = asn1_find_node (node_root, name); if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; if ((node->type & CONST_OPTION) && (value == NULL) && (len == 0)) { asn1_delete_structure (&node); return ASN1_SUCCESS; } type = type_field (node->type); if ((type == ASN1_ETYPE_SEQUENCE_OF || type == ASN1_ETYPE_SET_OF) && (value == NULL) && (len == 0)) { p = node->down; while ((type_field (p->type) == ASN1_ETYPE_TAG) || (type_field (p->type) == ASN1_ETYPE_SIZE)) p = p->right; while (p->right) asn1_delete_structure (&p->right); return ASN1_SUCCESS; } /* Don't allow element deletion for other types */ if (value == NULL) { return ASN1_VALUE_NOT_VALID; } switch (type) { case ASN1_ETYPE_BOOLEAN: if (!_asn1_strcmp (value, "TRUE")) { if (node->type & CONST_DEFAULT) { p = node->down; while (type_field (p->type) != ASN1_ETYPE_DEFAULT) p = p->right; if (p->type & CONST_TRUE) _asn1_set_value (node, NULL, 0); else _asn1_set_value (node, "T", 1); } else _asn1_set_value (node, "T", 1); } else if (!_asn1_strcmp (value, "FALSE")) { if (node->type & CONST_DEFAULT) { p = node->down; while (type_field (p->type) != ASN1_ETYPE_DEFAULT) p = p->right; if (p->type & CONST_FALSE) _asn1_set_value (node, NULL, 0); else _asn1_set_value (node, "F", 1); } else _asn1_set_value (node, "F", 1); } else return ASN1_VALUE_NOT_VALID; break; case ASN1_ETYPE_INTEGER: case ASN1_ETYPE_ENUMERATED: if (len == 0) { if ((c_isdigit (value[0])) || (value[0] == '-')) { value_temp = malloc (SIZEOF_UNSIGNED_LONG_INT); if (value_temp == NULL) return ASN1_MEM_ALLOC_ERROR; _asn1_convert_integer (value, value_temp, SIZEOF_UNSIGNED_LONG_INT, &len); } else { /* is an identifier like v1 */ if (!(node->type & CONST_LIST)) return ASN1_VALUE_NOT_VALID; p = node->down; while (p) { if (type_field (p->type) == ASN1_ETYPE_CONSTANT) { if (!_asn1_strcmp (p->name, value)) { value_temp = malloc (SIZEOF_UNSIGNED_LONG_INT); if (value_temp == NULL) return ASN1_MEM_ALLOC_ERROR; _asn1_convert_integer (p->value, value_temp, SIZEOF_UNSIGNED_LONG_INT, &len); break; } } p = p->right; } if (p == NULL) return ASN1_VALUE_NOT_VALID; } } else { /* len != 0 */ value_temp = malloc (len); if (value_temp == NULL) return ASN1_MEM_ALLOC_ERROR; memcpy (value_temp, value, len); } if (value_temp[0] & 0x80) negative = 1; else negative = 0; if (negative && (type_field (node->type) == ASN1_ETYPE_ENUMERATED)) { free (value_temp); return ASN1_VALUE_NOT_VALID; } for (k = 0; k < len - 1; k++) if (negative && (value_temp[k] != 0xFF)) break; else if (!negative && value_temp[k]) break; if ((negative && !(value_temp[k] & 0x80)) || (!negative && (value_temp[k] & 0x80))) k--; _asn1_set_value_lv (node, value_temp + k, len - k); if (node->type & CONST_DEFAULT) { p = node->down; while (type_field (p->type) != ASN1_ETYPE_DEFAULT) p = p->right; if ((c_isdigit (p->value[0])) || (p->value[0] == '-')) { default_temp = malloc (SIZEOF_UNSIGNED_LONG_INT); if (default_temp == NULL) { free (value_temp); return ASN1_MEM_ALLOC_ERROR; } _asn1_convert_integer (p->value, default_temp, SIZEOF_UNSIGNED_LONG_INT, &len2); } else { /* is an identifier like v1 */ if (!(node->type & CONST_LIST)) { free (value_temp); return ASN1_VALUE_NOT_VALID; } p2 = node->down; while (p2) { if (type_field (p2->type) == ASN1_ETYPE_CONSTANT) { if (!_asn1_strcmp (p2->name, p->value)) { default_temp = malloc (SIZEOF_UNSIGNED_LONG_INT); if (default_temp == NULL) { free (value_temp); return ASN1_MEM_ALLOC_ERROR; } _asn1_convert_integer (p2->value, default_temp, SIZEOF_UNSIGNED_LONG_INT, &len2); break; } } p2 = p2->right; } if (p2 == NULL) { free (value_temp); return ASN1_VALUE_NOT_VALID; } } if ((len - k) == len2) { for (k2 = 0; k2 < len2; k2++) if (value_temp[k + k2] != default_temp[k2]) { break; } if (k2 == len2) _asn1_set_value (node, NULL, 0); } free (default_temp); } free (value_temp); break; case ASN1_ETYPE_OBJECT_ID: for (i = 0; i < _asn1_strlen (value); i++) if ((!c_isdigit (value[i])) && (value[i] != '.') && (value[i] != '+')) return ASN1_VALUE_NOT_VALID; if (node->type & CONST_DEFAULT) { p = node->down; while (type_field (p->type) != ASN1_ETYPE_DEFAULT) p = p->right; if (!_asn1_strcmp (value, p->value)) { _asn1_set_value (node, NULL, 0); break; } } _asn1_set_value (node, value, _asn1_strlen (value) + 1); break; case ASN1_ETYPE_UTC_TIME: { len = _asn1_strlen (value); if (len < 11) return ASN1_VALUE_NOT_VALID; for (k = 0; k < 10; k++) if (!c_isdigit (value[k])) return ASN1_VALUE_NOT_VALID; switch (len) { case 11: if (value[10] != 'Z') return ASN1_VALUE_NOT_VALID; break; case 13: if ((!c_isdigit (value[10])) || (!c_isdigit (value[11])) || (value[12] != 'Z')) return ASN1_VALUE_NOT_VALID; break; case 15: if ((value[10] != '+') && (value[10] != '-')) return ASN1_VALUE_NOT_VALID; for (k = 11; k < 15; k++) if (!c_isdigit (value[k])) return ASN1_VALUE_NOT_VALID; break; case 17: if ((!c_isdigit (value[10])) || (!c_isdigit (value[11]))) return ASN1_VALUE_NOT_VALID; if ((value[12] != '+') && (value[12] != '-')) return ASN1_VALUE_NOT_VALID; for (k = 13; k < 17; k++) if (!c_isdigit (value[k])) return ASN1_VALUE_NOT_VALID; break; default: return ASN1_VALUE_NOT_FOUND; } _asn1_set_value (node, value, len); } break; case ASN1_ETYPE_GENERALIZED_TIME: len = _asn1_strlen (value); _asn1_set_value (node, value, len); break; case ASN1_ETYPE_OCTET_STRING: case ASN1_ETYPE_GENERALSTRING: case ASN1_ETYPE_NUMERIC_STRING: case ASN1_ETYPE_IA5_STRING: case ASN1_ETYPE_TELETEX_STRING: case ASN1_ETYPE_PRINTABLE_STRING: case ASN1_ETYPE_UNIVERSAL_STRING: case ASN1_ETYPE_BMP_STRING: case ASN1_ETYPE_UTF8_STRING: case ASN1_ETYPE_VISIBLE_STRING: if (len == 0) len = _asn1_strlen (value); _asn1_set_value_lv (node, value, len); break; case ASN1_ETYPE_BIT_STRING: if (len == 0) len = _asn1_strlen (value); asn1_length_der ((len >> 3) + 2, NULL, &len2); temp = malloc ((len >> 3) + 2 + len2); if (temp == NULL) return ASN1_MEM_ALLOC_ERROR; asn1_bit_der (value, len, temp, &len2); _asn1_set_value_m (node, temp, len2); temp = NULL; break; case ASN1_ETYPE_CHOICE: p = node->down; while (p) { if (!_asn1_strcmp (p->name, value)) { p2 = node->down; while (p2) { if (p2 != p) { asn1_delete_structure (&p2); p2 = node->down; } else p2 = p2->right; } break; } p = p->right; } if (!p) return ASN1_ELEMENT_NOT_FOUND; break; case ASN1_ETYPE_ANY: _asn1_set_value_lv (node, value, len); break; case ASN1_ETYPE_SEQUENCE_OF: case ASN1_ETYPE_SET_OF: if (_asn1_strcmp (value, "NEW")) return ASN1_VALUE_NOT_VALID; _asn1_append_sequence_set (node, NULL); break; default: return ASN1_ELEMENT_NOT_FOUND; break; } return ASN1_SUCCESS; } #define PUT_VALUE( ptr, ptr_size, data, data_size) \ *len = data_size; \ if (ptr_size < data_size) { \ return ASN1_MEM_ERROR; \ } else { \ if (ptr && data_size > 0) \ memcpy (ptr, data, data_size); \ } #define PUT_STR_VALUE( ptr, ptr_size, data) \ *len = _asn1_strlen (data) + 1; \ if (ptr_size < *len) { \ return ASN1_MEM_ERROR; \ } else { \ /* this strcpy is checked */ \ if (ptr) { \ _asn1_strcpy (ptr, data); \ } \ } #define PUT_AS_STR_VALUE( ptr, ptr_size, data, data_size) \ *len = data_size + 1; \ if (ptr_size < *len) { \ return ASN1_MEM_ERROR; \ } else { \ /* this strcpy is checked */ \ if (ptr) { \ if (data_size > 0) \ memcpy (ptr, data, data_size); \ ptr[data_size] = 0; \ } \ } #define ADD_STR_VALUE( ptr, ptr_size, data) \ *len += _asn1_strlen(data); \ if (ptr_size < (int) *len) { \ (*len)++; \ return ASN1_MEM_ERROR; \ } else { \ /* this strcat is checked */ \ if (ptr) _asn1_strcat (ptr, data); \ } /** * asn1_read_value: * @root: pointer to a structure. * @name: the name of the element inside a structure that you want to read. * @ivalue: vector that will contain the element's content, must be a * pointer to memory cells already allocated (may be %NULL). * @len: number of bytes of *value: value[0]..value[len-1]. Initialy * holds the sizeof value. * * Returns the value of one element inside a structure. * If an element is OPTIONAL and this returns * %ASN1_ELEMENT_NOT_FOUND, it means that this element wasn't present * in the der encoding that created the structure. The first element * of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and * so on. If the @root provided is a node to specific sequence element, * then the keyword "?CURRENT" is also acceptable and indicates the * current sequence element of this node. * * Note that there can be valid values with length zero. In these case * this function will succeed and @len will be zero. * * INTEGER: VALUE will contain a two's complement form integer. * * integer=-1 -> value[0]=0xFF , len=1. * integer=1 -> value[0]=0x01 , len=1. * * ENUMERATED: As INTEGER (but only with not negative numbers). * * BOOLEAN: VALUE will be the null terminated string "TRUE" or * "FALSE" and LEN=5 or LEN=6. * * OBJECT IDENTIFIER: VALUE will be a null terminated string with * each number separated by a dot (i.e. "1.2.3.543.1"). * * LEN = strlen(VALUE)+1 * * UTCTime: VALUE will be a null terminated string in one of these * formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". * LEN=strlen(VALUE)+1. * * GeneralizedTime: VALUE will be a null terminated string in the * same format used to set the value. * * OCTET STRING: VALUE will contain the octet string and LEN will be * the number of octets. * * GeneralString: VALUE will contain the generalstring and LEN will * be the number of octets. * * BIT STRING: VALUE will contain the bit string organized by bytes * and LEN will be the number of bits. * * CHOICE: If NAME indicates a choice type, VALUE will specify the * alternative selected. * * ANY: If NAME indicates an any type, VALUE will indicate the DER * encoding of the structure actually used. * * Returns: %ASN1_SUCCESS if value is returned, * %ASN1_ELEMENT_NOT_FOUND if @name is not a valid element, * %ASN1_VALUE_NOT_FOUND if there isn't any value for the element * selected, and %ASN1_MEM_ERROR if The value vector isn't big enough * to store the result, and in this case @len will contain the number of * bytes needed. On the occasion that the stored data are of zero-length * this function may return %ASN1_SUCCESS even if the provided @len is zero. **/ int asn1_read_value (asn1_node_const root, const char *name, void *ivalue, int *len) { return asn1_read_value_type (root, name, ivalue, len, NULL); } /** * asn1_read_value_type: * @root: pointer to a structure. * @name: the name of the element inside a structure that you want to read. * @ivalue: vector that will contain the element's content, must be a * pointer to memory cells already allocated (may be %NULL). * @len: number of bytes of *value: value[0]..value[len-1]. Initialy * holds the sizeof value. * @etype: The type of the value read (ASN1_ETYPE) * * Returns the type and value of one element inside a structure. * If an element is OPTIONAL and this returns * %ASN1_ELEMENT_NOT_FOUND, it means that this element wasn't present * in the der encoding that created the structure. The first element * of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and * so on. If the @root provided is a node to specific sequence element, * then the keyword "?CURRENT" is also acceptable and indicates the * current sequence element of this node. * * Note that there can be valid values with length zero. In these case * this function will succeed and @len will be zero. * * * INTEGER: VALUE will contain a two's complement form integer. * * integer=-1 -> value[0]=0xFF , len=1. * integer=1 -> value[0]=0x01 , len=1. * * ENUMERATED: As INTEGER (but only with not negative numbers). * * BOOLEAN: VALUE will be the null terminated string "TRUE" or * "FALSE" and LEN=5 or LEN=6. * * OBJECT IDENTIFIER: VALUE will be a null terminated string with * each number separated by a dot (i.e. "1.2.3.543.1"). * * LEN = strlen(VALUE)+1 * * UTCTime: VALUE will be a null terminated string in one of these * formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". * LEN=strlen(VALUE)+1. * * GeneralizedTime: VALUE will be a null terminated string in the * same format used to set the value. * * OCTET STRING: VALUE will contain the octet string and LEN will be * the number of octets. * * GeneralString: VALUE will contain the generalstring and LEN will * be the number of octets. * * BIT STRING: VALUE will contain the bit string organized by bytes * and LEN will be the number of bits. * * CHOICE: If NAME indicates a choice type, VALUE will specify the * alternative selected. * * ANY: If NAME indicates an any type, VALUE will indicate the DER * encoding of the structure actually used. * * Returns: %ASN1_SUCCESS if value is returned, * %ASN1_ELEMENT_NOT_FOUND if @name is not a valid element, * %ASN1_VALUE_NOT_FOUND if there isn't any value for the element * selected, and %ASN1_MEM_ERROR if The value vector isn't big enough * to store the result, and in this case @len will contain the number of * bytes needed. On the occasion that the stored data are of zero-length * this function may return %ASN1_SUCCESS even if the provided @len is zero. **/ int asn1_read_value_type (asn1_node_const root, const char *name, void *ivalue, int *len, unsigned int *etype) { asn1_node_const node, p, p2; int len2, len3, result; int value_size = *len; unsigned char *value = ivalue; unsigned type; node = asn1_find_node (root, name); if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; type = type_field (node->type); if ((type != ASN1_ETYPE_NULL) && (type != ASN1_ETYPE_CHOICE) && !(node->type & CONST_DEFAULT) && !(node->type & CONST_ASSIGN) && (node->value == NULL)) return ASN1_VALUE_NOT_FOUND; if (etype) *etype = type; switch (type) { case ASN1_ETYPE_NULL: PUT_STR_VALUE (value, value_size, "NULL"); break; case ASN1_ETYPE_BOOLEAN: if ((node->type & CONST_DEFAULT) && (node->value == NULL)) { p = node->down; while (type_field (p->type) != ASN1_ETYPE_DEFAULT) p = p->right; if (p->type & CONST_TRUE) { PUT_STR_VALUE (value, value_size, "TRUE"); } else { PUT_STR_VALUE (value, value_size, "FALSE"); } } else if (node->value[0] == 'T') { PUT_STR_VALUE (value, value_size, "TRUE"); } else { PUT_STR_VALUE (value, value_size, "FALSE"); } break; case ASN1_ETYPE_INTEGER: case ASN1_ETYPE_ENUMERATED: if ((node->type & CONST_DEFAULT) && (node->value == NULL)) { p = node->down; while (type_field (p->type) != ASN1_ETYPE_DEFAULT) p = p->right; if ((c_isdigit (p->value[0])) || (p->value[0] == '-') || (p->value[0] == '+')) { result = _asn1_convert_integer (p->value, value, value_size, len); if (result != ASN1_SUCCESS) return result; } else { /* is an identifier like v1 */ p2 = node->down; while (p2) { if (type_field (p2->type) == ASN1_ETYPE_CONSTANT) { if (!_asn1_strcmp (p2->name, p->value)) { result = _asn1_convert_integer (p2->value, value, value_size, len); if (result != ASN1_SUCCESS) return result; break; } } p2 = p2->right; } } } else { len2 = -1; result = asn1_get_octet_der (node->value, node->value_len, &len2, value, value_size, len); if (result != ASN1_SUCCESS) return result; } break; case ASN1_ETYPE_OBJECT_ID: if (node->type & CONST_ASSIGN) { *len = 0; if (value) value[0] = 0; p = node->down; while (p) { if (type_field (p->type) == ASN1_ETYPE_CONSTANT) { ADD_STR_VALUE (value, value_size, p->value); if (p->right) { ADD_STR_VALUE (value, value_size, "."); } } p = p->right; } (*len)++; } else if ((node->type & CONST_DEFAULT) && (node->value == NULL)) { p = node->down; while (type_field (p->type) != ASN1_ETYPE_DEFAULT) p = p->right; PUT_STR_VALUE (value, value_size, p->value); } else { PUT_STR_VALUE (value, value_size, node->value); } break; case ASN1_ETYPE_GENERALIZED_TIME: case ASN1_ETYPE_UTC_TIME: PUT_AS_STR_VALUE (value, value_size, node->value, node->value_len); break; case ASN1_ETYPE_OCTET_STRING: case ASN1_ETYPE_GENERALSTRING: case ASN1_ETYPE_NUMERIC_STRING: case ASN1_ETYPE_IA5_STRING: case ASN1_ETYPE_TELETEX_STRING: case ASN1_ETYPE_PRINTABLE_STRING: case ASN1_ETYPE_UNIVERSAL_STRING: case ASN1_ETYPE_BMP_STRING: case ASN1_ETYPE_UTF8_STRING: case ASN1_ETYPE_VISIBLE_STRING: len2 = -1; result = asn1_get_octet_der (node->value, node->value_len, &len2, value, value_size, len); if (result != ASN1_SUCCESS) return result; break; case ASN1_ETYPE_BIT_STRING: len2 = -1; result = asn1_get_bit_der (node->value, node->value_len, &len2, value, value_size, len); if (result != ASN1_SUCCESS) return result; break; case ASN1_ETYPE_CHOICE: PUT_STR_VALUE (value, value_size, node->down->name); break; case ASN1_ETYPE_ANY: len3 = -1; len2 = asn1_get_length_der (node->value, node->value_len, &len3); if (len2 < 0) return ASN1_DER_ERROR; PUT_VALUE (value, value_size, node->value + len3, len2); break; default: return ASN1_ELEMENT_NOT_FOUND; break; } return ASN1_SUCCESS; } /** * asn1_read_tag: * @root: pointer to a structure * @name: the name of the element inside a structure. * @tagValue: variable that will contain the TAG value. * @classValue: variable that will specify the TAG type. * * Returns the TAG and the CLASS of one element inside a structure. * CLASS can have one of these constants: %ASN1_CLASS_APPLICATION, * %ASN1_CLASS_UNIVERSAL, %ASN1_CLASS_PRIVATE or * %ASN1_CLASS_CONTEXT_SPECIFIC. * * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if * @name is not a valid element. **/ int asn1_read_tag (asn1_node_const root, const char *name, int *tagValue, int *classValue) { asn1_node node, p, pTag; node = asn1_find_node (root, name); if (node == NULL) return ASN1_ELEMENT_NOT_FOUND; p = node->down; /* pTag will points to the IMPLICIT TAG */ pTag = NULL; if (node->type & CONST_TAG) { while (p) { if (type_field (p->type) == ASN1_ETYPE_TAG) { if ((p->type & CONST_IMPLICIT) && (pTag == NULL)) pTag = p; else if (p->type & CONST_EXPLICIT) pTag = NULL; } p = p->right; } } if (pTag) { *tagValue = _asn1_strtoul (pTag->value, NULL, 10); if (pTag->type & CONST_APPLICATION) *classValue = ASN1_CLASS_APPLICATION; else if (pTag->type & CONST_UNIVERSAL) *classValue = ASN1_CLASS_UNIVERSAL; else if (pTag->type & CONST_PRIVATE) *classValue = ASN1_CLASS_PRIVATE; else *classValue = ASN1_CLASS_CONTEXT_SPECIFIC; } else { unsigned type = type_field (node->type); *classValue = ASN1_CLASS_UNIVERSAL; switch (type) { CASE_HANDLED_ETYPES: *tagValue = _asn1_tags[type].tag; break; case ASN1_ETYPE_TAG: case ASN1_ETYPE_CHOICE: case ASN1_ETYPE_ANY: *tagValue = -1; break; default: break; } } return ASN1_SUCCESS; } /** * asn1_read_node_value: * @node: pointer to a node. * @data: a point to a asn1_data_node_st * * Returns the value a data node inside a asn1_node structure. * The data returned should be handled as constant values. * * Returns: %ASN1_SUCCESS if the node exists. **/ int asn1_read_node_value (asn1_node_const node, asn1_data_node_st * data) { data->name = node->name; data->value = node->value; data->value_len = node->value_len; data->type = type_field (node->type); return ASN1_SUCCESS; } libtasn1-4.16.0/lib/gl/0000755000000000000000000000000013615400132011431 500000000000000libtasn1-4.16.0/lib/gl/strverscmp.c0000644000000000000000000000620113514402112013722 00000000000000/* Compare strings while treating digits characters numerically. Copyright (C) 1997-2019 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jean-François Bignolles , 1997. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #ifndef _LIBC # include # define __strverscmp strverscmp #endif #include #include #include /* states: S_N: normal, S_I: comparing integral part, S_F: comparing fractional parts, S_Z: idem but with leading Zeroes only */ #define S_N 0x0 #define S_I 0x3 #define S_F 0x6 #define S_Z 0x9 /* result_type: CMP: return diff; LEN: compare using len_diff/diff */ #define CMP 2 #define LEN 3 /* Compare S1 and S2 as strings holding indices/version numbers, returning less than, equal to or greater than zero if S1 is less than, equal to or greater than S2 (for more info, see the texinfo doc). */ int __strverscmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; /* Symbol(s) 0 [1-9] others Transition (10) 0 (01) d (00) x */ static const uint_least8_t next_state[] = { /* state x d 0 */ /* S_N */ S_N, S_I, S_Z, /* S_I */ S_N, S_I, S_I, /* S_F */ S_N, S_F, S_F, /* S_Z */ S_N, S_F, S_Z }; static const int_least8_t result_type[] = { /* state x/x x/d x/0 d/x d/d d/0 0/x 0/d 0/0 */ /* S_N */ CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, /* S_I */ CMP, -1, -1, +1, LEN, LEN, +1, LEN, LEN, /* S_F */ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, /* S_Z */ CMP, +1, +1, -1, CMP, CMP, -1, CMP, CMP }; if (p1 == p2) return 0; unsigned char c1 = *p1++; unsigned char c2 = *p2++; /* Hint: '0' is a digit too. */ int state = S_N + ((c1 == '0') + (isdigit (c1) != 0)); int diff; while ((diff = c1 - c2) == 0) { if (c1 == '\0') return diff; state = next_state[state]; c1 = *p1++; c2 = *p2++; state += (c1 == '0') + (isdigit (c1) != 0); } state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))]; switch (state) { case CMP: return diff; case LEN: while (isdigit (*p1++)) if (!isdigit (*p2++)) return 1; return isdigit (*p2) ? -1 : diff; default: return state; } } libc_hidden_def (__strverscmp) weak_alias (__strverscmp, strverscmp) libtasn1-4.16.0/lib/gl/intprops.h0000644000000000000000000005075413514402112013411 00000000000000/* intprops.h -- properties of integer types Copyright (C) 2001-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Written by Paul Eggert. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include /* Return a value with the common real type of E and V and the value of V. Do not evaluate E. */ #define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see . */ #define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if the real type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the real expression E, after promotion, has a signed or floating type. Do not evaluate E. */ #define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Do not evaluate T. Padding bits are not supported; this is checked at compile-time below. */ #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E is not evaluated. */ #define _GL_INT_MINIMUM(e) \ (EXPR_SIGNED (e) \ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (EXPR_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1) /* Work around OpenVMS incompatibility with C99. */ #if !defined LLONG_MAX && defined __INT64_MAX # define LLONG_MAX __INT64_MAX # define LLONG_MIN __INT64_MIN #endif /* This include file assumes that signed types are two's complement without padding bits; the above macros have undefined behavior otherwise. If this is a problem for you, please let us know how to fix it for your host. This assumption is tested by the intprops-tests module. */ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ #if (2 <= __GNUC__ \ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is signed, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT__RANGE_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They do not rely on undefined or implementation-defined behavior. Their implementations are simple and straightforward, but they are a bit harder to use than the INT__OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 \ ? (a) < - (max) \ : 0 < (a)) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see . */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* True if __builtin_add_overflow (A, B, P) works when P is non-null. */ #if 5 <= __GNUC__ && !defined __ICC # define _GL_HAS_BUILTIN_OVERFLOW 1 #else # define _GL_HAS_BUILTIN_OVERFLOW 0 #endif /* True if __builtin_add_overflow_p (A, B, C) works. */ #define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_ADD_OVERFLOW(a, b, min, max) \ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) #else # define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #endif #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Check for integer overflow, and report low order bits of answer. The INT__OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. The INT__WRAPV macros also store the low-order bits of the answer. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage, assuming A and B are long int: if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("result would overflow\n"); else printf ("result is %ld (no overflow)\n", a * b); Example usage with WRAPV flavor: long int result; bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); printf ("result is %ld (%s)\n", result, overflow ? "after overflow" : "no overflow"); Restrictions on these macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The WRAPV macros are not constant expressions. They support only +, binary -, and *. The result type must be signed. These macros are tuned for their last argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #if _GL_HAS_BUILTIN_OVERFLOW_P # define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) #else # define INT_NEGATE_OVERFLOW(a) \ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #endif #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. See above for restrictions. */ #define INT_ADD_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, INT_ADD_OVERFLOW) #define INT_SUBTRACT_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, INT_SUBTRACT_OVERFLOW) #define INT_MULTIPLY_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW) /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 https://llvm.org/bugs/show_bug.cgi?id=25390 For now, assume all versions of GCC-like compilers generate bogus warnings for _Generic. This matters only for older compilers that lack __builtin_add_overflow. */ #if __GNUC__ # define _GL__GENERIC_BOGUS 1 #else # define _GL__GENERIC_BOGUS 0 #endif /* Store the low-order bits of A B into *R, where OP specifies the operation. BUILTIN is the builtin operation, and OVERFLOW the overflow predicate. Return 1 if the result overflows. See above for restrictions. */ #if _GL_HAS_BUILTIN_OVERFLOW # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r) #elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ (_Generic \ (*(r), \ signed char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX), \ short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX), \ int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX), \ long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX), \ long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX))) #else # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ (sizeof *(r) == sizeof (signed char) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX) \ : sizeof *(r) == sizeof (short int) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX) \ : sizeof *(r) == sizeof (int) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX) \ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) # ifdef LLONG_MAX # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (long int) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX)) # else # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) # endif #endif /* Store the low-order bits of A B into *R, where the operation is given by OP. Use the unsigned type UT for calculation to avoid overflow problems. *R's type is T, with extrema TMIN and TMAX. T must be a signed integer type. Return 1 if the result overflows. */ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ (sizeof ((a) op (b)) < sizeof (t) \ ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \ : _GL_INT_OP_CALC1 (a, b, r, op, overflow, ut, t, tmin, tmax)) #define _GL_INT_OP_CALC1(a, b, r, op, overflow, ut, t, tmin, tmax) \ ((overflow (a, b) \ || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \ || (tmax) < ((a) op (b))) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) /* Return the low-order bits of A B, where the operation is given by OP. Use the unsigned type UT for calculation to avoid undefined behavior on signed integer overflow, and convert the result to type T. UT is at least as wide as T and is no narrower than unsigned int, T is two's complement, and there is no padding or trap representations. Assume that converting UT to T yields the low-order bits, as is done in all known two's-complement C compilers. E.g., see: https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html According to the C standard, converting UT to T yields an implementation-defined result or signal for values outside T's range. However, code that works around this theoretical problem runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html As the compiler bug is real, don't try to work around the theoretical problem. */ #define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ ((t) ((ut) (a) op (ut) (b))) #endif /* _GL_INTPROPS_H */ libtasn1-4.16.0/lib/gl/Makefile.am0000644000000000000000000004017113603737657013436 00000000000000## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2019 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file 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 file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=lib/gl/override \ # --lib=libgnu \ # --source-base=lib/gl \ # --m4-base=m4-gl \ # --doc-base=doc \ # --tests-base=tests-gl \ # --aux-dir=build-aux \ # --lgpl=2 \ # --no-conditional-dependencies \ # --libtool \ # --macro-prefix=gl \ # --no-vc-files \ # c-ctype \ # intprops \ # lib-symbol-versions \ # lib-symbol-visibility \ # maintainer-makefile \ # manywarnings \ # minmax \ # stdint \ # strverscmp \ # valgrind-tests AUTOMAKE_OPTIONS = 1.11 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = noinst_LTLIBRARIES += libgnu.la libgnu_la_SOURCES = libgnu_la_LIBADD = $(gl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) libgnu_la_LDFLAGS += -no-undefined ## begin gnulib module absolute-header # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header ## begin gnulib module c-ctype libgnu_la_SOURCES += c-ctype.h c-ctype.c ## end gnulib module c-ctype ## begin gnulib module gnumakefile EXTRA_DIST += $(top_srcdir)/GNUmakefile distclean-local: clean-GNUmakefile clean-GNUmakefile: test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile ## end gnulib module gnumakefile ## begin gnulib module intprops EXTRA_DIST += intprops.h ## end gnulib module intprops ## begin gnulib module lib-symbol-visibility # The value of $(CFLAG_VISIBILITY) needs to be added to the CFLAGS for the # compilation of all sources that make up the library. This line here does it # only for the gnulib part of it. The developer is responsible for adding # $(CFLAG_VISIBILITY) to the Makefile.ams of the other portions of the library. AM_CFLAGS += $(CFLAG_VISIBILITY) ## end gnulib module lib-symbol-visibility ## begin gnulib module libc-config EXTRA_DIST += cdefs.h libc-config.h ## end gnulib module libc-config ## begin gnulib module limits-h BUILT_SOURCES += $(LIMITS_H) # We need the following in order to create when the system # doesn't have one that is compatible with GNU. if GL_GENERATE_LIMITS_H limits.h: limits.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ < $(srcdir)/limits.in.h; \ } > $@-t && \ mv $@-t $@ else limits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += limits.h limits.h-t EXTRA_DIST += limits.in.h ## end gnulib module limits-h ## begin gnulib module maintainer-makefile EXTRA_DIST += $(top_srcdir)/maint.mk ## end gnulib module maintainer-makefile ## begin gnulib module minmax libgnu_la_SOURCES += minmax.h ## end gnulib module minmax ## begin gnulib module snippet/arg-nonnull # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module stdbool BUILT_SOURCES += $(STDBOOL_H) # We need the following in order to create when the system # doesn't have one that works. if GL_GENERATE_STDBOOL_H stdbool.h: stdbool.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ } > $@-t && \ mv $@-t $@ else stdbool.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdbool.h stdbool.h-t EXTRA_DIST += stdbool.in.h ## end gnulib module stdbool ## begin gnulib module stddef BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ < $(srcdir)/stddef.in.h; \ } > $@-t && \ mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module stdint BUILT_SOURCES += $(STDINT_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDINT_H stdint.h: stdint.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ < $(srcdir)/stdint.in.h; \ } > $@-t && \ mv $@-t $@ else stdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdint.h stdint.h-t EXTRA_DIST += stdint.in.h ## end gnulib module stdint ## begin gnulib module string BUILT_SOURCES += string.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += string.h string.h-t EXTRA_DIST += string.in.h ## end gnulib module string ## begin gnulib module strverscmp EXTRA_DIST += strverscmp.c EXTRA_libgnu_la_SOURCES += strverscmp.c ## end gnulib module strverscmp ## begin gnulib module sys_types BUILT_SOURCES += sys/types.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/types.h sys/types.h-t EXTRA_DIST += sys_types.in.h ## end gnulib module sys_types ## begin gnulib module useless-if-before-free EXTRA_DIST += $(top_srcdir)/build-aux/useless-if-before-free ## end gnulib module useless-if-before-free ## begin gnulib module vc-list-files EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files ## end gnulib module vc-list-files mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : libtasn1-4.16.0/lib/gl/stdbool.in.h0000644000000000000000000001177713603737656013637 00000000000000/* Copyright (C) 2001-2003, 2006-2019 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ #ifndef _GL_STDBOOL_H #define _GL_STDBOOL_H /* ISO C 99 for platforms that lack it. */ /* Usage suggestions: Programs that use should be aware of some limitations and standards compliance issues. Standards compliance: - must be #included before 'bool', 'false', 'true' can be used. - You cannot assume that sizeof (bool) == 1. - Programs should not undefine the macros bool, true, and false, as C99 lists that as an "obsolescent feature". Limitations of this substitute, when used in a C89 environment: - must be #included before the '_Bool' type can be used. - You cannot assume that _Bool is a typedef; it might be a macro. - Bit-fields of type 'bool' are not supported. Portable code should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - In C99, casts and automatic conversions to '_Bool' or 'bool' are performed in such a way that every nonzero value gets converted to 'true', and zero gets converted to 'false'. This doesn't work with this substitute. With this substitute, only the values 0 and 1 give the expected result when converted to _Bool' or 'bool'. - C99 allows the use of (_Bool)0.0 in constant expressions, but this substitute cannot always provide this property. Also, it is suggested that programs use 'bool' rather than '_Bool'; this isn't required, but 'bool' is more common. */ /* 7.16. Boolean type and values */ /* BeOS already #defines false 0, true 1. We use the same definitions below, but temporarily we have to #undef them. */ #if defined __BEOS__ && !defined __HAIKU__ # include /* defines bool but not _Bool */ # undef false # undef true #endif #ifdef __cplusplus # define _Bool bool # define bool bool #else # if defined __BEOS__ && !defined __HAIKU__ /* A compiler known to have 'bool'. */ /* If the compiler already has both 'bool' and '_Bool', we can assume they are the same types. */ # if !@HAVE__BOOL@ typedef bool _Bool; # endif # else # if !defined __GNUC__ /* If @HAVE__BOOL@: Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when the built-in _Bool type is used. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html Similar bugs are likely with other compilers as well; this file wouldn't be used if was working. So we override the _Bool type. If !@HAVE__BOOL@: Need to define _Bool ourselves. As 'signed char' or as an enum type? Use of a typedef, with SunPRO C, leads to a stupid "warning: _Bool is a keyword in ISO C99". Use of an enum type, with IRIX cc, leads to a stupid "warning(1185): enumerated type mixed with another type". Even the existence of an enum type, without a typedef, "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. The only benefit of the enum, debuggability, is not important with these compilers. So use 'signed char' and no enum. */ # define _Bool signed char # else /* With this compiler, trust the _Bool type if the compiler has it. */ # if !@HAVE__BOOL@ /* For the sake of symbolic names in gdb, define true and false as enum constants, not only as macros. It is tempting to write typedef enum { false = 0, true = 1 } _Bool; so that gdb prints values of type 'bool' symbolically. But then values of type '_Bool' might promote to 'int' or 'unsigned int' (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' (see ISO C 99 6.3.1.1.(2)). So add a negative value to the enum; this ensures that '_Bool' promotes to 'int'. */ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; # endif # endif # endif # define bool _Bool #endif /* The other macros must be usable in preprocessor directives. */ #ifdef __cplusplus # define false false # define true true #else # define false 0 # define true 1 #endif #define __bool_true_false_are_defined 1 #endif /* _GL_STDBOOL_H */ libtasn1-4.16.0/lib/gl/warn-on-use.h0000644000000000000000000001354013514402112013676 00000000000000/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the attribute used in _GL_WARN_ON_USE. If the compiler does not support this feature, it expands to empty. These macros are useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. _GL_WARN_ON_USE is for functions with 'extern' linkage. _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' linkage. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system : #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif or better (avoiding contradictory use of 'static' and 'extern'): #if HAVE_RAW_DECL_ENVIRON static char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function __attribute__ ((__warning__ (message))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__warning__ (message))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function # define _GL_WARN_ON_USE_ATTRIBUTE(message) # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # define _GL_WARN_ON_USE_ATTRIBUTE(message) # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") is like _GL_WARN_ON_USE (function, "string"), except that the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif libtasn1-4.16.0/lib/gl/limits.in.h0000644000000000000000000000742713514402112013440 00000000000000/* A GNU-like . Copyright 2016-2019 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_LIMITS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LIMITS_H@ #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H #ifndef LLONG_MIN # if defined LONG_LONG_MIN /* HP-UX 11.31 */ # define LLONG_MIN LONG_LONG_MIN # elif defined LONGLONG_MIN /* IRIX 6.5 */ # define LLONG_MIN LONGLONG_MIN # elif defined __GNUC__ # define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) # endif #endif #ifndef LLONG_MAX # if defined LONG_LONG_MAX /* HP-UX 11.31 */ # define LLONG_MAX LONG_LONG_MAX # elif defined LONGLONG_MAX /* IRIX 6.5 */ # define LLONG_MAX LONGLONG_MAX # elif defined __GNUC__ # define LLONG_MAX __LONG_LONG_MAX__ # endif #endif #ifndef ULLONG_MAX # if defined ULONG_LONG_MAX /* HP-UX 11.31 */ # define ULLONG_MAX ULONG_LONG_MAX # elif defined ULONGLONG_MAX /* IRIX 6.5 */ # define ULLONG_MAX ULONGLONG_MAX # elif defined __GNUC__ # define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) # endif #endif /* The number of usable bits in an unsigned or signed integer type with minimum value MIN and maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits"). */ #define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) #define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) #define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) #define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) #define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) #define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) #define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) #ifndef WORD_BIT /* Assume 'int' is 32 bits wide. */ # define WORD_BIT 32 #endif #ifndef LONG_BIT /* Assume 'long' is 32 or 64 bits wide. */ # if LONG_MAX == INT_MAX # define LONG_BIT 32 # else # define LONG_BIT 64 # endif #endif /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (! defined ULLONG_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) # define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) # define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) # define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) # define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) # define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) # define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) # define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) # define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) # define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) # define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) #endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ libtasn1-4.16.0/lib/gl/stdint.in.h0000644000000000000000000005424613514402112013445 00000000000000/* Copyright (C) 2001-2002, 2004-2019 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ /* * ISO C 99 for platforms that lack it. * */ #ifndef _@GUARD_PREFIX@_STDINT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* When including a system file that in turn includes , use the system , not our substitute. This avoids problems with (for example) VMS, whose includes . */ #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* On Android (Bionic libc), includes this file before having defined 'time_t'. Therefore in this case avoid including other system header files; just include the system's . Ideally we should test __BIONIC__ here, but it is only defined after has been included; hence test __ANDROID__ instead. */ #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #else /* Get those types that are already defined in other system include files, so that we can "#define int8_t signed char" below without worrying about a later system include file containing a "typedef signed char int8_t;" that will get messed up by our macro. Our macros should all be consistent with the system versions, except for the "fast" types and macros, which we recommend against using in public interfaces due to compiler differences. */ #if @HAVE_STDINT_H@ # if defined __sgi && ! defined __c99 /* Bypass IRIX's if in C89 mode, since it merely annoys users with "This header file is to be used only for c99 mode compilations" diagnostics. */ # define __STDINT_H__ # endif /* Some pre-C++11 implementations need this. */ # ifdef __cplusplus # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS 1 # endif # ifndef __STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS 1 # endif # endif /* Other systems may have an incomplete or buggy . Include it before , since any "#include " in would reinclude us, skipping our contents because _@GUARD_PREFIX@_STDINT_H is defined. The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #endif #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H #define _@GUARD_PREFIX@_STDINT_H /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ #include /* Override WINT_MIN and WINT_MAX if gnulib's or overrides wint_t. */ #if @GNULIB_OVERRIDES_WINT_T@ # undef WINT_MIN # undef WINT_MAX # define WINT_MIN 0x0U # define WINT_MAX 0xffffffffU #endif #if ! @HAVE_C99_STDINT_H@ /* defines some of the stdint.h types as well, on glibc, IRIX 6.5, and OpenBSD 3.8 (via ). AIX 5.2 isn't needed and causes troubles. Mac OS X 10.4.6 includes (which is us), but relies on the system definitions, so include after @NEXT_STDINT_H@. */ # if @HAVE_SYS_TYPES_H@ && ! defined _AIX # include # endif # if @HAVE_INTTYPES_H@ /* In OpenBSD 3.8, includes , which defines int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. also defines intptr_t and uintptr_t. */ # include # elif @HAVE_SYS_INTTYPES_H@ /* Solaris 7 has the types except the *_fast*_t types, and the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ # include # endif # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ /* Linux libc4 >= 4.6.7 and libc5 have a that defines int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is included by . */ # include # endif # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* Minimum and maximum values for an integer type under the usual assumption. Return an unspecified value if BITS == 0, adding a check to pacify picky compilers. */ /* These are separate macros, because if you try to merge these macros into a single one, HP-UX cc rejects the resulting expression in constant expressions. */ # define _STDINT_UNSIGNED_MIN(bits, zero) \ (zero) # define _STDINT_SIGNED_MIN(bits, zero) \ (~ _STDINT_MAX (1, bits, zero)) # define _STDINT_MAX(signed, bits, zero) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) #if !GNULIB_defined_stdint_types /* 7.18.1.1. Exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef int8_t # undef uint8_t typedef signed char gl_int8_t; typedef unsigned char gl_uint8_t; # define int8_t gl_int8_t # define uint8_t gl_uint8_t # undef int16_t # undef uint16_t typedef short int gl_int16_t; typedef unsigned short int gl_uint16_t; # define int16_t gl_int16_t # define uint16_t gl_uint16_t # undef int32_t # undef uint32_t typedef int gl_int32_t; typedef unsigned int gl_uint32_t; # define int32_t gl_int32_t # define uint32_t gl_uint32_t /* If the system defines INT64_MAX, assume int64_t works. That way, if the underlying platform defines int64_t to be a 64-bit long long int, the code below won't mistakenly define it to be a 64-bit long int, which would mess up C++ name mangling. We must use #ifdef rather than #if, to avoid an error with HP-UX 10.20 cc. */ # ifdef INT64_MAX # define GL_INT64_T # else /* Do not undefine int64_t if gnulib is not being used with 64-bit types, since otherwise it breaks platforms like Tandem/NSK. */ # if LONG_MAX >> 31 >> 31 == 1 # undef int64_t typedef long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif defined _MSC_VER # undef int64_t typedef __int64 gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif @HAVE_LONG_LONG_INT@ # undef int64_t typedef long long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # endif # endif # ifdef UINT64_MAX # define GL_UINT64_T # else # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # undef uint64_t typedef unsigned long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif defined _MSC_VER # undef uint64_t typedef unsigned __int64 gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif @HAVE_UNSIGNED_LONG_LONG_INT@ # undef uint64_t typedef unsigned long long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # endif # endif /* Avoid collision with Solaris 2.5.1 etc. */ # define _UINT8_T # define _UINT32_T # define _UINT64_T /* 7.18.1.2. Minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef int_least8_t # undef uint_least8_t # undef int_least16_t # undef uint_least16_t # undef int_least32_t # undef uint_least32_t # undef int_least64_t # undef uint_least64_t # define int_least8_t int8_t # define uint_least8_t uint8_t # define int_least16_t int16_t # define uint_least16_t uint16_t # define int_least32_t int32_t # define uint_least32_t uint32_t # ifdef GL_INT64_T # define int_least64_t int64_t # endif # ifdef GL_UINT64_T # define uint_least64_t uint64_t # endif /* 7.18.1.3. Fastest minimum-width integer types */ /* Note: Other substitutes may define these types differently. It is not recommended to use these types in public header files. */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. The following code normally uses types consistent with glibc, as that lessens the chance of incompatibility with older GNU hosts. */ # undef int_fast8_t # undef uint_fast8_t # undef int_fast16_t # undef uint_fast16_t # undef int_fast32_t # undef uint_fast32_t # undef int_fast64_t # undef uint_fast64_t typedef signed char gl_int_fast8_t; typedef unsigned char gl_uint_fast8_t; # ifdef __sun /* Define types compatible with SunOS 5.10, so that code compiled under earlier SunOS versions works with code compiled under SunOS 5.10. */ typedef int gl_int_fast32_t; typedef unsigned int gl_uint_fast32_t; # else typedef long int gl_int_fast32_t; typedef unsigned long int gl_uint_fast32_t; # endif typedef gl_int_fast32_t gl_int_fast16_t; typedef gl_uint_fast32_t gl_uint_fast16_t; # define int_fast8_t gl_int_fast8_t # define uint_fast8_t gl_uint_fast8_t # define int_fast16_t gl_int_fast16_t # define uint_fast16_t gl_uint_fast16_t # define int_fast32_t gl_int_fast32_t # define uint_fast32_t gl_uint_fast32_t # ifdef GL_INT64_T # define int_fast64_t int64_t # endif # ifdef GL_UINT64_T # define uint_fast64_t uint64_t # endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) to avoid clashes with declarations of system functions like sbrk. */ # ifndef _INTPTR_T_DECLARED # undef intptr_t # undef uintptr_t typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; # define intptr_t gl_intptr_t # define uintptr_t gl_uintptr_t # endif /* 7.18.1.5. Greatest-width integer types */ /* Note: These types are compiler dependent. It may be unwise to use them in public header files. */ /* If the system defines INTMAX_MAX, assume that intmax_t works, and similarly for UINTMAX_MAX and uintmax_t. This avoids problems with assuming one type where another is used by the system. */ # ifndef INTMAX_MAX # undef INTMAX_C # undef intmax_t # if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 typedef long long int gl_intmax_t; # define intmax_t gl_intmax_t # elif defined GL_INT64_T # define intmax_t int64_t # else typedef long int gl_intmax_t; # define intmax_t gl_intmax_t # endif # endif # ifndef UINTMAX_MAX # undef UINTMAX_C # undef uintmax_t # if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 typedef unsigned long long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # elif defined GL_UINT64_T # define uintmax_t uint64_t # else typedef unsigned long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # endif # endif /* Verify that intmax_t and uintmax_t have the same size. Too much code breaks if this is not the case. If this check fails, the reason is likely to be found in the autoconf macros. */ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) ? 1 : -1]; # define GNULIB_defined_stdint_types 1 # endif /* !GNULIB_defined_stdint_types */ /* 7.18.2. Limits of specified-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef INT8_MIN # undef INT8_MAX # undef UINT8_MAX # define INT8_MIN (~ INT8_MAX) # define INT8_MAX 127 # define UINT8_MAX 255 # undef INT16_MIN # undef INT16_MAX # undef UINT16_MAX # define INT16_MIN (~ INT16_MAX) # define INT16_MAX 32767 # define UINT16_MAX 65535 # undef INT32_MIN # undef INT32_MAX # undef UINT32_MAX # define INT32_MIN (~ INT32_MAX) # define INT32_MAX 2147483647 # define UINT32_MAX 4294967295U # if defined GL_INT64_T && ! defined INT64_MAX /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 evaluates the latter incorrectly in preprocessor expressions. */ # define INT64_MIN (- INTMAX_C (1) << 63) # define INT64_MAX INTMAX_C (9223372036854775807) # endif # if defined GL_UINT64_T && ! defined UINT64_MAX # define UINT64_MAX UINTMAX_C (18446744073709551615) # endif /* 7.18.2.2. Limits of minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef INT_LEAST8_MIN # undef INT_LEAST8_MAX # undef UINT_LEAST8_MAX # define INT_LEAST8_MIN INT8_MIN # define INT_LEAST8_MAX INT8_MAX # define UINT_LEAST8_MAX UINT8_MAX # undef INT_LEAST16_MIN # undef INT_LEAST16_MAX # undef UINT_LEAST16_MAX # define INT_LEAST16_MIN INT16_MIN # define INT_LEAST16_MAX INT16_MAX # define UINT_LEAST16_MAX UINT16_MAX # undef INT_LEAST32_MIN # undef INT_LEAST32_MAX # undef UINT_LEAST32_MAX # define INT_LEAST32_MIN INT32_MIN # define INT_LEAST32_MAX INT32_MAX # define UINT_LEAST32_MAX UINT32_MAX # undef INT_LEAST64_MIN # undef INT_LEAST64_MAX # ifdef GL_INT64_T # define INT_LEAST64_MIN INT64_MIN # define INT_LEAST64_MAX INT64_MAX # endif # undef UINT_LEAST64_MAX # ifdef GL_UINT64_T # define UINT_LEAST64_MAX UINT64_MAX # endif /* 7.18.2.3. Limits of fastest minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. */ # undef INT_FAST8_MIN # undef INT_FAST8_MAX # undef UINT_FAST8_MAX # define INT_FAST8_MIN SCHAR_MIN # define INT_FAST8_MAX SCHAR_MAX # define UINT_FAST8_MAX UCHAR_MAX # undef INT_FAST16_MIN # undef INT_FAST16_MAX # undef UINT_FAST16_MAX # define INT_FAST16_MIN INT_FAST32_MIN # define INT_FAST16_MAX INT_FAST32_MAX # define UINT_FAST16_MAX UINT_FAST32_MAX # undef INT_FAST32_MIN # undef INT_FAST32_MAX # undef UINT_FAST32_MAX # ifdef __sun # define INT_FAST32_MIN INT_MIN # define INT_FAST32_MAX INT_MAX # define UINT_FAST32_MAX UINT_MAX # else # define INT_FAST32_MIN LONG_MIN # define INT_FAST32_MAX LONG_MAX # define UINT_FAST32_MAX ULONG_MAX # endif # undef INT_FAST64_MIN # undef INT_FAST64_MAX # ifdef GL_INT64_T # define INT_FAST64_MIN INT64_MIN # define INT_FAST64_MAX INT64_MAX # endif # undef UINT_FAST64_MAX # ifdef GL_UINT64_T # define UINT_FAST64_MAX UINT64_MAX # endif /* 7.18.2.4. Limits of integer types capable of holding object pointers */ # undef INTPTR_MIN # undef INTPTR_MAX # undef UINTPTR_MAX # define INTPTR_MIN LONG_MIN # define INTPTR_MAX LONG_MAX # define UINTPTR_MAX ULONG_MAX /* 7.18.2.5. Limits of greatest-width integer types */ # ifndef INTMAX_MAX # undef INTMAX_MIN # ifdef INT64_MAX # define INTMAX_MIN INT64_MIN # define INTMAX_MAX INT64_MAX # else # define INTMAX_MIN INT32_MIN # define INTMAX_MAX INT32_MAX # endif # endif # ifndef UINTMAX_MAX # ifdef UINT64_MAX # define UINTMAX_MAX UINT64_MAX # else # define UINTMAX_MAX UINT32_MAX # endif # endif /* 7.18.3. Limits of other integer types */ /* ptrdiff_t limits */ # undef PTRDIFF_MIN # undef PTRDIFF_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else # define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif # else # define PTRDIFF_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # define PTRDIFF_MAX \ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # endif /* sig_atomic_t limits */ # undef SIG_ATOMIC_MIN # undef SIG_ATOMIC_MAX # if @HAVE_SIGNED_SIG_ATOMIC_T@ # define SIG_ATOMIC_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # else # define SIG_ATOMIC_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # endif # define SIG_ATOMIC_MAX \ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) /* size_t limit */ # undef SIZE_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define SIZE_MAX _STDINT_MAX (0, 64, 0ul) # else # define SIZE_MAX _STDINT_MAX (0, 32, 0ul) # endif # else # define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) # endif /* wchar_t limits */ /* Get WCHAR_MIN, WCHAR_MAX. This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested includes -> -> -> , and the latter includes and assumes its types are already defined. */ # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) /* BSD/OS 4.0.1 has a bug: , and must be included before . */ # include # include # include # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # include # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # endif # undef WCHAR_MIN # undef WCHAR_MAX # if @HAVE_SIGNED_WCHAR_T@ # define WCHAR_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # else # define WCHAR_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # endif # define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ # undef WINT_MIN # undef WINT_MAX # if @HAVE_SIGNED_WINT_T@ # define WINT_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # else # define WINT_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif # define WINT_MAX \ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) /* 7.18.4. Macros for integer constants */ /* 7.18.4.1. Macros for minimum-width integer constants */ /* According to ISO C 99 Technical Corrigendum 1 */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ # undef INT8_C # undef UINT8_C # define INT8_C(x) x # define UINT8_C(x) x # undef INT16_C # undef UINT16_C # define INT16_C(x) x # define UINT16_C(x) x # undef INT32_C # undef UINT32_C # define INT32_C(x) x # define UINT32_C(x) x ## U # undef INT64_C # undef UINT64_C # if LONG_MAX >> 31 >> 31 == 1 # define INT64_C(x) x##L # elif defined _MSC_VER # define INT64_C(x) x##i64 # elif @HAVE_LONG_LONG_INT@ # define INT64_C(x) x##LL # endif # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # define UINT64_C(x) x##UL # elif defined _MSC_VER # define UINT64_C(x) x##ui64 # elif @HAVE_UNSIGNED_LONG_LONG_INT@ # define UINT64_C(x) x##ULL # endif /* 7.18.4.2. Macros for greatest-width integer constants */ # ifndef INTMAX_C # if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 # define INTMAX_C(x) x##LL # elif defined GL_INT64_T # define INTMAX_C(x) INT64_C(x) # else # define INTMAX_C(x) x##L # endif # endif # ifndef UINTMAX_C # if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 # define UINTMAX_C(x) x##ULL # elif defined GL_UINT64_T # define UINTMAX_C(x) UINT64_C(x) # else # define UINTMAX_C(x) x##UL # endif # endif #endif /* !@HAVE_C99_STDINT_H@ */ /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (!defined UINTMAX_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # ifdef INT8_MAX # define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) # endif # ifdef UINT8_MAX # define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) # endif # ifdef INT16_MAX # define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) # endif # ifdef UINT16_MAX # define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) # endif # ifdef INT32_MAX # define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) # endif # ifdef UINT32_MAX # define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) # endif # ifdef INT64_MAX # define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) # endif # ifdef UINT64_MAX # define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) # endif # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) # ifdef WINT_MAX # define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) # endif # ifdef SIG_ATOMIC_MAX # define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) # endif #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_STDINT_H */ #endif /* !(defined __ANDROID__ && ...) */ #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ libtasn1-4.16.0/lib/gl/stddef.in.h0000644000000000000000000000751213514402112013403 00000000000000/* A substitute for POSIX 2008 , for platforms that have issues. Copyright (C) 2009-2019 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ /* Written by Eric Blake. */ /* * POSIX 2008 for platforms that have issues. * */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by . Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ # if (@REPLACE_NULL@ \ && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif # endif # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is a hack in case the configure-time test was done with g++ even though we are currently compiling with gcc. */ #if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) # if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, and the C11 standard allows this. Work around this problem by using __alignof__ (which returns 8 for double) rather than _Alignof (which returns 4), and align each union member accordingly. */ # ifdef __GNUC__ # define _GL_STDDEF_ALIGNAS(type) \ __attribute__ ((__aligned__ (__alignof__ (type)))) # else # define _GL_STDDEF_ALIGNAS(type) /* */ # endif typedef union { char *__p _GL_STDDEF_ALIGNAS (char *); double __d _GL_STDDEF_ALIGNAS (double); long double __ld _GL_STDDEF_ALIGNAS (long double); long int __i _GL_STDDEF_ALIGNAS (long int); } rpl_max_align_t; # define max_align_t rpl_max_align_t # define GNULIB_defined_max_align_t 1 # endif #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ libtasn1-4.16.0/lib/gl/c-ctype.h0000644000000000000000000002243613603737656013122 00000000000000/* Character handling in C locale. These functions work like the corresponding functions in , except that they have the C (POSIX) locale hardwired, whereas the functions' behaviour depends on the current locale set via setlocale. Copyright (C) 2000-2003, 2006, 2008-2019 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ #ifndef C_CTYPE_H #define C_CTYPE_H #include #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef C_CTYPE_INLINE # define C_CTYPE_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. */ #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) /* The character set is ASCII or one of its variants or extensions, not EBCDIC. Testing the value of '\n' and '\r' is not relevant. */ # define C_CTYPE_ASCII 1 #elif ! (' ' == '\x40' && '0' == '\xf0' \ && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') # error "Only ASCII and EBCDIC are supported" #endif #if 'A' < 0 # error "EBCDIC and char is signed -- not supported" #endif /* Cases for control characters. */ #define _C_CTYPE_CNTRL \ case '\a': case '\b': case '\f': case '\n': \ case '\r': case '\t': case '\v': \ _C_CTYPE_OTHER_CNTRL /* ASCII control characters other than those with \-letter escapes. */ #if C_CTYPE_ASCII # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x04': case '\x05': case '\x06': case '\x0e': \ case '\x0f': case '\x10': case '\x11': case '\x12': \ case '\x13': case '\x14': case '\x15': case '\x16': \ case '\x17': case '\x18': case '\x19': case '\x1a': \ case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x7f' #else /* Use EBCDIC code page 1047's assignments for ASCII control chars; assume all EBCDIC code pages agree about these assignments. */ # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x07': case '\x0e': case '\x0f': case '\x10': \ case '\x11': case '\x12': case '\x13': case '\x18': \ case '\x19': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x26': case '\x27': case '\x2d': \ case '\x2e': case '\x32': case '\x37': case '\x3c': \ case '\x3d': case '\x3f' #endif /* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ #define _C_CTYPE_LOWER_A_THRU_F_N(N) \ case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ case 'e' + (N): case 'f' + (N) #define _C_CTYPE_LOWER_N(N) \ _C_CTYPE_LOWER_A_THRU_F_N(N): \ case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) /* Cases for hex letters, digits, lower, punct, and upper. */ #define _C_CTYPE_A_THRU_F \ _C_CTYPE_LOWER_A_THRU_F_N (0): \ _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') #define _C_CTYPE_DIGIT \ case '0': case '1': case '2': case '3': \ case '4': case '5': case '6': case '7': \ case '8': case '9' #define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) #define _C_CTYPE_PUNCT \ case '!': case '"': case '#': case '$': \ case '%': case '&': case '\'': case '(': \ case ')': case '*': case '+': case ',': \ case '-': case '.': case '/': case ':': \ case ';': case '<': case '=': case '>': \ case '?': case '@': case '[': case '\\': \ case ']': case '^': case '_': case '`': \ case '{': case '|': case '}': case '~' #define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') /* Function definitions. */ /* Unlike the functions in , which require an argument in the range of the 'unsigned char' type, the functions here operate on values that are in the 'unsigned char' range or in the 'char' range. In other words, when you have a 'char' value, you need to cast it before using it as argument to a function: const char *s = ...; if (isalpha ((unsigned char) *s)) ... but you don't need to cast it for the functions defined in this file: const char *s = ...; if (c_isalpha (*s)) ... */ C_CTYPE_INLINE bool c_isalnum (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isalpha (int c) { switch (c) { _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } /* The function isascii is not locale dependent. Its use in EBCDIC is questionable. */ C_CTYPE_INLINE bool c_isascii (int c) { switch (c) { case ' ': _C_CTYPE_CNTRL: _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isblank (int c) { return c == ' ' || c == '\t'; } C_CTYPE_INLINE bool c_iscntrl (int c) { switch (c) { _C_CTYPE_CNTRL: return true; default: return false; } } C_CTYPE_INLINE bool c_isdigit (int c) { switch (c) { _C_CTYPE_DIGIT: return true; default: return false; } } C_CTYPE_INLINE bool c_isgraph (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_islower (int c) { switch (c) { _C_CTYPE_LOWER: return true; default: return false; } } C_CTYPE_INLINE bool c_isprint (int c) { switch (c) { case ' ': _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_ispunct (int c) { switch (c) { _C_CTYPE_PUNCT: return true; default: return false; } } C_CTYPE_INLINE bool c_isspace (int c) { switch (c) { case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': return true; default: return false; } } C_CTYPE_INLINE bool c_isupper (int c) { switch (c) { _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isxdigit (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_A_THRU_F: return true; default: return false; } } C_CTYPE_INLINE int c_tolower (int c) { switch (c) { _C_CTYPE_UPPER: return c - 'A' + 'a'; default: return c; } } C_CTYPE_INLINE int c_toupper (int c) { switch (c) { _C_CTYPE_LOWER: return c - 'a' + 'A'; default: return c; } } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* C_CTYPE_H */ libtasn1-4.16.0/lib/gl/arg-nonnull.h0000644000000000000000000000233013514402112013752 00000000000000/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif libtasn1-4.16.0/lib/gl/Makefile.in0000644000000000000000000013325713615375040013442 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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) 2002-2019 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file 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 file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=lib/gl/override \ # --lib=libgnu \ # --source-base=lib/gl \ # --m4-base=m4-gl \ # --doc-base=doc \ # --tests-base=tests-gl \ # --aux-dir=build-aux \ # --lgpl=2 \ # --no-conditional-dependencies \ # --libtool \ # --macro-prefix=gl \ # --no-vc-files \ # c-ctype \ # intprops \ # lib-symbol-versions \ # lib-symbol-visibility \ # maintainer-makefile \ # manywarnings \ # minmax \ # stdint \ # strverscmp \ # valgrind-tests VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib/gl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ $(top_srcdir)/m4/ax_am_macros_static.m4 \ $(top_srcdir)/m4/ax_check_gnu_make.m4 \ $(top_srcdir)/m4/ax_code_coverage.m4 \ $(top_srcdir)/m4/ax_file_escapes.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4-gl/00gnulib.m4 \ $(top_srcdir)/m4-gl/__inline.m4 \ $(top_srcdir)/m4-gl/absolute-header.m4 \ $(top_srcdir)/m4-gl/extensions.m4 \ $(top_srcdir)/m4-gl/extern-inline.m4 \ $(top_srcdir)/m4-gl/gnulib-common.m4 \ $(top_srcdir)/m4-gl/gnulib-comp.m4 \ $(top_srcdir)/m4-gl/include_next.m4 \ $(top_srcdir)/m4-gl/ld-version-script.m4 \ $(top_srcdir)/m4-gl/limits-h.m4 \ $(top_srcdir)/m4-gl/longlong.m4 \ $(top_srcdir)/m4-gl/manywarnings.m4 \ $(top_srcdir)/m4-gl/minmax.m4 $(top_srcdir)/m4-gl/multiarch.m4 \ $(top_srcdir)/m4-gl/off_t.m4 $(top_srcdir)/m4-gl/ssize_t.m4 \ $(top_srcdir)/m4-gl/stdbool.m4 $(top_srcdir)/m4-gl/stddef_h.m4 \ $(top_srcdir)/m4-gl/stdint.m4 $(top_srcdir)/m4-gl/string_h.m4 \ $(top_srcdir)/m4-gl/strverscmp.m4 \ $(top_srcdir)/m4-gl/sys_types_h.m4 \ $(top_srcdir)/m4-gl/valgrind-tests.m4 \ $(top_srcdir)/m4-gl/visibility.m4 \ $(top_srcdir)/m4-gl/warn-on-use.m4 \ $(top_srcdir)/m4-gl/warnings.m4 $(top_srcdir)/m4-gl/wchar_t.m4 \ $(top_srcdir)/m4-gl/wint_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = am_libgnu_la_OBJECTS = c-ctype.lo libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/c-ctype.Plo \ ./$(DEPDIR)/strverscmp.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASN1_VERSION_MAJOR = @ASN1_VERSION_MAJOR@ ASN1_VERSION_MINOR = @ASN1_VERSION_MINOR@ ASN1_VERSION_NUMBER = @ASN1_VERSION_NUMBER@ ASN1_VERSION_PATCH = @ASN1_VERSION_PATCH@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FUZZ_LIBS = @FUZZ_LIBS@ GCOV = @GCOV@ GENHTML = @GENHTML@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTOOL = @LIBTOOL@ LIB_FUZZING_ENGINE = @LIB_FUZZING_ENGINE@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ ifGNUmake = @ifGNUmake@ ifnGNUmake = @ifnGNUmake@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.11 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = $(top_srcdir)/GNUmakefile intprops.h cdefs.h \ libc-config.h limits.in.h $(top_srcdir)/maint.mk arg-nonnull.h \ c++defs.h warn-on-use.h stdbool.in.h stddef.in.h stdint.in.h \ string.in.h strverscmp.c sys_types.in.h \ $(top_srcdir)/build-aux/useless-if-before-free \ $(top_srcdir)/build-aux/vc-list-files BUILT_SOURCES = $(LIMITS_H) $(STDBOOL_H) $(STDDEF_H) $(STDINT_H) \ string.h sys/types.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump limits.h limits.h-t stdbool.h \ stdbool.h-t stddef.h stddef.h-t stdint.h stdint.h-t string.h \ string.h-t sys/types.h sys/types.h-t MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = # The value of $(CFLAG_VISIBILITY) needs to be added to the CFLAGS for the # compilation of all sources that make up the library. This line here does it # only for the gnulib part of it. The developer is responsible for adding # $(CFLAG_VISIBILITY) to the Makefile.ams of the other portions of the library. AM_CFLAGS = $(CFLAG_VISIBILITY) libgnu_la_SOURCES = c-ctype.h c-ctype.c minmax.h libgnu_la_LIBADD = $(gl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = strverscmp.c libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H = $(srcdir)/arg-nonnull.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H = $(srcdir)/c++defs.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H = $(srcdir)/warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/gl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits lib/gl/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(EXTRA_libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnu_la_LINK) $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-ctype.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strverscmp.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/c-ctype.Plo -rm -f ./$(DEPDIR)/strverscmp.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/c-ctype.Plo -rm -f ./$(DEPDIR)/strverscmp.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-local distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile distclean-local: clean-GNUmakefile clean-GNUmakefile: test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile # We need the following in order to create when the system # doesn't have one that is compatible with GNU. @GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_LIMITS_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_LIMITS_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ < $(srcdir)/limits.in.h; \ @GL_GENERATE_LIMITS_H_TRUE@ } > $@-t && \ @GL_GENERATE_LIMITS_H_TRUE@ mv $@-t $@ @GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works. @GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDBOOL_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDBOOL_H_TRUE@ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ @GL_GENERATE_STDBOOL_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDBOOL_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ @GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status @GL_GENERATE_STDINT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDINT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDINT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ < $(srcdir)/stdint.in.h; \ @GL_GENERATE_STDINT_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDINT_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status @GL_GENERATE_STDINT_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : # 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: libtasn1-4.16.0/lib/gl/cdefs.h0000644000000000000000000004364013514402112012613 00000000000000/* Copyright (C) 1992-2019 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #ifndef _SYS_CDEFS_H #define _SYS_CDEFS_H 1 /* We are almost always included from features.h. */ #ifndef _FEATURES_H # include #endif /* The GNU libc does not support any K&R compilers or the traditional mode of ISO C compilers anymore. Check for some of the combinations not anymore supported. */ #if defined __GNUC__ && !defined __STDC__ # error "You need a ISO C conforming compiler to use the glibc headers" #endif /* Some user header file might have defined this before. */ #undef __P #undef __PMT #ifdef __GNUC__ /* All functions, except those with callbacks or those that synchronize memory, are leaf functions. */ # if __GNUC_PREREQ (4, 6) && !defined _LIBC # define __LEAF , __leaf__ # define __LEAF_ATTR __attribute__ ((__leaf__)) # else # define __LEAF # define __LEAF_ATTR # endif /* GCC can always grok prototypes. For C++ programs we add throw() to help it optimize the function calls. But this works only with gcc 2.8.x and egcs. For gcc 3.2 and up we even mark C functions as non-throwing using a function attribute since programs can use the -fexceptions options for C code as well. */ # if !defined __cplusplus && __GNUC_PREREQ (3, 3) # define __THROW __attribute__ ((__nothrow__ __LEAF)) # define __THROWNL __attribute__ ((__nothrow__)) # define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct # define __NTHNL(fct) __attribute__ ((__nothrow__)) fct # else # if defined __cplusplus && __GNUC_PREREQ (2,8) # define __THROW throw () # define __THROWNL throw () # define __NTH(fct) __LEAF_ATTR fct throw () # define __NTHNL(fct) fct throw () # else # define __THROW # define __THROWNL # define __NTH(fct) fct # define __NTHNL(fct) fct # endif # endif #else /* Not GCC. */ # if (defined __cplusplus \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) # define __inline inline # else # define __inline /* No inline functions. */ # endif # define __THROW # define __THROWNL # define __NTH(fct) fct #endif /* GCC. */ /* Compilers that are not clang may object to #if defined __clang__ && __has_extension(...) even though they do not need to evaluate the right-hand side of the &&. */ #if defined __clang__ && defined __has_extension # define __glibc_clang_has_extension(ext) __has_extension (ext) #else # define __glibc_clang_has_extension(ext) 0 #endif /* These two macros are not used in glibc anymore. They are kept here only because some other projects expect the macros to be defined. */ #define __P(args) args #define __PMT(args) args /* For these things, GCC behaves the ANSI way normally, and the non-ANSI way under -traditional. */ #define __CONCAT(x,y) x ## y #define __STRING(x) #x /* This is not a typedef so `const __ptr_t' does the right thing. */ #define __ptr_t void * /* C++ needs to know that types and declarations are C, not C++. */ #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS # define __END_DECLS #endif /* Fortify support. */ #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) #define __bos0(ptr) __builtin_object_size (ptr, 0) #if __GNUC_PREREQ (4,3) # define __warndecl(name, msg) \ extern void name (void) __attribute__((__warning__ (msg))) # define __warnattr(msg) __attribute__((__warning__ (msg))) # define __errordecl(name, msg) \ extern void name (void) __attribute__((__error__ (msg))) #else # define __warndecl(name, msg) extern void name (void) # define __warnattr(msg) # define __errordecl(name, msg) extern void name (void) #endif /* Support for flexible arrays. Headers that should use flexible arrays only if they're "real" (e.g. only if they won't affect sizeof()) should test #if __glibc_c99_flexarr_available. */ #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc # define __flexarr [] # define __glibc_c99_flexarr_available 1 #elif __GNUC_PREREQ (2,97) /* GCC 2.97 supports C99 flexible array members as an extension, even when in C89 mode or compiling C++ (any version). */ # define __flexarr [] # define __glibc_c99_flexarr_available 1 #elif defined __GNUC__ /* Pre-2.97 GCC did not support C99 flexible arrays but did have an equivalent extension with slightly different notation. */ # define __flexarr [0] # define __glibc_c99_flexarr_available 1 #else /* Some other non-C99 compiler. Approximate with [1]. */ # define __flexarr [1] # define __glibc_c99_flexarr_available 0 #endif /* __asm__ ("xyz") is used throughout the headers to rename functions at the assembly language level. This is wrapped by the __REDIRECT macro, in order to support compilers that can do this some other way. When compilers don't support asm-names at all, we have to do preprocessor tricks instead (which don't have exactly the right semantics, but it's the best we can do). Example: int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ #if defined __GNUC__ && __GNUC__ >= 2 # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) # ifdef __cplusplus # define __REDIRECT_NTH(name, proto, alias) \ name proto __THROW __asm__ (__ASMNAME (#alias)) # define __REDIRECT_NTHNL(name, proto, alias) \ name proto __THROWNL __asm__ (__ASMNAME (#alias)) # else # define __REDIRECT_NTH(name, proto, alias) \ name proto __asm__ (__ASMNAME (#alias)) __THROW # define __REDIRECT_NTHNL(name, proto, alias) \ name proto __asm__ (__ASMNAME (#alias)) __THROWNL # endif # define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) # define __ASMNAME2(prefix, cname) __STRING (prefix) cname /* #elif __SOME_OTHER_COMPILER__ # define __REDIRECT(name, proto, alias) name proto; \ _Pragma("let " #name " = " #alias) */ #endif /* GCC has various useful declarations that can be made with the `__attribute__' syntax. All of the ways we use this do fine if they are omitted for compilers that don't understand it. */ #if !defined __GNUC__ || __GNUC__ < 2 # define __attribute__(xyz) /* Ignore */ #endif /* At some point during the gcc 2.96 development the `malloc' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,96) # define __attribute_malloc__ __attribute__ ((__malloc__)) #else # define __attribute_malloc__ /* Ignore */ #endif /* Tell the compiler which arguments to an allocation function indicate the size of the allocation. */ #if __GNUC_PREREQ (4, 3) # define __attribute_alloc_size__(params) \ __attribute__ ((__alloc_size__ params)) #else # define __attribute_alloc_size__(params) /* Ignore. */ #endif /* At some point during the gcc 2.96 development the `pure' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,96) # define __attribute_pure__ __attribute__ ((__pure__)) #else # define __attribute_pure__ /* Ignore */ #endif /* This declaration tells the compiler that the value is constant. */ #if __GNUC_PREREQ (2,5) # define __attribute_const__ __attribute__ ((__const__)) #else # define __attribute_const__ /* Ignore */ #endif /* At some point during the gcc 3.1 development the `used' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (3,1) # define __attribute_used__ __attribute__ ((__used__)) # define __attribute_noinline__ __attribute__ ((__noinline__)) #else # define __attribute_used__ __attribute__ ((__unused__)) # define __attribute_noinline__ /* Ignore */ #endif /* Since version 3.2, gcc allows marking deprecated functions. */ #if __GNUC_PREREQ (3,2) # define __attribute_deprecated__ __attribute__ ((__deprecated__)) #else # define __attribute_deprecated__ /* Ignore */ #endif /* Since version 4.5, gcc also allows one to specify the message printed when a deprecated function is used. clang claims to be gcc 4.2, but may also support this feature. */ #if __GNUC_PREREQ (4,5) || \ __glibc_clang_has_extension (__attribute_deprecated_with_message__) # define __attribute_deprecated_msg__(msg) \ __attribute__ ((__deprecated__ (msg))) #else # define __attribute_deprecated_msg__(msg) __attribute_deprecated__ #endif /* At some point during the gcc 2.8 development the `format_arg' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. If several `format_arg' attributes are given for the same function, in gcc-3.0 and older, all but the last one are ignored. In newer gccs, all designated arguments are considered. */ #if __GNUC_PREREQ (2,8) # define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) #else # define __attribute_format_arg__(x) /* Ignore */ #endif /* At some point during the gcc 2.97 development the `strfmon' format attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,97) # define __attribute_format_strfmon__(a,b) \ __attribute__ ((__format__ (__strfmon__, a, b))) #else # define __attribute_format_strfmon__(a,b) /* Ignore */ #endif /* The nonnull function attribute marks pointer parameters that must not be NULL. Do not define __nonnull if it is already defined, for portability when this file is used in Gnulib. */ #ifndef __nonnull # if __GNUC_PREREQ (3,3) # define __nonnull(params) __attribute__ ((__nonnull__ params)) # else # define __nonnull(params) # endif #endif /* If fortification mode, we warn about unused results of certain function calls which can lead to problems. */ #if __GNUC_PREREQ (3,4) # define __attribute_warn_unused_result__ \ __attribute__ ((__warn_unused_result__)) # if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 # define __wur __attribute_warn_unused_result__ # endif #else # define __attribute_warn_unused_result__ /* empty */ #endif #ifndef __wur # define __wur /* Ignore */ #endif /* Forces a function to be always inlined. */ #if __GNUC_PREREQ (3,2) /* The Linux kernel defines __always_inline in stddef.h (283d7573), and it conflicts with this definition. Therefore undefine it first to allow either header to be included first. */ # undef __always_inline # define __always_inline __inline __attribute__ ((__always_inline__)) #else # undef __always_inline # define __always_inline __inline #endif /* Associate error messages with the source location of the call site rather than with the source location inside the function. */ #if __GNUC_PREREQ (4,3) # define __attribute_artificial__ __attribute__ ((__artificial__)) #else # define __attribute_artificial__ /* Ignore */ #endif /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions older than 4.3 may define these macros and still not guarantee GNU inlining semantics. clang++ identifies itself as gcc-4.2, but has support for GNU inlining semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and __GNUC_GNU_INLINE__ macro definitions. */ #if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ || defined __GNUC_GNU_INLINE__))) # if defined __GNUC_STDC_INLINE__ || defined __cplusplus # define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) # define __extern_always_inline \ extern __always_inline __attribute__ ((__gnu_inline__)) # else # define __extern_inline extern __inline # define __extern_always_inline extern __always_inline # endif #endif #ifdef __extern_always_inline # define __fortify_function __extern_always_inline __attribute_artificial__ #endif /* GCC 4.3 and above allow passing all anonymous arguments of an __extern_always_inline function to some other vararg function. */ #if __GNUC_PREREQ (4,3) # define __va_arg_pack() __builtin_va_arg_pack () # define __va_arg_pack_len() __builtin_va_arg_pack_len () #endif /* It is possible to compile containing GCC extensions even if GCC is run in pedantic mode if the uses are carefully marked using the `__extension__' keyword. But this is not generally available before version 2.8. */ #if !__GNUC_PREREQ (2,8) # define __extension__ /* Ignore */ #endif /* __restrict is known in EGCS 1.2 and above. */ #if !__GNUC_PREREQ (2,92) # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L # define __restrict restrict # else # define __restrict /* Ignore */ # endif #endif /* ISO C99 also allows to declare arrays as non-overlapping. The syntax is array_name[restrict] GCC 3.1 supports this. */ #if __GNUC_PREREQ (3,1) && !defined __GNUG__ # define __restrict_arr __restrict #else # ifdef __GNUC__ # define __restrict_arr /* Not supported in old GCC. */ # else # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L # define __restrict_arr restrict # else /* Some other non-C99 compiler. */ # define __restrict_arr /* Not supported. */ # endif # endif #endif #if __GNUC__ >= 3 # define __glibc_unlikely(cond) __builtin_expect ((cond), 0) # define __glibc_likely(cond) __builtin_expect ((cond), 1) #else # define __glibc_unlikely(cond) (cond) # define __glibc_likely(cond) (cond) #endif #ifdef __has_attribute # define __glibc_has_attribute(attr) __has_attribute (attr) #else # define __glibc_has_attribute(attr) 0 #endif #if (!defined _Noreturn \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ && !__GNUC_PREREQ (4,7)) # if __GNUC_PREREQ (2,8) # define _Noreturn __attribute__ ((__noreturn__)) # else # define _Noreturn # endif #endif #if __GNUC_PREREQ (8, 0) /* Describes a char array whose address can safely be passed as the first argument to strncpy and strncat, as the char array is not necessarily a NUL-terminated string. */ # define __attribute_nonstring__ __attribute__ ((__nonstring__)) #else # define __attribute_nonstring__ #endif #if (!defined _Static_assert && !defined __cplusplus \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__)) # define _Static_assert(expr, diagnostic) \ extern int (*__Static_assert_function (void)) \ [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] #endif /* The #ifndef lets Gnulib avoid including these on non-glibc platforms, where the includes typically do not exist. */ #ifndef __WORDSIZE # include # include #endif #if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH # define __LDBL_COMPAT 1 # ifdef __REDIRECT # define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) # define __LDBL_REDIR(name, proto) \ __LDBL_REDIR1 (name, proto, __nldbl_##name) # define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) # define __LDBL_REDIR_NTH(name, proto) \ __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) # define __LDBL_REDIR1_DECL(name, alias) \ extern __typeof (name) name __asm (__ASMNAME (#alias)); # define __LDBL_REDIR_DECL(name) \ extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); # define __REDIRECT_LDBL(name, proto, alias) \ __LDBL_REDIR1 (name, proto, __nldbl_##alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) # endif #endif #if !defined __LDBL_COMPAT || !defined __REDIRECT # define __LDBL_REDIR1(name, proto, alias) name proto # define __LDBL_REDIR(name, proto) name proto # define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW # define __LDBL_REDIR_NTH(name, proto) name proto __THROW # define __LDBL_REDIR_DECL(name) # ifdef __REDIRECT # define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __REDIRECT_NTH (name, proto, alias) # endif #endif /* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is intended for use in preprocessor macros. Note: MESSAGE must be a _single_ string; concatenation of string literals is not supported. */ #if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) # define __glibc_macro_warning1(message) _Pragma (#message) # define __glibc_macro_warning(message) \ __glibc_macro_warning1 (GCC warning message) #else # define __glibc_macro_warning(msg) #endif /* Generic selection (ISO C11) is a C-only feature, available in GCC since version 4.9. Previous versions do not provide generic selection, even though they might set __STDC_VERSION__ to 201112L, when in -std=c11 mode. Thus, we must check for !defined __GNUC__ when testing __STDC_VERSION__ for generic selection support. On the other hand, Clang also defines __GNUC__, so a clang-specific check is required to enable the use of generic selection. */ #if !defined __cplusplus \ && (__GNUC_PREREQ (4, 9) \ || __glibc_clang_has_extension (c_generic_selections) \ || (!defined __GNUC__ && defined __STDC_VERSION__ \ && __STDC_VERSION__ >= 201112L)) # define __HAVE_GENERIC_SELECTION 1 #else # define __HAVE_GENERIC_SELECTION 0 #endif #endif /* sys/cdefs.h */ libtasn1-4.16.0/lib/gl/minmax.h0000644000000000000000000000452013514402112013012 00000000000000/* MIN, MAX macros. Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2019 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ #ifndef _MINMAX_H #define _MINMAX_H /* Note: MIN, MAX are also defined in on some systems (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about MIN, MAX macro redefinitions on some systems; the workaround is to #include this file as the last one among the #include list. */ /* Before we define the following symbols we get the file since otherwise we get redefinitions on some systems if is included after this file. Likewise for . If more than one of these system headers define MIN and MAX, pick just one of the headers (because the definitions most likely are the same). */ #if HAVE_MINMAX_IN_LIMITS_H # include #elif HAVE_MINMAX_IN_SYS_PARAM_H # include #endif /* Note: MIN and MAX should be used with two arguments of the same type. They might not return the minimum and maximum of their two arguments, if the arguments have different types or have unusual floating-point values. For example, on a typical host with 32-bit 'int', 64-bit 'long long', and 64-bit IEEE 754 'double' types: MAX (-1, 2147483648) returns 4294967295. MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. MAX (NaN, 0.0) returns 0.0. MAX (+0.0, -0.0) returns -0.0. and in each case the answer is in some sense bogus. */ /* MAX(a,b) returns the maximum of A and B. */ #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif /* MIN(a,b) returns the minimum of A and B. */ #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #endif /* _MINMAX_H */ libtasn1-4.16.0/lib/gl/libc-config.h0000644000000000000000000001170613514402112013701 00000000000000/* System definitions for code taken from the GNU C Library Copyright 2017-2019 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ /* Written by Paul Eggert. */ /* This is intended to be a good-enough substitute for glibc system macros like those defined in , so that Gnulib code shared with glibc can do this as the first #include: #ifndef _LIBC # include #endif When compiled as part of glibc this is a no-op; when compiled as part of Gnulib this includes Gnulib's and defines macros that glibc library code would normally assume. */ #include /* On glibc this includes and and #defines _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 it includes which defines __nonnull. Elsewhere it is harmless. */ #include /* From glibc . */ #ifndef __set_errno # define __set_errno(val) (errno = (val)) #endif /* From glibc . */ #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_MINOR__ # define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __glibc_clang_prereq # if defined __clang_major__ && defined __clang_minor__ # define __glibc_clang_prereq(maj, min) \ ((maj) < __clang_major__ + ((min) <= __clang_minor__)) # else # define __glibc_clang_prereq(maj, min) 0 # endif #endif /* Prepare to include , which is our copy of glibc . */ /* Define _FEATURES_H so that does not include . */ #ifndef _FEATURES_H # define _FEATURES_H 1 #endif /* Define __WORDSIZE so that does not attempt to include nonexistent files. Make it a syntax error, since Gnulib does not use __WORDSIZE now, and if Gnulib uses it later the syntax error will let us know that __WORDSIZE needs configuring. */ #ifndef __WORDSIZE # define __WORDSIZE %%% #endif /* Undef the macros unconditionally defined by our copy of glibc , so that they do not clash with any system-defined versions. */ #undef _SYS_CDEFS_H #undef __ASMNAME #undef __ASMNAME2 #undef __BEGIN_DECLS #undef __CONCAT #undef __END_DECLS #undef __HAVE_GENERIC_SELECTION #undef __LDBL_COMPAT #undef __LDBL_REDIR #undef __LDBL_REDIR1 #undef __LDBL_REDIR1_DECL #undef __LDBL_REDIR1_NTH #undef __LDBL_REDIR_DECL #undef __LDBL_REDIR_NTH #undef __LEAF #undef __LEAF_ATTR #undef __NTH #undef __NTHNL #undef __P #undef __PMT #undef __REDIRECT #undef __REDIRECT_LDBL #undef __REDIRECT_NTH #undef __REDIRECT_NTHNL #undef __REDIRECT_NTH_LDBL #undef __STRING #undef __THROW #undef __THROWNL #undef __always_inline #undef __attribute__ #undef __attribute_alloc_size__ #undef __attribute_artificial__ #undef __attribute_const__ #undef __attribute_deprecated__ #undef __attribute_deprecated_msg__ #undef __attribute_format_arg__ #undef __attribute_format_strfmon__ #undef __attribute_malloc__ #undef __attribute_noinline__ #undef __attribute_nonstring__ #undef __attribute_pure__ #undef __attribute_used__ #undef __attribute_warn_unused_result__ #undef __bos #undef __bos0 #undef __errordecl #undef __extension__ #undef __extern_always_inline #undef __extern_inline #undef __flexarr #undef __fortify_function #undef __glibc_c99_flexarr_available #undef __glibc_clang_has_extension #undef __glibc_likely #undef __glibc_macro_warning #undef __glibc_macro_warning1 #undef __glibc_unlikely #undef __inline #undef __ptr_t #undef __restrict #undef __restrict_arr #undef __va_arg_pack #undef __va_arg_pack_len #undef __warnattr #undef __warndecl /* Include our copy of glibc . */ #include /* __inline is too pessimistic for non-GCC. */ #undef __inline #ifndef HAVE___INLINE # if 199901 <= __STDC_VERSION__ || defined inline # define __inline inline # else # define __inline # endif #endif /* A substitute for glibc , good enough for Gnulib. */ #define attribute_hidden #define libc_hidden_proto(name, ...) #define libc_hidden_def(name) #define libc_hidden_weak(name) #define libc_hidden_ver(local, name) #define strong_alias(name, aliasname) #define weak_alias(name, aliasname) /* A substitute for glibc , good enough for Gnulib. */ #define SHLIB_COMPAT(lib, introduced, obsoleted) 0 #define versioned_symbol(lib, local, symbol, version) libtasn1-4.16.0/lib/gl/c++defs.h0000644000000000000000000003415713514402112012744 00000000000000/* C++ compatible function declaration macros. Copyright (C) 2010-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ libtasn1-4.16.0/lib/gl/sys_types.in.h0000644000000000000000000000615713514402112014200 00000000000000/* Provide a more complete sys/types.h. Copyright (C) 2011-2019 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _WIN32 && !defined __CYGWIN__ \ && (defined __need_off_t || defined __need___off64_t \ || defined __need_ssize_t || defined __need_time_t) /* Special invocation convention inside mingw header files. */ #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ # define _GL_INCLUDING_SYS_TYPES_H #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ # undef _GL_INCLUDING_SYS_TYPES_H #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* Override off_t if Large File Support is requested on native Windows. */ #if @WINDOWS_64_BIT_OFF_T@ /* Same as int64_t in . */ # if defined _MSC_VER # define off_t __int64 # else # define off_t long long int # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif /* Override dev_t and ino_t if distinguishable inodes support is requested on native Windows. */ #if @WINDOWS_STAT_INODES@ # if @WINDOWS_STAT_INODES@ == 2 /* Experimental, not useful in Windows 10. */ /* Define dev_t to a 64-bit type. */ # if !defined GNULIB_defined_dev_t typedef unsigned long long int rpl_dev_t; # undef dev_t # define dev_t rpl_dev_t # define GNULIB_defined_dev_t 1 # endif /* Define ino_t to a 128-bit type. */ # if !defined GNULIB_defined_ino_t /* MSVC does not have a 128-bit integer type. GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # else /* @WINDOWS_STAT_INODES@ == 1 */ /* Define ino_t to a 64-bit type. */ # if !defined GNULIB_defined_ino_t typedef unsigned long long int rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ #endif /* MSVC 9 defines size_t in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ # include #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* __need_XXX */ libtasn1-4.16.0/lib/gl/string.in.h0000644000000000000000000012061013514402112013433 00000000000000/* A GNU-like . Copyright (C) 1995-1996, 2001-2019 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_STRING_H /* Special invocation convention: - On OS X/NetBSD we have a sequence of nested includes -> -> "string.h" In this situation system _chk variants due to -D_FORTIFY_SOURCE might be used after any replacements defined here. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STRING_H #define _GL_ALREADY_INCLUDING_STRING_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #undef _GL_ALREADY_INCLUDING_STRING_H #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* NetBSD 5.0 mis-defines NULL. */ #include /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* NetBSD 5.0 declares strsignal in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Clear a block of memory. The compiler will not delete a call to this function, even if the block is dead after the call. */ #if @GNULIB_EXPLICIT_BZERO@ # if ! @HAVE_EXPLICIT_BZERO@ _GL_FUNCDECL_SYS (explicit_bzero, void, (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); _GL_CXXALIASWARN (explicit_bzero); #elif defined GNULIB_POSIXCHECK # undef explicit_bzero # if HAVE_RAW_DECL_EXPLICIT_BZERO _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " "use gnulib module explicit_bzero for portability"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else # if ! @HAVE_MEMCHR@ _GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n)); # else _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if ! @HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); _GL_CXXALIASWARN (mempcpy); #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); # else _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if ! @HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); _GL_CXXALIASWARN (stpcpy); #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif _GL_CXXALIASWARN (stpncpy); #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); # else _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if !(@HAVE_DECL_STRDUP@ || defined strdup) _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #elif defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); # endif _GL_CXXALIASWARN (strncat); #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # else # if ! @HAVE_DECL_STRNDUP@ _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #elif defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept)); # else _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: http://www.opengroup.org/susv3xsh/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif _GL_CXXALIASWARN (mbslen); #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif _GL_CXXALIASWARN (strerror); #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ #endif libtasn1-4.16.0/lib/gl/c-ctype.c0000644000000000000000000000012213603737656013101 00000000000000#include #define C_CTYPE_INLINE _GL_EXTERN_INLINE #include "c-ctype.h" libtasn1-4.16.0/lib/ASN1.y0000644000000000000000000010022613603737041011655 00000000000000%{ /* * Copyright (C) 2001-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ /*****************************************************/ /* File: x509_ASN.y */ /* Description: input file for 'bison' program. */ /* The output file is a parser (in C language) for */ /* ASN.1 syntax */ /*****************************************************/ #include #include #include #include #include "c-ctype.h" static list_type *e_list = NULL; static FILE *file_asn1; /* Pointer to file to parse */ static int result_parse = 0; /* result of the parser algorithm */ static asn1_node p_tree; /* pointer to the root of the structure created by the parser*/ static unsigned int line_number; /* line number describing the parser position inside the file */ static char last_error[ASN1_MAX_ERROR_DESCRIPTION_SIZE] = ""; static char last_error_token[ASN1_MAX_ERROR_DESCRIPTION_SIZE+1] = ""; /* used when expected errors occur */ static char last_token[ASN1_MAX_NAME_SIZE+1] = ""; /* last token find in the file to parse before the 'parse error' */ extern char _asn1_identifierMissing[]; static const char *file_name; /* file to parse */ static void _asn1_yyerror (const char *); static int _asn1_yylex(void); #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION #define SAFE_COPY(dst, dst_size, fmt, ...) { snprintf(dst, dst_size, fmt, __VA_ARGS__); } #else #define SAFE_COPY(dst, dst_size, fmt, ...) { \ int _ret = snprintf(dst, dst_size, fmt, __VA_ARGS__); \ if (_ret != (int)strlen(dst)) \ { \ fprintf(stderr, "%s:%u: Oversize value\n", \ file_name, line_number); \ exit(1); \ } \ } #endif %} /* Prefix symbols and functions with _asn1_ */ /* %define parse.lac full */ %define parse.error verbose %define api.prefix {_asn1_yy} %union { unsigned int constant; char str[ASN1_MAX_NAME_SIZE+1]; asn1_node node; } %token ASSIG "::=" %token NUM %token IDENTIFIER %token OPTIONAL %token INTEGER %token SIZE %token OCTET %token STRING %token SEQUENCE %token BIT %token UNIVERSAL %token PRIVATE %token APPLICATION %token DEFAULT %token CHOICE %token OF %token OBJECT %token STR_IDENTIFIER %token BOOLEAN %token ASN1_TRUE %token ASN1_FALSE %token TOKEN_NULL %token ANY %token DEFINED %token BY %token SET %token EXPLICIT %token IMPLICIT %token DEFINITIONS %token TAGS %token BEGIN %token END %token UTCTime %token GeneralizedTime %token GeneralString %token NumericString %token IA5String %token TeletexString %token PrintableString %token UniversalString %token BMPString %token UTF8String %token VisibleString %token FROM %token IMPORTS %token ENUMERATED %type octet_string_def constant constant_list type_assig_right %type integer_def type_assig type_assig_list sequence_def type_def %type bit_string_def default size_def choise_def object_def %type boolean_def any_def size_def2 obj_constant obj_constant_list %type constant_def type_constant type_constant_list definitions %type definitions_id Time bit_element bit_element_list set_def %type tag_type tag type_assig_right_tag generalstring_def %type numericstring_def ia5string_def printablestring_def universalstring_def %type bmpstring_def utf8string_def visiblestring_def teletexstring_def %type type_assig_right_tag_default enumerated_def %type pos_num neg_num pos_neg_num pos_neg_identifier pos_neg_list %type num_identifier %type int_identifier %type class explicit_implicit %type known_string %% definitions: definitions_id DEFINITIONS explicit_implicit TAGS "::=" BEGIN /* imports_def */ type_constant_list END {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_DEFINITIONS|$3); _asn1_set_name($$,_asn1_get_name($1)); _asn1_set_name($1,""); _asn1_set_right($1,$7); _asn1_set_down($$,$1); p_tree=$$; } ; pos_num : NUM {snprintf($$,sizeof($$),"%s",$1);} | '+' NUM {snprintf($$,sizeof($$),"%s",$2);} ; neg_num : '-' NUM {SAFE_COPY($$,sizeof($$),"-%s",$2);} ; pos_neg_num : pos_num {snprintf($$,sizeof($$),"%s",$1);} | neg_num {snprintf($$,sizeof($$),"%s",$1);} ; num_identifier : NUM {snprintf($$,sizeof($$),"%s",$1);} | IDENTIFIER {snprintf($$,sizeof($$),"%s",$1);} ; int_identifier : NUM {snprintf($$,sizeof($$),"%s",$1);} | '-' NUM {SAFE_COPY($$,sizeof($$),"-%s",$2);} | IDENTIFIER {snprintf($$,sizeof($$),"%s",$1);} ; pos_neg_identifier : pos_neg_num {snprintf($$,sizeof($$),"%s",$1);} | IDENTIFIER {snprintf($$,sizeof($$),"%s",$1);} ; constant: '(' pos_neg_num ')' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_value($$,$2,strlen($2)+1);} | IDENTIFIER'('pos_neg_num')' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_name($$,$1); _asn1_set_value($$,$3,strlen($3)+1);} ; constant_list: constant {$$=$1;} | constant_list ',' constant {$$=$1; _asn1_set_right(_asn1_get_last_right($1),$3);} ; obj_constant: num_identifier {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_value($$,$1,strlen($1)+1);} | IDENTIFIER'('NUM')' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_name($$,$1); _asn1_set_value($$,$3,strlen($3)+1);} ; obj_constant_list: obj_constant {$$=$1;} | obj_constant_list obj_constant {$$=$1; _asn1_set_right(_asn1_get_last_right($1),$2);} ; class : UNIVERSAL {$$=CONST_UNIVERSAL;} | PRIVATE {$$=CONST_PRIVATE;} | APPLICATION {$$=CONST_APPLICATION;} ; tag_type : '[' NUM ']' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_TAG); _asn1_set_value($$,$2,strlen($2)+1);} | '[' class NUM ']' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_TAG | $2); _asn1_set_value($$,$3,strlen($3)+1);} ; tag : tag_type {$$=$1;} | tag_type EXPLICIT {$$=_asn1_mod_type($1,CONST_EXPLICIT);} | tag_type IMPLICIT {$$=_asn1_mod_type($1,CONST_IMPLICIT);} ; default : DEFAULT pos_neg_identifier {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_DEFAULT); _asn1_set_value($$,$2,strlen($2)+1);} | DEFAULT ASN1_TRUE {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_DEFAULT|CONST_TRUE);} | DEFAULT ASN1_FALSE {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_DEFAULT|CONST_FALSE);} ; pos_neg_list: pos_neg_num | pos_neg_list '|' pos_neg_num ; integer_def: INTEGER {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_INTEGER);} | INTEGER'{'constant_list'}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_INTEGER|CONST_LIST); _asn1_set_down($$,$3);} | integer_def'(' pos_neg_list ')' {$$=$1;} | integer_def'('int_identifier'.''.'int_identifier')' {$$=$1;} ; boolean_def: BOOLEAN {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_BOOLEAN);} ; Time: UTCTime {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_UTC_TIME);} | GeneralizedTime {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_GENERALIZED_TIME);} ; size_def2: SIZE'('num_identifier')' { } | SIZE'('num_identifier'.''.'num_identifier')' { } ; size_def: size_def2 {$$=$1;} | '(' size_def2 ')' {$$=$2;} ; generalstring_def: GeneralString {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_GENERALSTRING);} | GeneralString size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_GENERALSTRING|CONST_SIZE);} ; numericstring_def: NumericString {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_NUMERIC_STRING|CONST_UNIVERSAL);} | NumericString size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_NUMERIC_STRING|CONST_SIZE);} ; ia5string_def: IA5String {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_IA5_STRING);} | IA5String size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_IA5_STRING|CONST_SIZE);} ; teletexstring_def: TeletexString {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_TELETEX_STRING);} | TeletexString size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_TELETEX_STRING|CONST_SIZE);} ; printablestring_def: PrintableString {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_PRINTABLE_STRING);} | PrintableString size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_PRINTABLE_STRING|CONST_SIZE);} ; universalstring_def: UniversalString {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_UNIVERSAL_STRING);} | UniversalString size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_UNIVERSAL_STRING|CONST_SIZE);} ; bmpstring_def: BMPString {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_BMP_STRING);} | BMPString size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_BMP_STRING|CONST_SIZE);} ; utf8string_def: UTF8String {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_UTF8_STRING);} | UTF8String size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_UTF8_STRING|CONST_SIZE);} ; visiblestring_def: VisibleString {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_VISIBLE_STRING);} | VisibleString size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_VISIBLE_STRING|CONST_SIZE);} ; octet_string_def : OCTET STRING {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_OCTET_STRING);} | OCTET STRING size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_OCTET_STRING|CONST_SIZE);} ; bit_element : IDENTIFIER'('NUM')' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_name($$,$1); _asn1_set_value($$,$3,strlen($3)+1);} ; bit_element_list : bit_element {$$=$1;} | bit_element_list ',' bit_element {$$=$1; _asn1_set_right(_asn1_get_last_right($1),$3);} ; bit_string_def : BIT STRING {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_BIT_STRING);} | BIT STRING size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_BIT_STRING|CONST_SIZE);} | BIT STRING'{'bit_element_list'}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_BIT_STRING|CONST_LIST); _asn1_set_down($$,$4);} ; enumerated_def : ENUMERATED'{'bit_element_list'}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_ENUMERATED|CONST_LIST); _asn1_set_down($$,$3);} ; object_def : OBJECT STR_IDENTIFIER {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID);} ; type_assig_right: IDENTIFIER {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_IDENTIFIER); _asn1_set_value($$,$1,strlen($1)+1);} | IDENTIFIER size_def {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_IDENTIFIER|CONST_SIZE); _asn1_set_value($$,$1,strlen($1)+1);} | integer_def {$$=$1;} | enumerated_def {$$=$1;} | boolean_def {$$=$1;} | Time | octet_string_def {$$=$1;} | bit_string_def {$$=$1;} | generalstring_def {$$=$1;} | numericstring_def {$$=$1;} | ia5string_def {$$=$1;} | teletexstring_def {$$=$1;} | printablestring_def {$$=$1;} | universalstring_def {$$=$1;} | bmpstring_def {$$=$1;} | utf8string_def {$$=$1;} | visiblestring_def {$$=$1;} | sequence_def {$$=$1;} | object_def {$$=$1;} | choise_def {$$=$1;} | any_def {$$=$1;} | set_def {$$=$1;} | TOKEN_NULL {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_NULL);} ; type_assig_right_tag : type_assig_right {$$=$1;} | tag type_assig_right {$$=_asn1_mod_type($2,CONST_TAG); _asn1_set_right($1,_asn1_get_down($$)); _asn1_set_down($$,$1);} ; type_assig_right_tag_default : type_assig_right_tag {$$=$1;} | type_assig_right_tag default {$$=_asn1_mod_type($1,CONST_DEFAULT); _asn1_set_right($2,_asn1_get_down($$)); _asn1_set_down($$,$2);} | type_assig_right_tag OPTIONAL {$$=_asn1_mod_type($1,CONST_OPTION);} ; type_assig : IDENTIFIER type_assig_right_tag_default {$$=_asn1_set_name($2,$1);} ; type_assig_list : type_assig {$$=$1;} | type_assig_list','type_assig {$$=$1; _asn1_set_right(_asn1_get_last_right($1),$3);} ; sequence_def : SEQUENCE'{'type_assig_list'}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_SEQUENCE); _asn1_set_down($$,$3);} | SEQUENCE OF type_assig_right {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_SEQUENCE_OF); _asn1_set_down($$,$3);} | SEQUENCE size_def OF type_assig_right {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_SEQUENCE_OF|CONST_SIZE); _asn1_set_down($$,$4);} ; set_def : SET'{'type_assig_list'}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_SET); _asn1_set_down($$,$3);} | SET OF type_assig_right {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_SET_OF); _asn1_set_down($$,$3);} | SET size_def OF type_assig_right {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_SET_OF|CONST_SIZE); _asn1_set_down($$,$4);} ; choise_def : CHOICE'{'type_assig_list'}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_CHOICE); _asn1_set_down($$,$3);} ; any_def : ANY {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_ANY);} | ANY DEFINED BY IDENTIFIER {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_ANY|CONST_DEFINED_BY); _asn1_set_down($$,_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT)); _asn1_set_name(_asn1_get_down($$),$4);} ; known_string: UTF8String { SAFE_COPY($$,sizeof($$),"%s",last_token); } | VisibleString { SAFE_COPY($$,sizeof($$),"%s",last_token); } | PrintableString { SAFE_COPY($$,sizeof($$),"%s",last_token); } | UniversalString { SAFE_COPY($$,sizeof($$),"%s",last_token); } | IA5String { SAFE_COPY($$,sizeof($$),"%s",last_token); } | NumericString { SAFE_COPY($$,sizeof($$),"%s",last_token); } | TeletexString { SAFE_COPY($$,sizeof($$),"%s",last_token); } | BMPString { SAFE_COPY($$,sizeof($$),"%s",last_token); } /* This matches build-in types which are redefined */ type_invalid : known_string "::=" '[' class NUM ']' IMPLICIT OCTET STRING { #ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION fprintf(stderr, "%s:%u: Warning: %s is a built-in ASN.1 type.\n", file_name, line_number, $1); #endif } ; type_def : IDENTIFIER "::=" type_assig_right_tag { $$=_asn1_set_name($3,$1);} ; constant_def : IDENTIFIER OBJECT STR_IDENTIFIER "::=" '{'obj_constant_list'}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID|CONST_ASSIGN); _asn1_set_name($$,$1); _asn1_set_down($$,$6);} | IDENTIFIER IDENTIFIER "::=" '{' obj_constant_list '}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID|CONST_ASSIGN|CONST_1_PARAM); _asn1_set_name($$,$1); _asn1_set_value($$,$2,strlen($2)+1); _asn1_set_down($$,$5);} | IDENTIFIER INTEGER "::=" pos_neg_num {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_INTEGER|CONST_ASSIGN); _asn1_set_name($$,$1); _asn1_set_value($$,$4,strlen($4)+1);} ; type_constant: type_def {$$=$1;} | type_invalid {$$=NULL;} | constant_def {$$=$1;} ; type_constant_list : type_constant {$$=$1;} | type_constant_list type_constant {$$=$1; if ($1 && $2) _asn1_set_right(_asn1_get_last_right($1),$2);} ; definitions_id : IDENTIFIER '{' obj_constant_list '}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID); _asn1_set_down($$,$3); _asn1_set_name($$,$1);} | IDENTIFIER '{' '}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID); _asn1_set_name($$,$1);} | IDENTIFIER {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID); _asn1_set_name($$,$1);} ; /* identifier_list : IDENTIFIER {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_IDENTIFIER); _asn1_set_name($$,$1);} | identifier_list IDENTIFIER {$$=$1; _asn1_set_right(_asn1_get_last_right($$),_asn1_add_static_node(&e_list, ASN1_ETYPE_IDENTIFIER)); _asn1_set_name(_asn1_get_last_right($$),$2);} ; imports_def : empty {$$=NULL;} | IMPORTS identifier_list FROM IDENTIFIER obj_constant_list {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_IMPORTS); _asn1_set_down($$,_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID)); _asn1_set_name(_asn1_get_down($$),$4); _asn1_set_down(_asn1_get_down($$),$5); _asn1_set_right($$,$2);} ; */ explicit_implicit : EXPLICIT {$$=CONST_EXPLICIT;} | IMPLICIT {$$=CONST_IMPLICIT;} ; %% static const char *key_word[] = { "::=","OPTIONAL","INTEGER","SIZE","OCTET","STRING", "SEQUENCE","BIT","UNIVERSAL","PRIVATE","OPTIONAL", "DEFAULT","CHOICE","OF","OBJECT","IDENTIFIER", "BOOLEAN","TRUE","FALSE","APPLICATION","ANY","DEFINED", "SET","BY","EXPLICIT","IMPLICIT","DEFINITIONS","TAGS", "BEGIN","END","UTCTime","GeneralizedTime", "GeneralString","FROM","IMPORTS","NULL","ENUMERATED", "NumericString", "IA5String", "TeletexString", "PrintableString", "UniversalString", "BMPString", "UTF8String", "VisibleString"}; static const int key_word_token[] = { ASSIG, OPTIONAL, INTEGER, SIZE, OCTET, STRING, SEQUENCE, BIT, UNIVERSAL, PRIVATE, OPTIONAL, DEFAULT, CHOICE, OF, OBJECT, STR_IDENTIFIER, BOOLEAN, ASN1_TRUE, ASN1_FALSE, APPLICATION, ANY, DEFINED, SET, BY, EXPLICIT, IMPLICIT, DEFINITIONS, TAGS, BEGIN, END, UTCTime, GeneralizedTime, GeneralString, FROM, IMPORTS, TOKEN_NULL, ENUMERATED, NumericString, IA5String, TeletexString, PrintableString, UniversalString, BMPString, UTF8String, VisibleString }; /*************************************************************/ /* Function: _asn1_yylex */ /* Description: looks for tokens in file_asn1 pointer file. */ /* Return: int */ /* Token identifier or ASCII code or 0(zero: End Of File) */ /*************************************************************/ static int _asn1_yylex (void) { int c, counter = 0, k, lastc; char string[ASN1_MAX_NAME_SIZE + 1]; /* will contain the next token */ size_t i; while (1) { while ((c = fgetc (file_asn1)) == ' ' || c == '\t' || c == '\n') if (c == '\n') line_number++; if (c == EOF) { snprintf (last_token, sizeof(last_token), "End Of File"); return 0; } if (c == '(' || c == ')' || c == '[' || c == ']' || c == '{' || c == '}' || c == ',' || c == '.' || c == '+' || c == '|') { last_token[0] = c; last_token[1] = 0; return c; } if (c == '-') { /* Maybe the first '-' of a comment */ if ((c = fgetc (file_asn1)) != '-') { ungetc (c, file_asn1); last_token[0] = '-'; last_token[1] = 0; return '-'; } else { /* Comments */ lastc = 0; counter = 0; /* A comment finishes at the next double hypen or the end of line */ while ((c = fgetc (file_asn1)) != EOF && c != '\n' && (lastc != '-' || (lastc == '-' && c != '-'))) lastc = c; if (c == EOF) { snprintf (last_token, sizeof(last_token), "End Of File"); return 0; } else { if (c == '\n') line_number++; continue; /* next char, please! (repeat the search) */ } } } string[counter++] = (char) c; /* Till the end of the token */ while (! ((c = fgetc (file_asn1)) == EOF || c == ' ' || c == '\t' || c == '\n' || c == '(' || c == ')' || c == '[' || c == ']' || c == '{' || c == '}' || c == ',' || c == '.')) { if (counter >= ASN1_MAX_NAME_SIZE) { result_parse = ASN1_NAME_TOO_LONG; return 0; } string[counter++] = (char) c; } ungetc (c, file_asn1); string[counter] = 0; snprintf (last_token, sizeof(last_token), "%s", string); /* Is STRING a number? */ for (k = 0; k < counter; k++) if (!c_isdigit ((int)string[k])) break; if (k >= counter) { snprintf (yylval.str, sizeof(yylval.str), "%s", string); return NUM; /* return the number */ } /* Is STRING a keyword? */ for (i = 0; i < (sizeof (key_word) / sizeof (char *)); i++) if (!strcmp (string, key_word[i])) return key_word_token[i]; /* STRING is an IDENTIFIER */ snprintf (yylval.str, sizeof(yylval.str), "%s", string); return IDENTIFIER; } } /*************************************************************/ /* Function: _asn1_create_errorDescription */ /* Description: creates a string with the description of the*/ /* error. */ /* Parameters: */ /* error : error to describe. */ /* error_desc: string that will contain the */ /* description. */ /*************************************************************/ static void _asn1_create_errorDescription (int error, char *error_desc) { if (error_desc == NULL) return; switch (error) { case ASN1_FILE_NOT_FOUND: snprintf(error_desc, ASN1_MAX_ERROR_DESCRIPTION_SIZE, "%s file was not found", file_name); break; case ASN1_SYNTAX_ERROR: snprintf(error_desc, ASN1_MAX_ERROR_DESCRIPTION_SIZE, "%s", last_error); break; case ASN1_NAME_TOO_LONG: snprintf (error_desc, ASN1_MAX_ERROR_DESCRIPTION_SIZE, "%s:%u: name too long (more than %u characters)", file_name, line_number, (unsigned)ASN1_MAX_NAME_SIZE); break; case ASN1_IDENTIFIER_NOT_FOUND: snprintf (error_desc, ASN1_MAX_ERROR_DESCRIPTION_SIZE, "%s:: identifier '%s' not found", file_name, _asn1_identifierMissing); break; default: error_desc[0] = 0; break; } } /** * asn1_parser2tree: * @file: specify the path and the name of file that contains * ASN.1 declarations. * @definitions: return the pointer to the structure created from * "file" ASN.1 declarations. * @error_desc: return the error description or an empty * string if success. * * Function used to start the parse algorithm. Creates the structures * needed to manage the definitions included in @file file. * * Returns: %ASN1_SUCCESS if the file has a correct syntax and every * identifier is known, %ASN1_ELEMENT_NOT_EMPTY if @definitions not * %NULL, %ASN1_FILE_NOT_FOUND if an error occurred while * opening @file, %ASN1_SYNTAX_ERROR if the syntax is not * correct, %ASN1_IDENTIFIER_NOT_FOUND if in the file there is an * identifier that is not defined, %ASN1_NAME_TOO_LONG if in the * file there is an identifier with more than %ASN1_MAX_NAME_SIZE * characters. **/ int asn1_parser2tree (const char *file, asn1_node * definitions, char *error_desc) { if (*definitions != NULL) { result_parse = ASN1_ELEMENT_NOT_EMPTY; goto error; } file_name = file; /* open the file to parse */ file_asn1 = fopen (file, "r"); if (file_asn1 == NULL) { result_parse = ASN1_FILE_NOT_FOUND; goto error; } result_parse = ASN1_SUCCESS; line_number = 1; yyparse (); fclose (file_asn1); if (result_parse != ASN1_SUCCESS) goto error; /* set IMPLICIT or EXPLICIT property */ _asn1_set_default_tag (p_tree); /* set CONST_SET and CONST_NOT_USED */ _asn1_type_set_config (p_tree); /* check the identifier definitions */ result_parse = _asn1_check_identifier (p_tree); if (result_parse != ASN1_SUCCESS) goto error; /* Convert into DER coding the value assign to INTEGER constants */ _asn1_change_integer_value (p_tree); /* Expand the IDs of OBJECT IDENTIFIER constants */ result_parse = _asn1_expand_object_id (&e_list, p_tree); if (result_parse != ASN1_SUCCESS) goto error; /* success */ *definitions = p_tree; _asn1_delete_list (e_list); e_list = NULL; p_tree = NULL; *error_desc = 0; return result_parse; error: _asn1_delete_list_and_nodes (e_list); e_list = NULL; p_tree = NULL; _asn1_create_errorDescription (result_parse, error_desc); return result_parse; } /** * asn1_parser2array: * @inputFileName: specify the path and the name of file that * contains ASN.1 declarations. * @outputFileName: specify the path and the name of file that will * contain the C vector definition. * @vectorName: specify the name of the C vector. * @error_desc: return the error description or an empty * string if success. * * Function that generates a C structure from an ASN1 file. Creates a * file containing a C vector to use to manage the definitions * included in @inputFileName file. If @inputFileName is * "/aa/bb/xx.yy" and @outputFileName is %NULL, the file created is * "/aa/bb/xx_asn1_tab.c". If @vectorName is %NULL the vector name * will be "xx_asn1_tab". * * Returns: %ASN1_SUCCESS if the file has a correct syntax and every * identifier is known, %ASN1_FILE_NOT_FOUND if an error occurred * while opening @inputFileName, %ASN1_SYNTAX_ERROR if the syntax is * not correct, %ASN1_IDENTIFIER_NOT_FOUND if in the file there is * an identifier that is not defined, %ASN1_NAME_TOO_LONG if in the * file there is an identifier with more than %ASN1_MAX_NAME_SIZE * characters. **/ int asn1_parser2array (const char *inputFileName, const char *outputFileName, const char *vectorName, char *error_desc) { char *file_out_name = NULL; char *vector_name = NULL; const char *char_p, *slash_p, *dot_p; p_tree = NULL; file_name = inputFileName; /* open the file to parse */ file_asn1 = fopen (inputFileName, "r"); if (file_asn1 == NULL) { result_parse = ASN1_FILE_NOT_FOUND; goto error2; } result_parse = ASN1_SUCCESS; line_number = 1; yyparse (); fclose (file_asn1); if (result_parse != ASN1_SUCCESS) goto error1; /* set IMPLICIT or EXPLICIT property */ _asn1_set_default_tag (p_tree); /* set CONST_SET and CONST_NOT_USED */ _asn1_type_set_config (p_tree); /* check the identifier definitions */ result_parse = _asn1_check_identifier (p_tree); if (result_parse != ASN1_SUCCESS) goto error2; /* all identifier defined */ /* searching the last '/' and '.' in inputFileName */ char_p = inputFileName; slash_p = inputFileName; while ((char_p = strchr (char_p, '/'))) { char_p++; slash_p = char_p; } char_p = slash_p; dot_p = inputFileName + strlen (inputFileName); while ((char_p = strchr (char_p, '.'))) { dot_p = char_p; char_p++; } if (outputFileName == NULL) { /* file_out_name = inputFileName + _asn1_tab.c */ file_out_name = malloc (dot_p - inputFileName + 1 + sizeof ("_asn1_tab.c")-1); memcpy (file_out_name, inputFileName, dot_p - inputFileName); file_out_name[dot_p - inputFileName] = 0; strcat (file_out_name, "_asn1_tab.c"); } else { /* file_out_name = inputFileName */ file_out_name = strdup(outputFileName); } if (vectorName == NULL) { unsigned len, i; /* vector_name = file name + _asn1_tab */ vector_name = malloc (dot_p - slash_p + 1 + sizeof("_asn1_tab") - 1); memcpy (vector_name, slash_p, dot_p - slash_p); vector_name[dot_p - slash_p] = 0; strcat (vector_name, "_asn1_tab"); len = strlen(vector_name); for (i=0;i. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton 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. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.4.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the type names. */ #define YYSTYPE _ASN1_YYSTYPE /* Substitute the variable and function names. */ #define yyparse _asn1_yyparse #define yylex _asn1_yylex #define yyerror _asn1_yyerror #define yydebug _asn1_yydebug #define yynerrs _asn1_yynerrs #define yylval _asn1_yylval #define yychar _asn1_yychar /* First part of user prologue. */ #line 1 "ASN1.y" /* * Copyright (C) 2001-2014 Free Software Foundation, Inc. * * This file is part of LIBTASN1. * * The LIBTASN1 library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA */ /*****************************************************/ /* File: x509_ASN.y */ /* Description: input file for 'bison' program. */ /* The output file is a parser (in C language) for */ /* ASN.1 syntax */ /*****************************************************/ #include #include #include #include #include "c-ctype.h" static list_type *e_list = NULL; static FILE *file_asn1; /* Pointer to file to parse */ static int result_parse = 0; /* result of the parser algorithm */ static asn1_node p_tree; /* pointer to the root of the structure created by the parser*/ static unsigned int line_number; /* line number describing the parser position inside the file */ static char last_error[ASN1_MAX_ERROR_DESCRIPTION_SIZE] = ""; static char last_error_token[ASN1_MAX_ERROR_DESCRIPTION_SIZE+1] = ""; /* used when expected errors occur */ static char last_token[ASN1_MAX_NAME_SIZE+1] = ""; /* last token find in the file to parse before the 'parse error' */ extern char _asn1_identifierMissing[]; static const char *file_name; /* file to parse */ static void _asn1_yyerror (const char *); static int _asn1_yylex(void); #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION #define SAFE_COPY(dst, dst_size, fmt, ...) { snprintf(dst, dst_size, fmt, __VA_ARGS__); } #else #define SAFE_COPY(dst, dst_size, fmt, ...) { \ int _ret = snprintf(dst, dst_size, fmt, __VA_ARGS__); \ if (_ret != (int)strlen(dst)) \ { \ fprintf(stderr, "%s:%u: Oversize value\n", \ file_name, line_number); \ exit(1); \ } \ } #endif #line 150 "ASN1.c" # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* Debug traces. */ #ifndef _ASN1_YYDEBUG # if defined YYDEBUG #if YYDEBUG # define _ASN1_YYDEBUG 1 # else # define _ASN1_YYDEBUG 0 # endif # else /* ! defined YYDEBUG */ # define _ASN1_YYDEBUG 0 # endif /* ! defined YYDEBUG */ #endif /* ! defined _ASN1_YYDEBUG */ #if _ASN1_YYDEBUG extern int _asn1_yydebug; #endif /* Token type. */ #ifndef _ASN1_YYTOKENTYPE # define _ASN1_YYTOKENTYPE enum _asn1_yytokentype { ASSIG = 258, NUM = 259, IDENTIFIER = 260, OPTIONAL = 261, INTEGER = 262, SIZE = 263, OCTET = 264, STRING = 265, SEQUENCE = 266, BIT = 267, UNIVERSAL = 268, PRIVATE = 269, APPLICATION = 270, DEFAULT = 271, CHOICE = 272, OF = 273, OBJECT = 274, STR_IDENTIFIER = 275, BOOLEAN = 276, ASN1_TRUE = 277, ASN1_FALSE = 278, TOKEN_NULL = 279, ANY = 280, DEFINED = 281, BY = 282, SET = 283, EXPLICIT = 284, IMPLICIT = 285, DEFINITIONS = 286, TAGS = 287, BEGIN = 288, END = 289, UTCTime = 290, GeneralizedTime = 291, GeneralString = 292, NumericString = 293, IA5String = 294, TeletexString = 295, PrintableString = 296, UniversalString = 297, BMPString = 298, UTF8String = 299, VisibleString = 300, FROM = 301, IMPORTS = 302, ENUMERATED = 303 }; #endif /* Tokens. */ #define ASSIG 258 #define NUM 259 #define IDENTIFIER 260 #define OPTIONAL 261 #define INTEGER 262 #define SIZE 263 #define OCTET 264 #define STRING 265 #define SEQUENCE 266 #define BIT 267 #define UNIVERSAL 268 #define PRIVATE 269 #define APPLICATION 270 #define DEFAULT 271 #define CHOICE 272 #define OF 273 #define OBJECT 274 #define STR_IDENTIFIER 275 #define BOOLEAN 276 #define ASN1_TRUE 277 #define ASN1_FALSE 278 #define TOKEN_NULL 279 #define ANY 280 #define DEFINED 281 #define BY 282 #define SET 283 #define EXPLICIT 284 #define IMPLICIT 285 #define DEFINITIONS 286 #define TAGS 287 #define BEGIN 288 #define END 289 #define UTCTime 290 #define GeneralizedTime 291 #define GeneralString 292 #define NumericString 293 #define IA5String 294 #define TeletexString 295 #define PrintableString 296 #define UniversalString 297 #define BMPString 298 #define UTF8String 299 #define VisibleString 300 #define FROM 301 #define IMPORTS 302 #define ENUMERATED 303 /* Value type. */ #if ! defined _ASN1_YYSTYPE && ! defined _ASN1_YYSTYPE_IS_DECLARED union _ASN1_YYSTYPE { #line 77 "ASN1.y" unsigned int constant; char str[ASN1_MAX_NAME_SIZE+1]; asn1_node node; #line 300 "ASN1.c" }; typedef union _ASN1_YYSTYPE _ASN1_YYSTYPE; # define _ASN1_YYSTYPE_IS_TRIVIAL 1 # define _ASN1_YYSTYPE_IS_DECLARED 1 #endif extern _ASN1_YYSTYPE _asn1_yylval; int _asn1_yyparse (void); #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE # if (defined __GNUC__ \ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C # define YY_ATTRIBUTE(Spec) __attribute__(Spec) # else # define YY_ATTRIBUTE(Spec) /* empty */ # endif #endif #ifndef YY_ATTRIBUTE_PURE # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined _ASN1_YYSTYPE_IS_TRIVIAL && _ASN1_YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* 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 (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* 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_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 5 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 248 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 60 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 54 /* YYNRULES -- Number of rules. */ #define YYNRULES 137 /* YYNSTATES -- Number of states. */ #define YYNSTATES 238 #define YYUNDEFTOK 2 #define YYMAXUTOK 303 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_uint8 yytranslate[] = { 0, 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, 51, 52, 2, 49, 53, 50, 59, 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, 54, 2, 55, 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, 57, 56, 58, 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, 6, 7, 8, 9, 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 }; #if _ASN1_YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 151, 151, 164, 165, 168, 171, 172, 175, 176, 179, 180, 181, 184, 185, 188, 190, 195, 196, 200, 202, 207, 208, 212, 213, 214, 217, 219, 223, 224, 225, 228, 230, 231, 235, 236, 240, 241, 243, 244, 248, 251, 252, 255, 256, 260, 261, 264, 265, 268, 269, 272, 273, 276, 277, 280, 281, 284, 285, 288, 289, 292, 293, 296, 297, 300, 301, 304, 309, 310, 314, 315, 316, 321, 327, 330, 332, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 357, 358, 363, 364, 367, 370, 373, 374, 378, 380, 382, 386, 388, 390, 394, 398, 399, 404, 405, 406, 407, 408, 409, 410, 411, 414, 421, 424, 428, 433, 439, 440, 441, 444, 445, 449, 452, 454, 478, 479 }; #endif #if _ASN1_YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[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", "IDENTIFIER", "OPTIONAL", "INTEGER", "SIZE", "OCTET", "STRING", "SEQUENCE", "BIT", "UNIVERSAL", "PRIVATE", "APPLICATION", "DEFAULT", "CHOICE", "OF", "OBJECT", "STR_IDENTIFIER", "BOOLEAN", "ASN1_TRUE", "ASN1_FALSE", "TOKEN_NULL", "ANY", "DEFINED", "BY", "SET", "EXPLICIT", "IMPLICIT", "DEFINITIONS", "TAGS", "BEGIN", "END", "UTCTime", "GeneralizedTime", "GeneralString", "NumericString", "IA5String", "TeletexString", "PrintableString", "UniversalString", "BMPString", "UTF8String", "VisibleString", "FROM", "IMPORTS", "ENUMERATED", "'+'", "'-'", "'('", "')'", "','", "'['", "']'", "'|'", "'{'", "'}'", "'.'", "$accept", "definitions", "pos_num", "neg_num", "pos_neg_num", "num_identifier", "int_identifier", "pos_neg_identifier", "constant", "constant_list", "obj_constant", "obj_constant_list", "class", "tag_type", "tag", "default", "pos_neg_list", "integer_def", "boolean_def", "Time", "size_def2", "size_def", "generalstring_def", "numericstring_def", "ia5string_def", "teletexstring_def", "printablestring_def", "universalstring_def", "bmpstring_def", "utf8string_def", "visiblestring_def", "octet_string_def", "bit_element", "bit_element_list", "bit_string_def", "enumerated_def", "object_def", "type_assig_right", "type_assig_right_tag", "type_assig_right_tag_default", "type_assig", "type_assig_list", "sequence_def", "set_def", "choise_def", "any_def", "known_string", "type_invalid", "type_def", "constant_def", "type_constant", "type_constant_list", "definitions_id", "explicit_implicit", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 43, 45, 40, 41, 44, 91, 93, 124, 123, 125, 46 }; # endif #define YYPACT_NINF -140 #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-140))) #define YYTABLE_NINF -12 #define yytable_value_is_error(Yytable_value) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { 41, -27, 32, 17, 0, -140, 90, -140, 19, -140, -140, -140, 3, -140, -140, 24, 126, -140, -140, 98, 80, 105, -140, 141, 30, -140, -140, -140, -140, -140, -140, -140, -140, 131, -140, -140, -140, -140, 84, 67, 148, 155, 170, 107, -140, -140, 6, 91, 184, 18, 185, 139, 177, -140, -140, 172, 36, -140, -140, 6, 6, 6, 6, 6, 6, 6, 6, 6, 142, 25, 145, 128, 149, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, 144, 64, 199, 174, 152, 196, -140, -140, 26, 6, 128, 200, 189, 43, 200, -140, 179, 128, 200, 190, -140, -140, -140, -140, -140, -140, -140, -140, -140, 204, 156, -140, -140, -140, 206, -140, -140, -140, 92, 173, -140, 208, 209, -140, -140, -140, 157, 211, 188, 164, 166, 64, -140, -11, -140, -140, 67, -140, 27, 128, 204, -140, 78, 213, -140, 97, 128, 168, -140, 101, -140, 165, 162, -140, 218, -140, 167, 10, 5, -140, -140, 173, 169, -140, -7, -140, 64, 171, 26, -140, 37, -140, 200, -140, -140, 104, -140, -140, -140, -140, 221, 204, -140, -140, 175, 176, -140, 64, -140, 7, 197, -140, 178, 180, -140, -140, -140, 94, -140, -140, -140, 181, -140, 23, -140, -140, 219, 188, -140, -140, -140, -140, -140, -140, -140, -140, 225, 186, 220, 187, -140, -140, -140, -140 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 135, 0, 0, 0, 1, 0, 8, 9, 134, 19, 21, 0, 136, 137, 0, 0, 133, 22, 0, 0, 0, 20, 0, 0, 120, 119, 121, 117, 118, 122, 115, 116, 0, 129, 128, 130, 131, 0, 0, 0, 0, 0, 0, 2, 132, 75, 36, 0, 0, 0, 0, 0, 40, 97, 113, 0, 41, 42, 47, 49, 51, 53, 55, 57, 59, 61, 63, 0, 0, 28, 0, 77, 79, 80, 83, 84, 85, 86, 87, 88, 89, 90, 91, 81, 82, 78, 93, 98, 124, 92, 96, 94, 95, 0, 0, 0, 0, 0, 0, 45, 76, 0, 65, 0, 0, 0, 70, 0, 74, 0, 0, 0, 0, 48, 50, 52, 54, 56, 58, 60, 62, 64, 0, 0, 23, 24, 25, 0, 29, 30, 99, 0, 0, 3, 0, 0, 6, 7, 127, 0, 0, 0, 0, 0, 0, 17, 0, 66, 107, 0, 104, 0, 0, 0, 71, 0, 0, 110, 0, 0, 0, 68, 0, 26, 0, 3, 12, 0, 34, 0, 0, 0, 4, 5, 0, 0, 9, 0, 46, 0, 0, 0, 37, 100, 103, 0, 106, 108, 0, 112, 114, 109, 111, 0, 0, 73, 27, 5, 0, 38, 0, 126, 0, 0, 43, 0, 0, 15, 18, 102, 0, 101, 105, 72, 0, 69, 0, 35, 125, 0, 0, 16, 14, 32, 33, 13, 31, 67, 10, 0, 0, 0, 0, 11, 39, 123, 44 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -140, -140, -140, -140, -130, -139, 14, -140, 54, -140, -12, -108, 143, -140, -140, -140, -140, -140, -140, -140, 146, -43, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, 46, 88, -140, -140, -140, -70, 93, -140, 58, -53, -140, -140, -140, -140, -140, -140, -140, -140, 210, -140, -140, -140 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 2, 137, 138, 139, 10, 170, 227, 146, 147, 11, 12, 128, 70, 71, 212, 171, 72, 73, 74, 100, 101, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 162, 163, 85, 86, 87, 88, 89, 185, 151, 152, 90, 91, 92, 93, 33, 34, 35, 36, 37, 38, 3, 15 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 18, 131, 169, 178, 7, 8, 106, 7, 8, 7, 8, 7, 8, 113, 98, 181, 114, 115, 116, 117, 118, 119, 120, 121, 122, 172, 98, 229, 167, 124, 4, 144, 5, 39, 149, 40, 104, 41, 125, 126, 127, 158, 182, 210, 98, 205, 1, 183, 6, 42, 207, 98, 206, 211, 111, 156, 19, 99, 9, 159, 148, 17, 200, 202, 155, 219, 201, 203, 134, 99, 16, 218, 46, 230, 47, 105, 48, 145, 49, 50, 186, 226, 233, 188, 51, 187, 52, 99, 53, 24, 193, 54, 55, 112, 99, 56, 166, 167, 134, 223, 154, 21, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 135, 136, 68, 224, 225, 44, 13, 14, 69, 25, 26, 27, 28, 29, 30, 31, 32, 20, 186, 22, 46, 43, 47, 190, 48, 23, 49, 50, 135, 168, 135, 136, 51, 24, 52, 102, 53, 186, 94, 54, 55, 195, 192, 56, 195, 95, 196, 18, 97, 214, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 129, 130, 68, 7, 8, 25, 26, 27, 28, 29, 30, 31, 32, 125, 126, 127, 96, 18, 7, 177, 103, 107, 108, 109, 110, 123, 132, 133, 140, 142, 98, 150, 157, 153, 160, 161, 165, 164, 173, 174, 175, 176, 179, 180, 191, 194, 197, -10, 198, 208, 204, 215, 199, 220, 232, 234, 236, 231, 222, 228, -11, 217, 209, 221, 235, 237, 141, 216, 189, 184, 213, 143, 0, 0, 45 }; static const yytype_int16 yycheck[] = { 12, 71, 132, 142, 4, 5, 49, 4, 5, 4, 5, 4, 5, 56, 8, 145, 59, 60, 61, 62, 63, 64, 65, 66, 67, 133, 8, 4, 5, 4, 57, 5, 0, 3, 104, 5, 18, 7, 13, 14, 15, 111, 53, 6, 8, 52, 5, 58, 31, 19, 180, 8, 59, 16, 18, 108, 32, 51, 58, 112, 103, 58, 52, 58, 107, 58, 56, 175, 4, 51, 51, 201, 5, 50, 7, 57, 9, 51, 11, 12, 53, 211, 221, 153, 17, 58, 19, 51, 21, 5, 160, 24, 25, 57, 51, 28, 4, 5, 4, 5, 57, 3, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 49, 50, 48, 22, 23, 34, 29, 30, 54, 38, 39, 40, 41, 42, 43, 44, 45, 4, 53, 52, 5, 3, 7, 58, 9, 33, 11, 12, 49, 50, 49, 50, 17, 5, 19, 57, 21, 53, 3, 24, 25, 53, 58, 28, 53, 3, 58, 172, 54, 58, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 29, 30, 48, 4, 5, 38, 39, 40, 41, 42, 43, 44, 45, 13, 14, 15, 20, 203, 4, 5, 10, 10, 57, 20, 26, 57, 51, 57, 3, 51, 8, 5, 27, 18, 18, 5, 4, 55, 4, 4, 57, 4, 52, 51, 5, 51, 55, 59, 4, 52, 55, 4, 59, 30, 9, 4, 10, 217, 52, 52, 59, 59, 182, 59, 52, 52, 97, 195, 154, 150, 186, 99, -1, -1, 38 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 5, 61, 112, 57, 0, 31, 4, 5, 58, 65, 70, 71, 29, 30, 113, 51, 58, 70, 32, 4, 3, 52, 33, 5, 38, 39, 40, 41, 42, 43, 44, 45, 106, 107, 108, 109, 110, 111, 3, 5, 7, 19, 3, 34, 110, 5, 7, 9, 11, 12, 17, 19, 21, 24, 25, 28, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 48, 54, 73, 74, 77, 78, 79, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 94, 95, 96, 97, 98, 102, 103, 104, 105, 3, 3, 20, 54, 8, 51, 80, 81, 57, 10, 18, 57, 81, 10, 57, 20, 26, 18, 57, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 57, 4, 13, 14, 15, 72, 29, 30, 97, 51, 57, 4, 49, 50, 62, 63, 64, 3, 72, 51, 80, 5, 51, 68, 69, 81, 97, 5, 100, 101, 18, 57, 81, 101, 27, 97, 101, 18, 5, 92, 93, 55, 4, 4, 5, 50, 64, 66, 76, 71, 4, 4, 57, 4, 5, 65, 52, 51, 64, 53, 58, 98, 99, 53, 58, 97, 93, 58, 5, 58, 97, 51, 53, 58, 55, 4, 59, 52, 56, 58, 71, 55, 52, 59, 64, 52, 68, 6, 16, 75, 100, 58, 4, 92, 59, 64, 58, 30, 59, 52, 5, 22, 23, 64, 67, 52, 4, 50, 66, 9, 65, 4, 52, 10, 52 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 60, 61, 62, 62, 63, 64, 64, 65, 65, 66, 66, 66, 67, 67, 68, 68, 69, 69, 70, 70, 71, 71, 72, 72, 72, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 77, 77, 77, 77, 78, 79, 79, 80, 80, 81, 81, 82, 82, 83, 83, 84, 84, 85, 85, 86, 86, 87, 87, 88, 88, 89, 89, 90, 90, 91, 91, 92, 93, 93, 94, 94, 94, 95, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 99, 99, 99, 100, 101, 101, 102, 102, 102, 103, 103, 103, 104, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 107, 108, 109, 109, 109, 110, 110, 110, 111, 111, 112, 112, 112, 113, 113 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 8, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 4, 1, 3, 1, 4, 1, 2, 1, 1, 1, 3, 4, 1, 2, 2, 2, 2, 2, 1, 3, 1, 4, 4, 7, 1, 1, 1, 4, 7, 1, 3, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 3, 4, 1, 3, 2, 3, 5, 4, 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, 2, 1, 2, 2, 2, 1, 3, 4, 3, 4, 4, 3, 4, 4, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 9, 3, 7, 6, 4, 1, 1, 1, 1, 2, 4, 3, 1, 1, 1 }; #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 #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* Enable debugging if requested. */ #if _ASN1_YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { FILE *yyoutput = yyo; YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyo, yytype, yyvaluep); YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } 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. | `------------------------------------------------*/ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) { unsigned long yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], &yyvsp[(yyi + 1) - (yynrhs)] ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !_ASN1_YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !_ASN1_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 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #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 yystrlen (const char *yystr) { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # 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 * yystpcpy (char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; else goto append; append: default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ int yyparse (void) { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ 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++; /*--------------------------------------------------------------------. | yynewstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF ((stderr, "Entering state %d\n", yystate)); YY_ASSERT (0 <= yystate && yystate < YYNSTATES); *yyssp = (yytype_int16) yystate; if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE goto yyexhaustedlab; #else { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); # if defined 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; yytype_int16 *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 (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; 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. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) 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 (); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("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 (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END 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 2: #line 154 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_DEFINITIONS|(yyvsp[-5].constant)); _asn1_set_name((yyval.node),_asn1_get_name((yyvsp[-7].node))); _asn1_set_name((yyvsp[-7].node),""); _asn1_set_right((yyvsp[-7].node),(yyvsp[-1].node)); _asn1_set_down((yyval.node),(yyvsp[-7].node)); p_tree=(yyval.node); } #line 1588 "ASN1.c" break; case 3: #line 164 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1594 "ASN1.c" break; case 4: #line 165 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1600 "ASN1.c" break; case 5: #line 168 "ASN1.y" {SAFE_COPY((yyval.str),sizeof((yyval.str)),"-%s",(yyvsp[0].str));} #line 1606 "ASN1.c" break; case 6: #line 171 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1612 "ASN1.c" break; case 7: #line 172 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1618 "ASN1.c" break; case 8: #line 175 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1624 "ASN1.c" break; case 9: #line 176 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1630 "ASN1.c" break; case 10: #line 179 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1636 "ASN1.c" break; case 11: #line 180 "ASN1.y" {SAFE_COPY((yyval.str),sizeof((yyval.str)),"-%s",(yyvsp[0].str));} #line 1642 "ASN1.c" break; case 12: #line 181 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1648 "ASN1.c" break; case 13: #line 184 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1654 "ASN1.c" break; case 14: #line 185 "ASN1.y" {snprintf((yyval.str),sizeof((yyval.str)),"%s",(yyvsp[0].str));} #line 1660 "ASN1.c" break; case 15: #line 188 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_value((yyval.node),(yyvsp[-1].str),strlen((yyvsp[-1].str))+1);} #line 1667 "ASN1.c" break; case 16: #line 190 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_name((yyval.node),(yyvsp[-3].str)); _asn1_set_value((yyval.node),(yyvsp[-1].str),strlen((yyvsp[-1].str))+1);} #line 1675 "ASN1.c" break; case 17: #line 195 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 1681 "ASN1.c" break; case 18: #line 196 "ASN1.y" {(yyval.node)=(yyvsp[-2].node); _asn1_set_right(_asn1_get_last_right((yyvsp[-2].node)),(yyvsp[0].node));} #line 1688 "ASN1.c" break; case 19: #line 200 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_value((yyval.node),(yyvsp[0].str),strlen((yyvsp[0].str))+1);} #line 1695 "ASN1.c" break; case 20: #line 202 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_name((yyval.node),(yyvsp[-3].str)); _asn1_set_value((yyval.node),(yyvsp[-1].str),strlen((yyvsp[-1].str))+1);} #line 1703 "ASN1.c" break; case 21: #line 207 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 1709 "ASN1.c" break; case 22: #line 208 "ASN1.y" {(yyval.node)=(yyvsp[-1].node); _asn1_set_right(_asn1_get_last_right((yyvsp[-1].node)),(yyvsp[0].node));} #line 1716 "ASN1.c" break; case 23: #line 212 "ASN1.y" {(yyval.constant)=CONST_UNIVERSAL;} #line 1722 "ASN1.c" break; case 24: #line 213 "ASN1.y" {(yyval.constant)=CONST_PRIVATE;} #line 1728 "ASN1.c" break; case 25: #line 214 "ASN1.y" {(yyval.constant)=CONST_APPLICATION;} #line 1734 "ASN1.c" break; case 26: #line 217 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_TAG); _asn1_set_value((yyval.node),(yyvsp[-1].str),strlen((yyvsp[-1].str))+1);} #line 1741 "ASN1.c" break; case 27: #line 219 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_TAG | (yyvsp[-2].constant)); _asn1_set_value((yyval.node),(yyvsp[-1].str),strlen((yyvsp[-1].str))+1);} #line 1748 "ASN1.c" break; case 28: #line 223 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 1754 "ASN1.c" break; case 29: #line 224 "ASN1.y" {(yyval.node)=_asn1_mod_type((yyvsp[-1].node),CONST_EXPLICIT);} #line 1760 "ASN1.c" break; case 30: #line 225 "ASN1.y" {(yyval.node)=_asn1_mod_type((yyvsp[-1].node),CONST_IMPLICIT);} #line 1766 "ASN1.c" break; case 31: #line 228 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_DEFAULT); _asn1_set_value((yyval.node),(yyvsp[0].str),strlen((yyvsp[0].str))+1);} #line 1773 "ASN1.c" break; case 32: #line 230 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_DEFAULT|CONST_TRUE);} #line 1779 "ASN1.c" break; case 33: #line 231 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_DEFAULT|CONST_FALSE);} #line 1785 "ASN1.c" break; case 36: #line 240 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_INTEGER);} #line 1791 "ASN1.c" break; case 37: #line 241 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_INTEGER|CONST_LIST); _asn1_set_down((yyval.node),(yyvsp[-1].node));} #line 1798 "ASN1.c" break; case 38: #line 243 "ASN1.y" {(yyval.node)=(yyvsp[-3].node);} #line 1804 "ASN1.c" break; case 39: #line 245 "ASN1.y" {(yyval.node)=(yyvsp[-6].node);} #line 1810 "ASN1.c" break; case 40: #line 248 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_BOOLEAN);} #line 1816 "ASN1.c" break; case 41: #line 251 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_UTC_TIME);} #line 1822 "ASN1.c" break; case 42: #line 252 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_GENERALIZED_TIME);} #line 1828 "ASN1.c" break; case 43: #line 255 "ASN1.y" { } #line 1834 "ASN1.c" break; case 44: #line 257 "ASN1.y" { } #line 1840 "ASN1.c" break; case 45: #line 260 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 1846 "ASN1.c" break; case 46: #line 261 "ASN1.y" {(yyval.node)=(yyvsp[-1].node);} #line 1852 "ASN1.c" break; case 47: #line 264 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_GENERALSTRING);} #line 1858 "ASN1.c" break; case 48: #line 265 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_GENERALSTRING|CONST_SIZE);} #line 1864 "ASN1.c" break; case 49: #line 268 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_NUMERIC_STRING|CONST_UNIVERSAL);} #line 1870 "ASN1.c" break; case 50: #line 269 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_NUMERIC_STRING|CONST_SIZE);} #line 1876 "ASN1.c" break; case 51: #line 272 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_IA5_STRING);} #line 1882 "ASN1.c" break; case 52: #line 273 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_IA5_STRING|CONST_SIZE);} #line 1888 "ASN1.c" break; case 53: #line 276 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_TELETEX_STRING);} #line 1894 "ASN1.c" break; case 54: #line 277 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_TELETEX_STRING|CONST_SIZE);} #line 1900 "ASN1.c" break; case 55: #line 280 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_PRINTABLE_STRING);} #line 1906 "ASN1.c" break; case 56: #line 281 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_PRINTABLE_STRING|CONST_SIZE);} #line 1912 "ASN1.c" break; case 57: #line 284 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_UNIVERSAL_STRING);} #line 1918 "ASN1.c" break; case 58: #line 285 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_UNIVERSAL_STRING|CONST_SIZE);} #line 1924 "ASN1.c" break; case 59: #line 288 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_BMP_STRING);} #line 1930 "ASN1.c" break; case 60: #line 289 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_BMP_STRING|CONST_SIZE);} #line 1936 "ASN1.c" break; case 61: #line 292 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_UTF8_STRING);} #line 1942 "ASN1.c" break; case 62: #line 293 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_UTF8_STRING|CONST_SIZE);} #line 1948 "ASN1.c" break; case 63: #line 296 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_VISIBLE_STRING);} #line 1954 "ASN1.c" break; case 64: #line 297 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_VISIBLE_STRING|CONST_SIZE);} #line 1960 "ASN1.c" break; case 65: #line 300 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_OCTET_STRING);} #line 1966 "ASN1.c" break; case 66: #line 301 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_OCTET_STRING|CONST_SIZE);} #line 1972 "ASN1.c" break; case 67: #line 304 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT); _asn1_set_name((yyval.node),(yyvsp[-3].str)); _asn1_set_value((yyval.node),(yyvsp[-1].str),strlen((yyvsp[-1].str))+1);} #line 1980 "ASN1.c" break; case 68: #line 309 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 1986 "ASN1.c" break; case 69: #line 310 "ASN1.y" {(yyval.node)=(yyvsp[-2].node); _asn1_set_right(_asn1_get_last_right((yyvsp[-2].node)),(yyvsp[0].node));} #line 1993 "ASN1.c" break; case 70: #line 314 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_BIT_STRING);} #line 1999 "ASN1.c" break; case 71: #line 315 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_BIT_STRING|CONST_SIZE);} #line 2005 "ASN1.c" break; case 72: #line 317 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_BIT_STRING|CONST_LIST); _asn1_set_down((yyval.node),(yyvsp[-1].node));} #line 2012 "ASN1.c" break; case 73: #line 322 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_ENUMERATED|CONST_LIST); _asn1_set_down((yyval.node),(yyvsp[-1].node));} #line 2019 "ASN1.c" break; case 74: #line 327 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID);} #line 2025 "ASN1.c" break; case 75: #line 330 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_IDENTIFIER); _asn1_set_value((yyval.node),(yyvsp[0].str),strlen((yyvsp[0].str))+1);} #line 2032 "ASN1.c" break; case 76: #line 332 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_IDENTIFIER|CONST_SIZE); _asn1_set_value((yyval.node),(yyvsp[-1].str),strlen((yyvsp[-1].str))+1);} #line 2039 "ASN1.c" break; case 77: #line 334 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2045 "ASN1.c" break; case 78: #line 335 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2051 "ASN1.c" break; case 79: #line 336 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2057 "ASN1.c" break; case 81: #line 338 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2063 "ASN1.c" break; case 82: #line 339 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2069 "ASN1.c" break; case 83: #line 340 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2075 "ASN1.c" break; case 84: #line 341 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2081 "ASN1.c" break; case 85: #line 342 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2087 "ASN1.c" break; case 86: #line 343 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2093 "ASN1.c" break; case 87: #line 344 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2099 "ASN1.c" break; case 88: #line 345 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2105 "ASN1.c" break; case 89: #line 346 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2111 "ASN1.c" break; case 90: #line 347 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2117 "ASN1.c" break; case 91: #line 348 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2123 "ASN1.c" break; case 92: #line 349 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2129 "ASN1.c" break; case 93: #line 350 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2135 "ASN1.c" break; case 94: #line 351 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2141 "ASN1.c" break; case 95: #line 352 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2147 "ASN1.c" break; case 96: #line 353 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2153 "ASN1.c" break; case 97: #line 354 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_NULL);} #line 2159 "ASN1.c" break; case 98: #line 357 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2165 "ASN1.c" break; case 99: #line 358 "ASN1.y" {(yyval.node)=_asn1_mod_type((yyvsp[0].node),CONST_TAG); _asn1_set_right((yyvsp[-1].node),_asn1_get_down((yyval.node))); _asn1_set_down((yyval.node),(yyvsp[-1].node));} #line 2173 "ASN1.c" break; case 100: #line 363 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2179 "ASN1.c" break; case 101: #line 364 "ASN1.y" {(yyval.node)=_asn1_mod_type((yyvsp[-1].node),CONST_DEFAULT); _asn1_set_right((yyvsp[0].node),_asn1_get_down((yyval.node))); _asn1_set_down((yyval.node),(yyvsp[0].node));} #line 2187 "ASN1.c" break; case 102: #line 367 "ASN1.y" {(yyval.node)=_asn1_mod_type((yyvsp[-1].node),CONST_OPTION);} #line 2193 "ASN1.c" break; case 103: #line 370 "ASN1.y" {(yyval.node)=_asn1_set_name((yyvsp[0].node),(yyvsp[-1].str));} #line 2199 "ASN1.c" break; case 104: #line 373 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2205 "ASN1.c" break; case 105: #line 374 "ASN1.y" {(yyval.node)=(yyvsp[-2].node); _asn1_set_right(_asn1_get_last_right((yyvsp[-2].node)),(yyvsp[0].node));} #line 2212 "ASN1.c" break; case 106: #line 378 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_SEQUENCE); _asn1_set_down((yyval.node),(yyvsp[-1].node));} #line 2219 "ASN1.c" break; case 107: #line 380 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_SEQUENCE_OF); _asn1_set_down((yyval.node),(yyvsp[0].node));} #line 2226 "ASN1.c" break; case 108: #line 382 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_SEQUENCE_OF|CONST_SIZE); _asn1_set_down((yyval.node),(yyvsp[0].node));} #line 2233 "ASN1.c" break; case 109: #line 386 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_SET); _asn1_set_down((yyval.node),(yyvsp[-1].node));} #line 2240 "ASN1.c" break; case 110: #line 388 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_SET_OF); _asn1_set_down((yyval.node),(yyvsp[0].node));} #line 2247 "ASN1.c" break; case 111: #line 390 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_SET_OF|CONST_SIZE); _asn1_set_down((yyval.node),(yyvsp[0].node));} #line 2254 "ASN1.c" break; case 112: #line 394 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_CHOICE); _asn1_set_down((yyval.node),(yyvsp[-1].node));} #line 2261 "ASN1.c" break; case 113: #line 398 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_ANY);} #line 2267 "ASN1.c" break; case 114: #line 399 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_ANY|CONST_DEFINED_BY); _asn1_set_down((yyval.node),_asn1_add_static_node(&e_list, ASN1_ETYPE_CONSTANT)); _asn1_set_name(_asn1_get_down((yyval.node)),(yyvsp[0].str));} #line 2275 "ASN1.c" break; case 115: #line 404 "ASN1.y" { SAFE_COPY((yyval.str),sizeof((yyval.str)),"%s",last_token); } #line 2281 "ASN1.c" break; case 116: #line 405 "ASN1.y" { SAFE_COPY((yyval.str),sizeof((yyval.str)),"%s",last_token); } #line 2287 "ASN1.c" break; case 117: #line 406 "ASN1.y" { SAFE_COPY((yyval.str),sizeof((yyval.str)),"%s",last_token); } #line 2293 "ASN1.c" break; case 118: #line 407 "ASN1.y" { SAFE_COPY((yyval.str),sizeof((yyval.str)),"%s",last_token); } #line 2299 "ASN1.c" break; case 119: #line 408 "ASN1.y" { SAFE_COPY((yyval.str),sizeof((yyval.str)),"%s",last_token); } #line 2305 "ASN1.c" break; case 120: #line 409 "ASN1.y" { SAFE_COPY((yyval.str),sizeof((yyval.str)),"%s",last_token); } #line 2311 "ASN1.c" break; case 121: #line 410 "ASN1.y" { SAFE_COPY((yyval.str),sizeof((yyval.str)),"%s",last_token); } #line 2317 "ASN1.c" break; case 122: #line 411 "ASN1.y" { SAFE_COPY((yyval.str),sizeof((yyval.str)),"%s",last_token); } #line 2323 "ASN1.c" break; case 123: #line 414 "ASN1.y" { #ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION fprintf(stderr, "%s:%u: Warning: %s is a built-in ASN.1 type.\n", file_name, line_number, (yyvsp[-8].str)); #endif } #line 2333 "ASN1.c" break; case 124: #line 421 "ASN1.y" { (yyval.node)=_asn1_set_name((yyvsp[0].node),(yyvsp[-2].str));} #line 2339 "ASN1.c" break; case 125: #line 425 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID|CONST_ASSIGN); _asn1_set_name((yyval.node),(yyvsp[-6].str)); _asn1_set_down((yyval.node),(yyvsp[-1].node));} #line 2347 "ASN1.c" break; case 126: #line 429 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID|CONST_ASSIGN|CONST_1_PARAM); _asn1_set_name((yyval.node),(yyvsp[-5].str)); _asn1_set_value((yyval.node),(yyvsp[-4].str),strlen((yyvsp[-4].str))+1); _asn1_set_down((yyval.node),(yyvsp[-1].node));} #line 2356 "ASN1.c" break; case 127: #line 434 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_INTEGER|CONST_ASSIGN); _asn1_set_name((yyval.node),(yyvsp[-3].str)); _asn1_set_value((yyval.node),(yyvsp[0].str),strlen((yyvsp[0].str))+1);} #line 2364 "ASN1.c" break; case 128: #line 439 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2370 "ASN1.c" break; case 129: #line 440 "ASN1.y" {(yyval.node)=NULL;} #line 2376 "ASN1.c" break; case 130: #line 441 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2382 "ASN1.c" break; case 131: #line 444 "ASN1.y" {(yyval.node)=(yyvsp[0].node);} #line 2388 "ASN1.c" break; case 132: #line 445 "ASN1.y" {(yyval.node)=(yyvsp[-1].node); if ((yyvsp[-1].node) && (yyvsp[0].node)) _asn1_set_right(_asn1_get_last_right((yyvsp[-1].node)),(yyvsp[0].node));} #line 2395 "ASN1.c" break; case 133: #line 449 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID); _asn1_set_down((yyval.node),(yyvsp[-1].node)); _asn1_set_name((yyval.node),(yyvsp[-3].str));} #line 2403 "ASN1.c" break; case 134: #line 452 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID); _asn1_set_name((yyval.node),(yyvsp[-2].str));} #line 2410 "ASN1.c" break; case 135: #line 454 "ASN1.y" {(yyval.node)=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID); _asn1_set_name((yyval.node),(yyvsp[0].str));} #line 2417 "ASN1.c" break; case 136: #line 478 "ASN1.y" {(yyval.constant)=CONST_EXPLICIT;} #line 2423 "ASN1.c" break; case 137: #line 479 "ASN1.y" {(yyval.constant)=CONST_IMPLICIT;} #line 2429 "ASN1.c" break; #line 2433 "ASN1.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; 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. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", 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: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); 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 (!yypact_value_is_default (yyn)) { 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; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif return yyresult; } #line 483 "ASN1.y" static const char *key_word[] = { "::=","OPTIONAL","INTEGER","SIZE","OCTET","STRING", "SEQUENCE","BIT","UNIVERSAL","PRIVATE","OPTIONAL", "DEFAULT","CHOICE","OF","OBJECT","IDENTIFIER", "BOOLEAN","TRUE","FALSE","APPLICATION","ANY","DEFINED", "SET","BY","EXPLICIT","IMPLICIT","DEFINITIONS","TAGS", "BEGIN","END","UTCTime","GeneralizedTime", "GeneralString","FROM","IMPORTS","NULL","ENUMERATED", "NumericString", "IA5String", "TeletexString", "PrintableString", "UniversalString", "BMPString", "UTF8String", "VisibleString"}; static const int key_word_token[] = { ASSIG, OPTIONAL, INTEGER, SIZE, OCTET, STRING, SEQUENCE, BIT, UNIVERSAL, PRIVATE, OPTIONAL, DEFAULT, CHOICE, OF, OBJECT, STR_IDENTIFIER, BOOLEAN, ASN1_TRUE, ASN1_FALSE, APPLICATION, ANY, DEFINED, SET, BY, EXPLICIT, IMPLICIT, DEFINITIONS, TAGS, BEGIN, END, UTCTime, GeneralizedTime, GeneralString, FROM, IMPORTS, TOKEN_NULL, ENUMERATED, NumericString, IA5String, TeletexString, PrintableString, UniversalString, BMPString, UTF8String, VisibleString }; /*************************************************************/ /* Function: _asn1_yylex */ /* Description: looks for tokens in file_asn1 pointer file. */ /* Return: int */ /* Token identifier or ASCII code or 0(zero: End Of File) */ /*************************************************************/ static int _asn1_yylex (void) { int c, counter = 0, k, lastc; char string[ASN1_MAX_NAME_SIZE + 1]; /* will contain the next token */ size_t i; while (1) { while ((c = fgetc (file_asn1)) == ' ' || c == '\t' || c == '\n') if (c == '\n') line_number++; if (c == EOF) { snprintf (last_token, sizeof(last_token), "End Of File"); return 0; } if (c == '(' || c == ')' || c == '[' || c == ']' || c == '{' || c == '}' || c == ',' || c == '.' || c == '+' || c == '|') { last_token[0] = c; last_token[1] = 0; return c; } if (c == '-') { /* Maybe the first '-' of a comment */ if ((c = fgetc (file_asn1)) != '-') { ungetc (c, file_asn1); last_token[0] = '-'; last_token[1] = 0; return '-'; } else { /* Comments */ lastc = 0; counter = 0; /* A comment finishes at the next double hypen or the end of line */ while ((c = fgetc (file_asn1)) != EOF && c != '\n' && (lastc != '-' || (lastc == '-' && c != '-'))) lastc = c; if (c == EOF) { snprintf (last_token, sizeof(last_token), "End Of File"); return 0; } else { if (c == '\n') line_number++; continue; /* next char, please! (repeat the search) */ } } } string[counter++] = (char) c; /* Till the end of the token */ while (! ((c = fgetc (file_asn1)) == EOF || c == ' ' || c == '\t' || c == '\n' || c == '(' || c == ')' || c == '[' || c == ']' || c == '{' || c == '}' || c == ',' || c == '.')) { if (counter >= ASN1_MAX_NAME_SIZE) { result_parse = ASN1_NAME_TOO_LONG; return 0; } string[counter++] = (char) c; } ungetc (c, file_asn1); string[counter] = 0; snprintf (last_token, sizeof(last_token), "%s", string); /* Is STRING a number? */ for (k = 0; k < counter; k++) if (!c_isdigit ((int)string[k])) break; if (k >= counter) { snprintf (yylval.str, sizeof(yylval.str), "%s", string); return NUM; /* return the number */ } /* Is STRING a keyword? */ for (i = 0; i < (sizeof (key_word) / sizeof (char *)); i++) if (!strcmp (string, key_word[i])) return key_word_token[i]; /* STRING is an IDENTIFIER */ snprintf (yylval.str, sizeof(yylval.str), "%s", string); return IDENTIFIER; } } /*************************************************************/ /* Function: _asn1_create_errorDescription */ /* Description: creates a string with the description of the*/ /* error. */ /* Parameters: */ /* error : error to describe. */ /* error_desc: string that will contain the */ /* description. */ /*************************************************************/ static void _asn1_create_errorDescription (int error, char *error_desc) { if (error_desc == NULL) return; switch (error) { case ASN1_FILE_NOT_FOUND: snprintf(error_desc, ASN1_MAX_ERROR_DESCRIPTION_SIZE, "%s file was not found", file_name); break; case ASN1_SYNTAX_ERROR: snprintf(error_desc, ASN1_MAX_ERROR_DESCRIPTION_SIZE, "%s", last_error); break; case ASN1_NAME_TOO_LONG: snprintf (error_desc, ASN1_MAX_ERROR_DESCRIPTION_SIZE, "%s:%u: name too long (more than %u characters)", file_name, line_number, (unsigned)ASN1_MAX_NAME_SIZE); break; case ASN1_IDENTIFIER_NOT_FOUND: snprintf (error_desc, ASN1_MAX_ERROR_DESCRIPTION_SIZE, "%s:: identifier '%s' not found", file_name, _asn1_identifierMissing); break; default: error_desc[0] = 0; break; } } /** * asn1_parser2tree: * @file: specify the path and the name of file that contains * ASN.1 declarations. * @definitions: return the pointer to the structure created from * "file" ASN.1 declarations. * @error_desc: return the error description or an empty * string if success. * * Function used to start the parse algorithm. Creates the structures * needed to manage the definitions included in @file file. * * Returns: %ASN1_SUCCESS if the file has a correct syntax and every * identifier is known, %ASN1_ELEMENT_NOT_EMPTY if @definitions not * %NULL, %ASN1_FILE_NOT_FOUND if an error occurred while * opening @file, %ASN1_SYNTAX_ERROR if the syntax is not * correct, %ASN1_IDENTIFIER_NOT_FOUND if in the file there is an * identifier that is not defined, %ASN1_NAME_TOO_LONG if in the * file there is an identifier with more than %ASN1_MAX_NAME_SIZE * characters. **/ int asn1_parser2tree (const char *file, asn1_node * definitions, char *error_desc) { if (*definitions != NULL) { result_parse = ASN1_ELEMENT_NOT_EMPTY; goto error; } file_name = file; /* open the file to parse */ file_asn1 = fopen (file, "r"); if (file_asn1 == NULL) { result_parse = ASN1_FILE_NOT_FOUND; goto error; } result_parse = ASN1_SUCCESS; line_number = 1; yyparse (); fclose (file_asn1); if (result_parse != ASN1_SUCCESS) goto error; /* set IMPLICIT or EXPLICIT property */ _asn1_set_default_tag (p_tree); /* set CONST_SET and CONST_NOT_USED */ _asn1_type_set_config (p_tree); /* check the identifier definitions */ result_parse = _asn1_check_identifier (p_tree); if (result_parse != ASN1_SUCCESS) goto error; /* Convert into DER coding the value assign to INTEGER constants */ _asn1_change_integer_value (p_tree); /* Expand the IDs of OBJECT IDENTIFIER constants */ result_parse = _asn1_expand_object_id (&e_list, p_tree); if (result_parse != ASN1_SUCCESS) goto error; /* success */ *definitions = p_tree; _asn1_delete_list (e_list); e_list = NULL; p_tree = NULL; *error_desc = 0; return result_parse; error: _asn1_delete_list_and_nodes (e_list); e_list = NULL; p_tree = NULL; _asn1_create_errorDescription (result_parse, error_desc); return result_parse; } /** * asn1_parser2array: * @inputFileName: specify the path and the name of file that * contains ASN.1 declarations. * @outputFileName: specify the path and the name of file that will * contain the C vector definition. * @vectorName: specify the name of the C vector. * @error_desc: return the error description or an empty * string if success. * * Function that generates a C structure from an ASN1 file. Creates a * file containing a C vector to use to manage the definitions * included in @inputFileName file. If @inputFileName is * "/aa/bb/xx.yy" and @outputFileName is %NULL, the file created is * "/aa/bb/xx_asn1_tab.c". If @vectorName is %NULL the vector name * will be "xx_asn1_tab". * * Returns: %ASN1_SUCCESS if the file has a correct syntax and every * identifier is known, %ASN1_FILE_NOT_FOUND if an error occurred * while opening @inputFileName, %ASN1_SYNTAX_ERROR if the syntax is * not correct, %ASN1_IDENTIFIER_NOT_FOUND if in the file there is * an identifier that is not defined, %ASN1_NAME_TOO_LONG if in the * file there is an identifier with more than %ASN1_MAX_NAME_SIZE * characters. **/ int asn1_parser2array (const char *inputFileName, const char *outputFileName, const char *vectorName, char *error_desc) { char *file_out_name = NULL; char *vector_name = NULL; const char *char_p, *slash_p, *dot_p; p_tree = NULL; file_name = inputFileName; /* open the file to parse */ file_asn1 = fopen (inputFileName, "r"); if (file_asn1 == NULL) { result_parse = ASN1_FILE_NOT_FOUND; goto error2; } result_parse = ASN1_SUCCESS; line_number = 1; yyparse (); fclose (file_asn1); if (result_parse != ASN1_SUCCESS) goto error1; /* set IMPLICIT or EXPLICIT property */ _asn1_set_default_tag (p_tree); /* set CONST_SET and CONST_NOT_USED */ _asn1_type_set_config (p_tree); /* check the identifier definitions */ result_parse = _asn1_check_identifier (p_tree); if (result_parse != ASN1_SUCCESS) goto error2; /* all identifier defined */ /* searching the last '/' and '.' in inputFileName */ char_p = inputFileName; slash_p = inputFileName; while ((char_p = strchr (char_p, '/'))) { char_p++; slash_p = char_p; } char_p = slash_p; dot_p = inputFileName + strlen (inputFileName); while ((char_p = strchr (char_p, '.'))) { dot_p = char_p; char_p++; } if (outputFileName == NULL) { /* file_out_name = inputFileName + _asn1_tab.c */ file_out_name = malloc (dot_p - inputFileName + 1 + sizeof ("_asn1_tab.c")-1); memcpy (file_out_name, inputFileName, dot_p - inputFileName); file_out_name[dot_p - inputFileName] = 0; strcat (file_out_name, "_asn1_tab.c"); } else { /* file_out_name = inputFileName */ file_out_name = strdup(outputFileName); } if (vectorName == NULL) { unsigned len, i; /* vector_name = file name + _asn1_tab */ vector_name = malloc (dot_p - slash_p + 1 + sizeof("_asn1_tab") - 1); memcpy (vector_name, slash_p, dot_p - slash_p); vector_name[dot_p - slash_p] = 0; strcat (vector_name, "_asn1_tab"); len = strlen(vector_name); for (i=0;i. WFLAGS ?= --enable-gcc-warnings ADDFLAGS ?= CFGFLAGS ?= --enable-gtk-doc --enable-gtk-doc-pdf $(ADDFLAGS) $(WFLAGS) INDENT_SOURCES = `find . -name \*.[ch]|grep -v -e ^./gl -e ^./lib/gl -e ^./build-aux/ -e ^./lib/ASN1.c -e ^./tests/Test_tree_asn1_tab.c` ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) .DEFAULT_GOAL := bootstrap endif local-checks-to-skip = sc_prohibit_strcmp sc_prohibit_have_config_h \ sc_require_config_h sc_require_config_h_first \ sc_immutable_NEWS sc_prohibit_magic_number_exit \ sc_bindtextdomain sc_GPL_version sc_prohibit_always_true_header_tests \ sc_prohibit_gnu_make_extensions VC_LIST_ALWAYS_EXCLUDE_REGEX = ^(maint.mk|gtk-doc.make|build-aux/.*|gl/.*|lib/gllib/.*|lib/glm4/.*|lib/ASN1\.c|m4/pkg.m4|doc/gdoc|windows/.*|doc/fdl-1.3.texi|fuzz/.*_fuzzer.(in|repro)/.*)$$ update-copyright-env = UPDATE_COPYRIGHT_USE_INTERVALS=1 # Explicit syntax-check exceptions. exclude_file_name_regexp--sc_copyright_check = ^./gnulib/.*$$ exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = ^tests/TestIndef.p12$$ exclude_file_name_regexp--sc_GPL_version = ^lib/includes/libtasn1.h$$ exclude_file_name_regexp--sc_program_name = ^tests/|examples/ exclude_file_name_regexp--sc_prohibit_atoi_atof = ^src/asn1Coding.c|src/asn1Decoding.c$$ exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = ^tests/.*.(cer|der|asn|txt|p12)|tests/TestIndef.p12|msvc/.*$$ exclude_file_name_regexp--sc_error_message_uppercase = ^tests/Test_tree.c$$ exclude_file_name_regexp--sc_unmarked_diagnostics = ^tests/Test_tree.c$$ exclude_file_name_regexp--sc_prohibit_undesirable_word_seq = ^msvc/.*$$ exclude_file_name_regexp--sc_trailing_blank = ^msvc/.*$$|lib/gl/override/m4/valgrind-tests.m4 exclude_file_name_regexp--sc_useless_cpp_parens = ^lib/includes/libtasn1.h$$ exclude_file_name_regexp--sc_prohibit_intprops_without_use = ^lib/decoding.c$$ exclude_file_name_regexp--sc_m4_quote_check = ^m4-gl/.*$$ exclude_file_name_regexp--sc_makefile_at_at_check = 'lib/gl/Makefile.am' exclude_file_name_regexp--sc_prohibit_eol_brackets = ^(tests/.*|fuzz/.*|bootstrap)$$ sc_prohibit_eol_brackets: @prohibit='.+\) *{$$' \ halt='please block bracket { use in a separate line' \ $(_sc_search_regexp) gpg_key_ID = b565716f autoreconf: @echo "Running ./bootstrap" ./bootstrap bootstrap: autoreconf review-diff: git diff `git describe --abbrev=0`.. \ | grep -v -e ^index -e '^diff --git' \ | filterdiff -p 1 -x 'gl/*' -x 'build-aux/*' -x 'lib/gl*' -x 'po/*' -x 'maint.mk' -x '.gitignore' -x '.x-sc*' -x ChangeLog -x GNUmakefile -x 'lib/ASN1.c' \ | less # Release htmldir = ../www-$(PACKAGE) coverage-copy: rm -fv `find $(htmldir)/coverage -type f | grep -v CVS` mkdir -p $(htmldir)/coverage/ cp -rv $(COVERAGE_OUT)/* $(htmldir)/coverage/ coverage-upload: cd $(htmldir) && \ find coverage -type d -! -name CVS -! -name '.' \ -exec cvs add {} \; && \ find coverage -type d -! -name CVS -! -name '.' \ -exec sh -c "cvs add -kb {}/*.png" \; && \ find coverage -type d -! -name CVS -! -name '.' \ -exec sh -c "cvs add {}/*.html" \; && \ cvs add coverage/libtasn1.info coverage/gcov.css || true && \ cvs commit -m "Update." coverage clang: make clean scan-build ./configure rm -rf scan.tmp scan-build -o scan.tmp make clang-copy: rm -fv `find $(htmldir)/clang-analyzer -type f | grep -v CVS` mkdir -p $(htmldir)/clang-analyzer/ cp -rv scan.tmp/*/* $(htmldir)/clang-analyzer/ clang-upload: cd $(htmldir) && \ cvs add clang-analyzer || true && \ cvs add clang-analyzer/*.css clang-analyzer/*.js \ clang-analyzer/*.html || true && \ cvs commit -m "Update." clang-analyzer gendoc-copy: cd doc && $(SHELL) ../build-aux/gendocs.sh \ --html "--css-include=texinfo.css" \ -o ../$(htmldir)/manual/ $(PACKAGE) "$(PACKAGE_NAME)" gendoc-upload: cd $(htmldir) && \ cvs add manual || true && \ cvs add manual/html_node || true && \ cvs add -kb manual/*.gz manual/*.pdf || true && \ cvs add manual/*.txt manual/*.html \ manual/html_node/*.html || true && \ cvs commit -m "Update." manual/ gtkdoc-copy: mkdir -p $(htmldir)/reference/ cp -v doc/reference/$(PACKAGE).pdf \ doc/reference/html/*.html \ doc/reference/html/*.png \ doc/reference/html/*.devhelp2 \ doc/reference/html/*.css \ $(htmldir)/reference/ gtkdoc-upload: cd $(htmldir) && \ cvs add reference || true && \ cvs add -kb reference/*.png reference/*.pdf || true && \ cvs add reference/*.html reference/*.css \ reference/*.devhelp2 || true && \ cvs commit -m "Update." reference/ ChangeLog: (cd "$(srcdir)" ; if test -d .git ; then git log --no-merges --no-decorate --pretty --since="2014 November 07"|grep -v ^'commit' ; else echo "Empty" ; fi) > ChangeLog tag = $(PACKAGE)_`echo $(VERSION) | sed 's/\./_/g'` tarball: ! git tag -l $(tag) | grep $(PACKAGE) > /dev/null rm -f ChangeLog $(MAKE) ChangeLog distcheck source: git tag -u b565716f -m $(VERSION) $(tag) RELEASE_TYPE?=stable release-upload-ftp: build-aux/gnupload --to ftp.gnu.org:$(PACKAGE) $(distdir).tar.gz release: release-upload-ftp .PHONY: bootstrap autoreconf libtasn1-4.16.0/GNUmakefile0000644000000000000000000001073613514140427012270 00000000000000# Having a separate GNUmakefile lets me 'include' the dynamically # generated rules created via cfg.mk (package-local configuration) # as well as maint.mk (generic maintainer rules). # This makefile is used only if you run GNU Make. # It is necessary if you want to build targets usually of interest # only to the maintainer. # Copyright (C) 2001, 2003, 2006-2019 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 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # If the user runs GNU make but has not yet run ./configure, # give them a diagnostic. _gl-Makefile := $(wildcard [M]akefile) ifneq ($(_gl-Makefile),) # Make tar archive easier to reproduce. export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner # Allow the user to add to this in the Makefile. ALL_RECURSIVE_TARGETS = include Makefile # Some projects override e.g., _autoreconf here. -include $(srcdir)/cfg.mk # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v include $(srcdir)/maint.mk # Ensure that $(VERSION) is up to date for dist-related targets, but not # for others: rerunning autoreconf and recompiling everything isn't cheap. _have-git-version-gen := \ $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes) ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL)) _is-dist-target ?= $(filter-out %clean, \ $(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS))) _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS))) ifneq (,$(_is-dist-target)$(_is-install-target)) _curr-ver := $(shell cd $(srcdir) \ && $(_build-aux)/git-version-gen \ .tarball-version \ $(git-version-gen-tag-sed-script)) ifneq ($(_curr-ver),$(VERSION)) ifeq ($(_curr-ver),UNKNOWN) $(info WARNING: unable to verify if $(VERSION) is the correct version) else ifneq (,$(_is-install-target)) # GNU Coding Standards state that 'make install' should not cause # recompilation after 'make all'. But as long as changing the version # string alters config.h, the cost of having 'make all' always have an # up-to-date version is prohibitive. So, as a compromise, we merely # warn when installing a version string that is out of date; the user # should run 'autoreconf' (or something like 'make distcheck') to # fix the version, 'make all' to propagate it, then 'make install'. $(info WARNING: version string $(VERSION) is out of date;) $(info run '$(MAKE) _version' to fix it) else $(info INFO: running autoreconf for new version string: $(_curr-ver)) GNUmakefile: _version touch GNUmakefile endif endif endif endif endif .PHONY: _version _version: cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf) $(MAKE) $(AM_MAKEFLAGS) Makefile else .DEFAULT_GOAL := abort-due-to-no-makefile srcdir = . # The package can override .DEFAULT_GOAL to run actions like autoreconf. -include ./cfg.mk # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v include ./maint.mk ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) $(MAKECMDGOALS): abort-due-to-no-makefile endif abort-due-to-no-makefile: @echo There seems to be no Makefile in this directory. 1>&2 @echo "You must run ./configure before running 'make'." 1>&2 @exit 1 endif # Tell version 3.79 and up of GNU make to not build goals in this # directory in parallel, in case someone tries to build multiple # targets, and one of them can cause a recursive target to be invoked. # Only set this if Automake doesn't provide it. AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) \ dist distcheck tags ctags ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS) ifneq ($(word 2, $(MAKECMDGOALS)), ) ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), ) .NOTPARALLEL: endif endif libtasn1-4.16.0/maint.mk0000644000000000000000000020147513514402112011651 00000000000000# -*-Makefile-*- # This Makefile fragment tries to be general-purpose enough to be # used by many projects via the gnulib maintainer-makefile module. ## Copyright (C) 2001-2019 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 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . # This is reported not to work with make-3.79.1 # ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) ME := maint.mk # These variables ought to be defined through the configure.ac section # of the module description. But some packages import this file directly, # ignoring the module description. AWK ?= awk GREP ?= grep SED ?= sed # Helper variables. _empty = _sp = $(_empty) $(_empty) # _equal,S1,S2 # ------------ # If S1 == S2, return S1, otherwise the empty string. _equal = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) # member-check,VARIABLE,VALID-VALUES # ---------------------------------- # Check that $(VARIABLE) is in the space-separated list of VALID-VALUES, and # return it. Die otherwise. member-check = \ $(strip \ $(if $($(1)), \ $(if $(findstring $(_sp),$($(1))), \ $(error invalid $(1): '$($(1))', expected $(2)), \ $(or $(findstring $(_sp)$($(1))$(_sp),$(_sp)$(2)$(_sp)), \ $(error invalid $(1): '$($(1))', expected $(2)))), \ $(error $(1) undefined))) # Do not save the original name or timestamp in the .tar.gz file. # Use --rsyncable if available. gzip_rsyncable := \ $(shell gzip --help 2>/dev/null|$(GREP) rsyncable >/dev/null \ && printf %s --rsyncable) GZIP_ENV = '--no-name --best $(gzip_rsyncable)' GIT = git VC = $(GIT) VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir) # You can override this variable in cfg.mk if your gnulib submodule lives # in a different location. gnulib_dir ?= $(srcdir)/gnulib # You can override this variable in cfg.mk to set your own regexp # matching files to ignore. VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$ # This is to preprocess robustly the output of $(VC_LIST), so that even # when $(srcdir) is a pathological name like "....", the leading sed command # removes only the intended prefix. _dot_escaped_srcdir = $(subst .,\.,$(srcdir)) # Post-process $(VC_LIST) output, prepending $(srcdir)/, but only # when $(srcdir) is not ".". ifeq ($(srcdir),.) _prepend_srcdir_prefix = else _prepend_srcdir_prefix = | $(SED) 's|^|$(srcdir)/|' endif # In order to be able to consistently filter "."-relative names, # (i.e., with no $(srcdir) prefix), this definition is careful to # remove any $(srcdir) prefix, and to restore what it removes. _sc_excl = \ $(or $(exclude_file_name_regexp--$@),^$$) VC_LIST_EXCEPT = \ $(VC_LIST) | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ | if test -f $(srcdir)/.x-$@; then $(GREP) -vEf $(srcdir)/.x-$@; \ else $(GREP) -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \ | $(GREP) -Ev -e '($(VC_LIST_ALWAYS_EXCLUDE_REGEX)|$(_sc_excl))' \ $(_prepend_srcdir_prefix) ifeq ($(origin prev_version_file), undefined) prev_version_file = $(srcdir)/.prev-version endif PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null) VERSION_REGEXP = $(subst .,\.,$(VERSION)) PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION)) ifeq ($(VC),$(GIT)) this-vc-tag = v$(VERSION) this-vc-tag-regexp = v$(VERSION_REGEXP) else tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]') tag-this-version = $(subst .,_,$(VERSION)) this-vc-tag = $(tag-package)-$(tag-this-version) this-vc-tag-regexp = $(this-vc-tag) endif my_distdir = $(PACKAGE)-$(VERSION) # Old releases are stored here. release_archive_dir ?= ../release # If RELEASE_TYPE is undefined, but RELEASE is, use its second word. # But overwrite VERSION. ifdef RELEASE VERSION := $(word 1, $(RELEASE)) RELEASE_TYPE ?= $(word 2, $(RELEASE)) endif # Validate and return $(RELEASE_TYPE), or die. RELEASE_TYPES = alpha beta stable release-type = $(call member-check,RELEASE_TYPE,$(RELEASE_TYPES)) # Override gnu_rel_host and url_dir_list in cfg.mk if these are not right. # Use alpha.gnu.org for alpha and beta releases. # Use ftp.gnu.org for stable releases. gnu_ftp_host-alpha = alpha.gnu.org gnu_ftp_host-beta = alpha.gnu.org gnu_ftp_host-stable = ftp.gnu.org gnu_rel_host ?= $(gnu_ftp_host-$(release-type)) url_dir_list ?= $(if $(call _equal,$(gnu_rel_host),ftp.gnu.org), \ https://ftpmirror.gnu.org/$(PACKAGE), \ https://$(gnu_rel_host)/gnu/$(PACKAGE)) # Override this in cfg.mk if you are using a different format in your # NEWS file. today = $(shell date +%Y-%m-%d) # Select which lines of NEWS are searched for $(news-check-regexp). # This is a sed line number spec. The default says that we search # lines 1..10 of NEWS for $(news-check-regexp). # If you want to search only line 3 or only lines 20-22, use "3" or "20,22". news-check-lines-spec ?= 1,10 news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)' # Prevent programs like 'sort' from considering distinct strings to be equal. # Doing it here saves us from having to set LC_ALL elsewhere in this file. export LC_ALL = C ## --------------- ## ## Sanity checks. ## ## --------------- ## ifneq ($(_gl-Makefile),) _cfg_mk := $(wildcard $(srcdir)/cfg.mk) # Collect the names of rules starting with 'sc_'. syntax-check-rules := $(sort $(shell $(SED) -n \ 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' $(srcdir)/$(ME) $(_cfg_mk))) .PHONY: $(syntax-check-rules) ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0) local-checks-available += $(syntax-check-rules) else local-checks-available += no-vc-detected no-vc-detected: @echo "No version control files detected; skipping syntax check" endif .PHONY: $(local-checks-available) # Arrange to print the name of each syntax-checking rule just before running it. $(syntax-check-rules): %: %.m sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules)) .PHONY: $(sc_m_rules_) $(sc_m_rules_): @echo $(patsubst sc_%.m, %, $@) @date +%s.%N > .sc-start-$(basename $@) # Compute and print the elapsed time for each syntax-check rule. sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules)) .PHONY: $(sc_z_rules_) $(sc_z_rules_): %.z: % @end=$$(date +%s.%N); \ start=$$(cat .sc-start-$*); \ rm -f .sc-start-$*; \ $(AWK) -v s=$$start -v e=$$end \ 'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null # The patsubst here is to replace each sc_% rule with its sc_%.z wrapper # that computes and prints elapsed time. local-check := \ $(patsubst sc_%, sc_%.z, \ $(filter-out $(local-checks-to-skip), $(local-checks-available))) syntax-check: $(local-check) endif # _sc_search_regexp # # This macro searches for a given construct in the selected files and # then takes some action. # # Parameters (shell variables): # # prohibit | require # # Regular expression (ERE) denoting either a forbidden construct # or a required construct. Those arguments are exclusive. # # exclude # # Regular expression (ERE) denoting lines to ignore that matched # a prohibit construct. For example, this can be used to exclude # comments that mention why the nearby code uses an alternative # construct instead of the simpler prohibited construct. # # in_vc_files | in_files # # grep-E-style regexp selecting the files to check. For in_vc_files, # the regexp is used to select matching files from the list of all # version-controlled files; for in_files, it's from the names printed # by "find $(srcdir)". When neither is specified, use all files that # are under version control. # # containing | non_containing # # Select the files (non) containing strings matching this regexp. # If both arguments are specified then CONTAINING takes # precedence. # # with_grep_options # # Extra options for grep. # # ignore_case # # Ignore case. # # halt # # Message to display before to halting execution. # # Finally, you may exempt files based on an ERE matching file names. # For example, to exempt from the sc_space_tab check all files with the # .diff suffix, set this Make variable: # # exclude_file_name_regexp--sc_space_tab = \.diff$ # # Note that while this functionality is mostly inherited via VC_LIST_EXCEPT, # when filtering by name via in_files, we explicitly filter out matching # names here as well. # Initialize each, so that envvar settings cannot interfere. export require = export prohibit = export exclude = export in_vc_files = export in_files = export containing = export non_containing = export halt = export with_grep_options = # By default, _sc_search_regexp does not ignore case. export ignore_case = _ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :) define _sc_say_and_exit dummy=; : so we do not need a semicolon before each use; \ { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; }; endef define _sc_search_regexp dummy=; : so we do not need a semicolon before each use; \ \ : Check arguments; \ test -n "$$prohibit" && test -n "$$require" \ && { msg='Cannot specify both prohibit and require' \ $(_sc_say_and_exit) } || :; \ test -z "$$prohibit" && test -z "$$require" \ && { msg='Should specify either prohibit or require' \ $(_sc_say_and_exit) } || :; \ test -z "$$prohibit" && test -n "$$exclude" \ && { msg='Use of exclude requires a prohibit pattern' \ $(_sc_say_and_exit) } || :; \ test -n "$$in_vc_files" && test -n "$$in_files" \ && { msg='Cannot specify both in_vc_files and in_files' \ $(_sc_say_and_exit) } || :; \ test "x$$halt" != x \ || { msg='halt not defined' $(_sc_say_and_exit) }; \ \ : Filter by file name; \ if test -n "$$in_files"; then \ files=$$(find $(srcdir) | $(GREP) -E "$$in_files" \ | $(GREP) -Ev '$(_sc_excl)'); \ else \ files=$$($(VC_LIST_EXCEPT)); \ if test -n "$$in_vc_files"; then \ files=$$(echo "$$files" | $(GREP) -E "$$in_vc_files"); \ fi; \ fi; \ \ : Filter by content; \ test -n "$$files" \ && test -n "$$containing" \ && { files=$$(echo "$$files" | xargs $(GREP) -l "$$containing"); } \ || :; \ test -n "$$files" \ && test -n "$$non_containing" \ && { files=$$(echo "$$files" | xargs $(GREP) -vl "$$non_containing"); } \ || :; \ \ : Check for the construct; \ if test -n "$$files"; then \ if test -n "$$prohibit"; then \ echo "$$files" \ | xargs $(GREP) $$with_grep_options $(_ignore_case) -nE \ "$$prohibit" /dev/null \ | $(GREP) -vE "$${exclude:-^$$}" \ && { msg="$$halt" $(_sc_say_and_exit) } \ || :; \ else \ echo "$$files" \ | xargs \ $(GREP) $$with_grep_options $(_ignore_case) -LE "$$require" \ | $(GREP) . \ && { msg="$$halt" $(_sc_say_and_exit) } \ || :; \ fi \ else :; \ fi || :; endef sc_avoid_if_before_free: @$(VC_LIST_EXCEPT) \ | $(GREP) -v useless-if-before-free \ | xargs \ $(srcdir)/$(_build-aux)/useless-if-before-free \ $(useless_free_options) \ && { printf '$(ME): found useless "if"' \ ' before "free" above\n' 1>&2; \ exit 1; } \ || : sc_cast_of_argument_to_free: @prohibit='\/dev/null 2>&1; then \ (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \ tr ' ' '\n' | \ $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \ while read m; do \ $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \ $(AWK) -v file=$$m -e '$($@_awk_)' || exit 1; \ done; \ fi # Using EXIT_SUCCESS as the first argument to error is misleading, # since when that parameter is 0, error does not exit. Use '0' instead. sc_error_exit_success: @prohibit='error *\(EXIT_SUCCESS,' \ in_vc_files='\.[chly]$$' \ halt='found error (EXIT_SUCCESS' \ $(_sc_search_regexp) # "FATAL:" should be fully upper-cased in error messages # "WARNING:" should be fully upper-cased, or fully lower-cased sc_error_message_warn_fatal: @$(VC_LIST_EXCEPT) \ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ | $(GREP) -E '"Warning|"Fatal|"fatal' \ && { echo '$(ME): use FATAL, WARNING or warning' 1>&2; \ exit 1; } \ || : # Error messages should not start with a capital letter sc_error_message_uppercase: @$(VC_LIST_EXCEPT) \ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ | $(GREP) -E '"[A-Z]' \ | $(GREP) -vE '"FATAL|"WARNING|"Java|"C#|PRIuMAX' \ && { echo '$(ME): found capitalized error message' 1>&2; \ exit 1; } \ || : # Error messages should not end with a period sc_error_message_period: @$(VC_LIST_EXCEPT) \ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ | $(GREP) -E '[^."]\."' \ && { echo '$(ME): found error message ending in period' 1>&2; \ exit 1; } \ || : sc_file_system: @prohibit=file''system \ exclude='/proc/filesystems' \ ignore_case=1 \ halt='found use of "file''system"; spell it "file system"' \ $(_sc_search_regexp) # Don't use cpp tests of this symbol. All code assumes config.h is included. sc_prohibit_have_config_h: @prohibit='^# *if.*HAVE''_CONFIG_H' \ halt='found use of HAVE''_CONFIG_H; remove' \ $(_sc_search_regexp) # Nearly all .c files must include . However, we also permit this # via inclusion of a package-specific header, if cfg.mk specified one. # config_h_header must be suitable for grep -E. config_h_header ?= sc_require_config_h: @require='^# *include $(config_h_header)' \ in_vc_files='\.c$$' \ halt='the above files do not include ' \ $(_sc_search_regexp) # Print each file name for which the first #include does not match # $(config_h_header). Like grep -m 1, this only looks at the first match. perl_config_h_first_ = \ -e 'BEGIN {$$ret = 0}' \ -e 'if (/^\# *include\b/) {' \ -e ' if (not m{^\# *include $(config_h_header)}) {' \ -e ' print "$$ARGV\n";' \ -e ' $$ret = 1;' \ -e ' }' \ -e ' \# Move on to next file after first include' \ -e ' close ARGV;' \ -e '}' \ -e 'END {exit $$ret}' # You must include before including any other header file. # This can possibly be via a package-specific header, if given by cfg.mk. sc_require_config_h_first: @if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \ files=$$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$') && \ perl -n $(perl_config_h_first_) $$files || \ { echo '$(ME): the above files include some other header' \ 'before ' 1>&2; exit 1; } || :; \ else :; \ fi sc_prohibit_HAVE_MBRTOWC: @prohibit='\bHAVE_MBRTOWC\b' \ halt="do not use $$prohibit; it is always defined" \ $(_sc_search_regexp) # To use this "command" macro, you must first define two shell variables: # h: the header name, with no enclosing <> or "" # re: a regular expression that matches IFF something provided by $h is used. define _sc_header_without_use dummy=; : so we do not need a semicolon before each use; \ h_esc=`echo '[<"]'"$$h"'[">]'|$(SED) 's/\./\\\\./g'`; \ if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \ files=$$($(GREP) -l '^# *include '"$$h_esc" \ $$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$')) && \ $(GREP) -LE "$$re" $$files | $(GREP) . && \ { echo "$(ME): the above files include $$h but don't use it" \ 1>&2; exit 1; } || :; \ else :; \ fi endef # Prohibit the inclusion of assert.h without an actual use of assert. sc_prohibit_assert_without_use: @h='assert.h' re='\new(file => "/dev/stdin")->as_string'|sed 's/\?://g' # Note this was produced by the above: # _xa1 = \ #x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup) # But we can do better, in at least two ways: # 1) take advantage of two "dup"-suffixed strings: # x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup) # 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable # "char|[cmz]" # x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) _xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) _xa2 = X([CZ]|N?M)ALLOC sc_prohibit_xalloc_without_use: @h='xalloc.h' \ re='\<($(_xa1)|$(_xa2)) *\('\ $(_sc_header_without_use) # Extract function names: # perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/hash.h _hash_re = \ clear|delete|free|get_(first|next)|insert|lookup|print_statistics|reset_tuning _hash_fn = \<($(_hash_re)) *\( _hash_struct = (struct )?\<[Hh]ash_(table|tuning)\> sc_prohibit_hash_without_use: @h='hash.h' \ re='$(_hash_fn)|$(_hash_struct)'\ $(_sc_header_without_use) sc_prohibit_cloexec_without_use: @h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \ $(_sc_header_without_use) sc_prohibit_posixver_without_use: @h='posixver.h' re='\' \ halt='do not use HAVE''_FCNTL_H or O'_NDELAY \ $(_sc_search_regexp) # FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ # Each nonempty ChangeLog line must start with a year number, or a TAB. sc_changelog: @prohibit='^[^12 ]' \ in_vc_files='^ChangeLog$$' \ halt='found unexpected prefix in a ChangeLog' \ $(_sc_search_regexp) # Ensure that each .c file containing a "main" function also # calls bindtextdomain. sc_bindtextdomain: @require='bindtextdomain *\(' \ in_vc_files='\.c$$' \ containing='\
/dev/null \ && : || { die=1; echo $$i; } \ done; \ test $$die = 1 && \ { echo 1>&2 '$(ME): the final line in each of the above is not:'; \ echo 1>&2 'Exit something'; \ exit 1; } || :; \ fi sc_trailing_blank: @prohibit='[ ]$$' \ halt='found trailing blank(s)' \ exclude='^Binary file .* matches$$' \ $(_sc_search_regexp) # Match lines like the following, but where there is only one space # between the options and the description: # -D, --all-repeated[=delimit-method] print all duplicate lines\n longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)? sc_two_space_separator_in_usage: @prohibit='^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \ halt='help2man requires at least two spaces between an option and its description'\ $(_sc_search_regexp) # A regexp matching function names like "error" that may be used # to emit translatable messages. _gl_translatable_diag_func_re ?= error # Look for diagnostics that aren't marked for translation. # This won't find any for which error's format string is on a separate line. sc_unmarked_diagnostics: @prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \ exclude='(_|ngettext ?)\(' \ halt='found unmarked diagnostic(s)' \ $(_sc_search_regexp) # Avoid useless parentheses like those in this example: # #if defined (SYMBOL) || defined (SYM2) sc_useless_cpp_parens: @prohibit='^# *if .*defined *\(' \ halt='found useless parentheses in cpp directive' \ $(_sc_search_regexp) # List headers for which HAVE_HEADER_H is always true, assuming you are # using the appropriate gnulib module. CAUTION: for each "unnecessary" # #if HAVE_HEADER_H that you remove, be sure that your project explicitly # requires the gnulib module that guarantees the usability of that header. gl_assured_headers_ = \ cd $(gnulib_dir)/lib && echo *.in.h|$(SED) 's/\.in\.h//g' # Convert the list of names to upper case, and replace each space with "|". az_ = abcdefghijklmnopqrstuvwxyz AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ gl_header_upper_case_or_ = \ $$($(gl_assured_headers_) \ | tr $(az_)/.- $(AZ_)___ \ | tr -s ' ' '|' \ ) sc_prohibit_always_true_header_tests: @or=$(gl_header_upper_case_or_); \ re="HAVE_($$or)_H"; \ prohibit='\<'"$$re"'\>' \ halt=$$(printf '%s\n' \ 'do not test the above HAVE_
_H symbol(s);' \ ' with the corresponding gnulib module, they are always true') \ $(_sc_search_regexp) sc_prohibit_defined_have_decl_tests: @prohibit='(#[ ]*ifn?def|\[ (]+HAVE_DECL_' \ halt='HAVE_DECL macros are always defined' \ $(_sc_search_regexp) # ================================================================== gl_other_headers_ ?= \ intprops.h \ openat.h \ stat-macros.h # Perl -lne code to extract "significant" cpp-defined symbols from a # gnulib header file, eliminating a few common false-positives. # The exempted names below are defined only conditionally in gnulib, # and hence sometimes must/may be defined in application code. gl_extract_significant_defines_ = \ /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\ && $$2 !~ /(?:rpl_|_used_without_)/\ && $$1 !~ /^(?:NSIG|ENODATA)$$/\ && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\ and print $$1 # Create a list of regular expressions matching the names # of macros that are guaranteed to be defined by parts of gnulib. define def_sym_regex gen_h=$(gl_generated_headers_); \ (cd $(gnulib_dir)/lib; \ for f in *.in.h $(gl_other_headers_); do \ test -f $$f \ && perl -lne '$(gl_extract_significant_defines_)' $$f; \ done; \ ) | sort -u \ | $(SED) 's/^/^ *# *(define|undef) */;s/$$/\\>/' endef # Don't define macros that we already get from gnulib header files. sc_prohibit_always-defined_macros: @if test -d $(gnulib_dir); then \ case $$(echo all: | $(GREP) -l -f - Makefile) in Makefile);; *) \ echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;; \ esac; \ regex=$$($(def_sym_regex)); export regex; \ $(VC_LIST_EXCEPT) \ | xargs sh -c 'echo $$regex | $(GREP) -E -f - "$$@"' \ dummy /dev/null \ && { printf '$(ME): define the above' \ ' via some gnulib .h file\n' 1>&2; \ exit 1; } \ || :; \ fi # ================================================================== # Prohibit checked in backup files. sc_prohibit_backup_files: @$(VC_LIST) | $(GREP) '~$$' && \ { echo '$(ME): found version controlled backup file' 1>&2; \ exit 1; } || : # Require the latest GPL. sc_GPL_version: @prohibit='either ''version [^3]' \ halt='GPL vN, N!=3' \ $(_sc_search_regexp) # Require the latest GFDL. Two regexp, since some .texi files end up # line wrapping between 'Free Documentation License,' and 'Version'. _GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any) sc_GFDL_version: @prohibit='$(_GFDL_regexp)' \ halt='GFDL vN, N!=3' \ $(_sc_search_regexp) # Don't use Texinfo's @acronym{}. # https://lists.gnu.org/r/bug-gnulib/2010-03/msg00321.html texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$ sc_texinfo_acronym: @prohibit='@acronym\{' \ in_vc_files='$(texinfo_suffix_re_)' \ halt='found use of Texinfo @acronym{}' \ $(_sc_search_regexp) cvs_keywords = \ Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State sc_prohibit_cvs_keyword: @prohibit='\$$($(cvs_keywords))\$$' \ halt='do not use CVS keyword expansion' \ $(_sc_search_regexp) # This Perl code is slightly obfuscated. Not only is each "$" doubled # because it's in a Makefile, but the $$c's are comments; we cannot # use "#" due to the way the script ends up concatenated onto one line. # It would be much more concise, and would produce better output (including # counts) if written as: # perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ... # but that would be far less efficient, reading the entire contents # of each file, rather than just the last two bytes of each. # In addition, while the code below detects both blank lines and a missing # newline at EOF, the above detects only the former. # # This is a perl script that is expected to be the single-quoted argument # to a command-line "-le". The remaining arguments are file names. # Print the name of each file that does not end in exactly one newline byte. # I.e., warn if there are blank lines (2 or more newlines), or if the # last byte is not a newline. However, currently we don't complain # about any file that contains exactly one byte. # Exit nonzero if at least one such file is found, otherwise, exit 0. # Warn about, but otherwise ignore open failure. Ignore seek/read failure. # # Use this if you want to remove trailing empty lines from selected files: # perl -pi -0777 -e 's/\n\n+$/\n/' files... # require_exactly_one_NL_at_EOF_ = \ foreach my $$f (@ARGV) \ { \ open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next; \ my $$p = sysseek (F, -2, 2); \ my $$c = "seek failure probably means file has < 2 bytes; ignore"; \ my $$last_two_bytes; \ defined $$p and $$p = sysread F, $$last_two_bytes, 2; \ close F; \ $$c = "ignore read failure"; \ $$p && ($$last_two_bytes eq "\n\n" \ || substr ($$last_two_bytes,1) ne "\n") \ and (print $$f), $$fail=1; \ } \ END { exit defined $$fail } sc_prohibit_empty_lines_at_EOF: @$(VC_LIST_EXCEPT) \ | xargs perl -le '$(require_exactly_one_NL_at_EOF_)' \ || { echo '$(ME): empty line(s) or no newline at EOF' 1>&2; \ exit 1; } \ || : # Make sure we don't use st_blocks. Use ST_NBLOCKS instead. # This is a bit of a kludge, since it prevents use of the string # even in comments, but for now it does the job with no false positives. sc_prohibit_stat_st_blocks: @prohibit='[.>]st_blocks' \ halt='do not use st_blocks; use ST_NBLOCKS' \ $(_sc_search_regexp) # Make sure we don't define any S_IS* macros in src/*.c files. # They're already defined via gnulib's sys/stat.h replacement. sc_prohibit_S_IS_definition: @prohibit='^ *# *define *S_IS' \ halt='do not define S_IS* macros; include ' \ $(_sc_search_regexp) # Perl block to convert a match to FILE_NAME:LINENO:TEST, # that is shared by two definitions below. perl_filename_lineno_text_ = \ -e ' {' \ -e ' $$n = ($$` =~ tr/\n/\n/ + 1);' \ -e ' ($$v = $$&) =~ s/\n/\\n/g;' \ -e ' print "$$ARGV:$$n:$$v\n";' \ -e ' }' prohibit_doubled_words_ = \ the then in an on if is it but for or at and do to # expand the regex before running the check to avoid using expensive captures prohibit_doubled_word_expanded_ = \ $(join $(prohibit_doubled_words_),$(addprefix \s+,$(prohibit_doubled_words_))) prohibit_doubled_word_RE_ ?= \ /\b(?:$(subst $(_sp),|,$(prohibit_doubled_word_expanded_)))\b/gims prohibit_doubled_word_ = \ -e 'while ($(prohibit_doubled_word_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_doubled_word_match_RE_ ?= ^$$ sc_prohibit_doubled_word: @$(VC_LIST_EXCEPT) \ | xargs perl -n -0777 $(prohibit_doubled_word_) \ | $(GREP) -vE '$(ignore_doubled_word_match_RE_)' \ | $(GREP) . \ && { echo '$(ME): doubled words' 1>&2; exit 1; } \ || : # A regular expression matching undesirable combinations of words like # "can not"; this matches them even when the two words appear on different # lines, but not when there is an intervening delimiter like "#" or "*". # Similarly undesirable, "See @xref{...}", since an @xref should start # a sentence. Explicitly prohibit any prefix of "see" or "also". # Also prohibit a prefix matching "\w+ +". # @pxref gets the same see/also treatment and should be parenthesized; # presume it must *not* start a sentence. # POSIX spells it "timestamp" rather than "time\s+stamp", so we do, too. bad_xref_re_ ?= (?:[\w,:;] +|(?:see|also)\s+)\@xref\{ bad_pxref_re_ ?= (?:[.!?]|(?:see|also))\s+\@pxref\{ prohibit_undesirable_word_seq_RE_ ?= \ /(?:\bcan\s+not\b|\btime\s+stamps?\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims prohibit_undesirable_word_seq_ = \ -e 'while ($(prohibit_undesirable_word_seq_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_undesirable_word_sequence_RE_ ?= ^$$ sc_prohibit_undesirable_word_seq: @$(VC_LIST_EXCEPT) \ | xargs perl -n -0777 $(prohibit_undesirable_word_seq_) \ | $(GREP) -vE '$(ignore_undesirable_word_sequence_RE_)' \ | $(GREP) . \ && { echo '$(ME): undesirable word sequence' >&2; exit 1; } \ || : # Except for shell files and for loops, double semicolon is probably a mistake sc_prohibit_double_semicolon: @prohibit='; *;[ {} \]*(/[/*]|$$)' \ in_vc_files='\.[chly]$$' \ exclude='\bfor *\(.*\)' \ halt="Double semicolon detected" \ $(_sc_search_regexp) _ptm1 = use "test C1 && test C2", not "test C1 -''a C2" _ptm2 = use "test C1 || test C2", not "test C1 -''o C2" # Using test's -a and -o operators is not portable. # We prefer test over [, since the latter is spelled [[ in configure.ac. sc_prohibit_test_minus_ao: @prohibit='(\ /dev/null \ || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \ done; \ test $$fail = 1 && \ { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \ exit 1; } || :; \ fi # Warn about "c0nst struct Foo const foo[]", # but not about "char const *const foo" or "#define const const". sc_redundant_const: @prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b' \ halt='redundant "const" in declarations' \ $(_sc_search_regexp) sc_const_long_option: @prohibit='^ *static.*struct option ' \ exclude='const struct option|struct option const' \ halt='add "const" to the above declarations' \ $(_sc_search_regexp) NEWS_hash = \ $$($(SED) -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p' \ $(srcdir)/NEWS \ | perl -0777 -pe \ 's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms' \ | md5sum - \ | $(SED) 's/ .*//') # Ensure that we don't accidentally insert an entry into an old NEWS block. sc_immutable_NEWS: @if test -f $(srcdir)/NEWS; then \ test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : || \ { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \ fi # Update the hash stored above. Do this after each release and # for any corrections to old entries. update-NEWS-hash: NEWS perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \ $(srcdir)/cfg.mk # Ensure that we use only the standard $(VAR) notation, # not @...@ in Makefile.am, now that we can rely on automake # to emit a definition for each substituted variable. # However, there is still one case in which @VAR@ use is not just # legitimate, but actually required: when augmenting an automake-defined # variable with a prefix. For example, gettext uses this: # MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ # otherwise, makeinfo would put German or French (current locale) # navigation hints in the otherwise-English documentation. # # Allow the package to add exceptions via a hook in cfg.mk; # for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by # setting this to ' && !/PRAGMA_SYSTEM_HEADER/'. _makefile_at_at_check_exceptions ?= sc_makefile_at_at_check: @perl -ne '/\@\w+\@/' \ -e ' && !/(\w+)\s+=.*\@\1\@$$/' \ -e ''$(_makefile_at_at_check_exceptions) \ -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \ $$($(VC_LIST_EXCEPT) | $(GREP) -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \ && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : news-check: NEWS $(AM_V_GEN)if $(SED) -n $(news-check-lines-spec)p $< \ | $(GREP) -E $(news-check-regexp) >/dev/null; then \ :; \ else \ echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2; \ exit 1; \ fi sc_makefile_TAB_only_indentation: @prohibit='^ [ ]{8}' \ in_vc_files='akefile|\.mk$$' \ halt='found TAB-8-space indentation' \ $(_sc_search_regexp) sc_m4_quote_check: @prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]' \ in_vc_files='(^configure\.ac|\.m4)$$' \ halt='quote the first arg to AC_DEF*' \ $(_sc_search_regexp) fix_po_file_diag = \ 'you have changed the set of files with translatable diagnostics;\n\ apply the above patch\n' # Generate a list of files in which to search for translatable strings. perl_translatable_files_list_ = \ -e 'foreach $$file (@ARGV) {' \ -e ' \# Consider only file extensions with one or two letters' \ -e ' $$file =~ /\...?$$/ or next;' \ -e ' \# Ignore m4 and mk files' \ -e ' $$file =~ /\.m[4k]$$/ and next;' \ -e ' \# Ignore a .c or .h file with a corresponding .l or .y file' \ -e ' $$file =~ /(.+)\.[ch]$$/ && (-e "$${1}.l" || -e "$${1}.y")' \ -e ' and next;' \ -e ' \# Skip unreadable files' \ -e ' -r $$file or next;' \ -e ' print "$$file ";' \ -e '}' # Verify that all source files using _() (more specifically, files that # match $(_gl_translatable_string_re)) are listed in po/POTFILES.in. po_file ?= $(srcdir)/po/POTFILES.in generated_files ?= $(srcdir)/lib/*.[ch] _gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$) sc_po_check: @if test -f $(po_file); then \ $(GREP) -E -v '^(#|$$)' $(po_file) \ | $(GREP) -v '^src/false\.c$$' | sort > $@-1; \ { $(VC_LIST_EXCEPT); echo $(generated_files); } \ | xargs perl $(perl_translatable_files_list_) \ | xargs $(GREP) -E -l '$(_gl_translatable_string_re)' \ | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ | sort -u > $@-2; \ diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \ || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \ rm -f $@-1 $@-2; \ fi # Sometimes it is useful to change the PATH environment variable # in Makefiles. When doing so, it's better not to use the Unix-centric # path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'. msg = 'Do not use ":" above; use $$(PATH_SEPARATOR) instead' sc_makefile_path_separator_check: @prohibit='PATH[=].*:' \ in_vc_files='akefile|\.mk$$' \ halt=$(msg) \ $(_sc_search_regexp) # Check that 'make alpha' will not fail at the end of the process, # i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release) # and is read-only. writable-files: $(AM_V_GEN)if test -d $(release_archive_dir); then \ for file in $(DIST_ARCHIVES); do \ for p in ./ $(release_archive_dir)/; do \ test -e $$p$$file || continue; \ test -w $$p$$file \ || { echo ERROR: $$p$$file is not writable; fail=1; }; \ done; \ done; \ test "$$fail" && exit 1 || : ; \ else :; \ fi v_etc_file = $(gnulib_dir)/lib/version-etc.c sample-test = tests/sample-test texi = doc/$(PACKAGE).texi # Make sure that the copyright date in $(v_etc_file) is up to date. # Do the same for the $(sample-test) and the main doc/.texi file. sc_copyright_check: @require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' \ in_files=$(v_etc_file) \ halt='out of date copyright in $(v_etc_file); update it' \ $(_sc_search_regexp) @require='# Copyright \(C\) '$$(date +%Y)' Free' \ in_vc_files=$(sample-test) \ halt='out of date copyright in $(sample-test); update it' \ $(_sc_search_regexp) @require='Copyright @copyright\{\} .*'$$(date +%Y) \ in_vc_files=$(texi) \ halt='out of date copyright in $(texi); update it' \ $(_sc_search_regexp) # If tests/help-version exists and seems to be new enough, assume that its # use of init.sh and path_prepend_ is correct, and ensure that every other # use of init.sh is identical. # This is useful because help-version cross-checks prog --version # with $(VERSION), which verifies that its path_prepend_ invocation # sets PATH correctly. This is an inexpensive way to ensure that # the other init.sh-using tests also get it right. _hv_file ?= $(srcdir)/tests/help-version _hv_regex_weak ?= ^ *\. .*/init\.sh" # Fix syntax-highlighters " _hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh" sc_cross_check_PATH_usage_in_tests: @if test -f $(_hv_file); then \ $(GREP) -l 'VERSION mismatch' $(_hv_file) >/dev/null \ || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2; \ exit 0; }; \ $(GREP) -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null \ || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \ exit 1; }; \ good=$$($(GREP) -E '$(_hv_regex_strong)' $(_hv_file)); \ $(VC_LIST_EXCEPT) \ | xargs $(GREP) -lE '$(_hv_regex_weak)' \ | xargs $(GREP) -LFx "$$good" \ | $(GREP) . \ && { printf "$(ME): the above files use" \ " path_prepend_ inconsistently\n" 1>&2; \ exit 1; } \ || :; \ fi # BRE regex of file contents to identify a test script. _test_script_regex ?= \ # In tests, use "compare expected actual", not the reverse. sc_prohibit_reversed_compare_failure: @prohibit='\ vc-diffs || : $(AM_V_at)if test -s vc-diffs; then \ cat vc-diffs; \ echo "Some files are locally modified:" 1>&2; \ exit 1; \ else \ rm vc-diffs; \ fi rel-files = $(DIST_ARCHIVES) gnulib-version = $$(cd $(gnulib_dir) \ && { git describe || git rev-parse --short=10 HEAD; } ) bootstrap-tools ?= autoconf,automake,gnulib gpgv = $$(gpgv2 --version >/dev/null && echo gpgv2 || echo gpgv) # If it's not already specified, derive the GPG key ID from # the signed tag we've just applied to mark this release. gpg_key_ID ?= \ $$(cd $(srcdir) \ && git cat-file tag v$(VERSION) \ | $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null \ | $(AWK) '/^\[GNUPG:\] ERRSIG / {print $$3; exit}') translation_project_ ?= coordinator@translationproject.org # Make info-gnu the default only for a stable release. announcement_Cc_stable = $(translation_project_), $(PACKAGE_BUGREPORT) announcement_mail_headers_stable = \ To: info-gnu@gnu.org \ Cc: $(announcement_Cc_) \ Mail-Followup-To: $(PACKAGE_BUGREPORT) announcement_Cc_alpha = $(translation_project_) announcement_mail_headers_alpha = \ To: $(PACKAGE_BUGREPORT) \ Cc: $(announcement_Cc_) announcement_mail_Cc_beta = $(announcement_mail_Cc_alpha) announcement_mail_headers_beta = $(announcement_mail_headers_alpha) announcement_mail_Cc_ ?= $(announcement_mail_Cc_$(release-type)) announcement_mail_headers_ ?= $(announcement_mail_headers_$(release-type)) announcement: NEWS ChangeLog $(rel-files) # Not $(AM_V_GEN) since the output of this command serves as # announcement message: it would start with " GEN announcement". $(AM_V_at)$(srcdir)/$(_build-aux)/announce-gen \ --mail-headers='$(announcement_mail_headers_)' \ --release-type=$(release-type) \ --package=$(PACKAGE) \ --prev=$(PREV_VERSION) \ --curr=$(VERSION) \ --gpg-key-id=$(gpg_key_ID) \ --srcdir=$(srcdir) \ --news=$(srcdir)/NEWS \ --bootstrap-tools=$(bootstrap-tools) \ $$(case ,$(bootstrap-tools), in (*,gnulib,*) \ echo --gnulib-version=$(gnulib-version);; esac) \ --no-print-checksums \ $(addprefix --url-dir=, $(url_dir_list)) .PHONY: release-commit release-commit: $(AM_V_GEN)cd $(srcdir) \ && $(_build-aux)/do-release-commit-and-tag \ -C $(abs_builddir) $(RELEASE) ## ---------------- ## ## Updating files. ## ## ---------------- ## ftp-gnu = https://ftp.gnu.org/gnu www-gnu = https://www.gnu.org upload_dest_dir_ ?= $(PACKAGE) upload_command = \ $(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \ --to $(gnu_rel_host):$(upload_dest_dir_) \ $(rel-files) emit_upload_commands: @echo ===================================== @echo ===================================== @echo '$(upload_command)' @echo '# send the ~/announce-$(my_distdir) e-mail' @echo ===================================== @echo ===================================== .PHONY: upload upload: $(AM_V_GEN)$(upload_command) define emit-commit-log printf '%s\n' 'maint: post-release administrivia' '' \ '* NEWS: Add header line for next release.' \ '* .prev-version: Record previous version.' \ '* cfg.mk (old_NEWS_hash): Auto-update.' endef .PHONY: no-submodule-changes no-submodule-changes: $(AM_V_GEN)if test -d $(srcdir)/.git \ && git --version >/dev/null 2>&1; then \ diff=$$(cd $(srcdir) && git submodule -q foreach \ git diff-index --name-only HEAD) \ || exit 1; \ case $$diff in '') ;; \ *) echo '$(ME): submodule files are locally modified:'; \ echo "$$diff"; exit 1;; esac; \ else \ : ; \ fi submodule-checks ?= no-submodule-changes public-submodule-commit # Ensure that each sub-module commit we're using is public. # Without this, it is too easy to tag and release code that # cannot be built from a fresh clone. .PHONY: public-submodule-commit public-submodule-commit: $(AM_V_GEN)if test -d $(srcdir)/.git \ && git --version >/dev/null 2>&1; then \ cd $(srcdir) && \ git submodule --quiet foreach \ 'test "$$(git rev-parse "$$sha1")" \ = "$$(git merge-base origin "$$sha1")"' \ || { echo '$(ME): found non-public submodule commit' >&2; \ exit 1; }; \ else \ : ; \ fi # This rule has a high enough utility/cost ratio that it should be a # dependent of "check" by default. However, some of us do occasionally # commit a temporary change that deliberately points to a non-public # submodule commit, and want to be able to use rules like "make check". # In that case, run e.g., "make check gl_public_submodule_commit=" # to disable this test. gl_public_submodule_commit ?= public-submodule-commit check: $(gl_public_submodule_commit) .PHONY: alpha beta stable release ALL_RECURSIVE_TARGETS += alpha beta stable alpha beta stable: $(local-check) writable-files $(submodule-checks) $(AM_V_GEN)test $@ = stable \ && { echo $(VERSION) | $(GREP) -E '^[0-9]+(\.[0-9]+)+$$' \ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ || : $(AM_V_at)$(MAKE) vc-diff-check $(AM_V_at)$(MAKE) news-check $(AM_V_at)$(MAKE) distcheck $(AM_V_at)$(MAKE) dist $(AM_V_at)$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ $(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ release: $(AM_V_GEN)$(MAKE) _version $(AM_V_GEN)$(MAKE) $(release-type) # Override this in cfg.mk if you follow different procedures. release-prep-hook ?= release-prep gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?] .PHONY: release-prep release-prep: $(AM_V_GEN)$(MAKE) --no-print-directory -s announcement \ > ~/announce-$(my_distdir) $(AM_V_at)if test -d $(release_archive_dir); then \ ln $(rel-files) $(release_archive_dir); \ chmod a-w $(rel-files); \ fi $(AM_V_at)echo $(VERSION) > $(prev_version_file) $(AM_V_at)$(MAKE) update-NEWS-hash $(AM_V_at)perl -pi \ -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' \ $(srcdir)/NEWS $(AM_V_at)msg=$$($(emit-commit-log)) || exit 1; \ cd $(srcdir) && $(VC) commit -m "$$msg" -a # Override this with e.g., -s $(srcdir)/some_other_name.texi # if the default $(PACKAGE)-derived name doesn't apply. gendocs_options_ ?= .PHONY: web-manual web-manual: $(AM_V_GEN)test -z "$(manual_title)" \ && { echo define manual_title in cfg.mk 1>&2; exit 1; } || : $(AM_V_at)cd '$(srcdir)/doc'; \ $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \ -o '$(abs_builddir)/doc/manual' \ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ "$(PACKAGE_NAME) - $(manual_title)" $(AM_V_at)echo " *** Upload the doc/manual directory to web-cvs." .PHONY: web-manual-update web-manual-update: $(AM_V_GEN)cd $(srcdir) \ && $(_build-aux)/gnu-web-doc-update -C $(abs_builddir) # Code Coverage init-coverage: $(MAKE) $(AM_MAKEFLAGS) clean lcov --directory . --zerocounters COVERAGE_CCOPTS ?= "-g --coverage" COVERAGE_OUT ?= doc/coverage build-coverage: $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check mkdir -p $(COVERAGE_OUT) lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \ --capture gen-coverage: genhtml --output-directory $(COVERAGE_OUT) \ $(COVERAGE_OUT)/$(PACKAGE).info \ --highlight --frames --legend \ --title "$(PACKAGE_NAME)" coverage: $(MAKE) init-coverage $(MAKE) build-coverage $(MAKE) gen-coverage # Some projects carry local adjustments for gnulib modules via patches in # a gnulib patch directory whose default name is gl/ (defined in bootstrap # via local_gl_dir=gl). Those patches become stale as the originals evolve # in gnulib. Use this rule to refresh any stale patches. It applies each # patch to the original in $(gnulib_dir) and uses the temporary result to # generate a fuzz-free .diff file. If you customize the name of your local # gnulib patch directory via bootstrap.conf, this rule detects that name. # Run this from a non-VPATH (i.e., srcdir) build directory. .PHONY: refresh-gnulib-patches refresh-gnulib-patches: gl=gl; \ if test -f bootstrap.conf; then \ t=$$(perl -lne '/^\s*local_gl_dir=(\S+)/ and $$d=$$1;' \ -e 'END{defined $$d and print $$d}' bootstrap.conf); \ test -n "$$t" && gl=$$t; \ fi; \ for diff in $$(cd $$gl; git ls-files | $(GREP) '\.diff$$'); do \ b=$$(printf %s "$$diff"|$(SED) 's/\.diff$$//'); \ VERSION_CONTROL=none \ patch "$(gnulib_dir)/$$b" "$$gl/$$diff" || exit 1; \ ( cd $(gnulib_dir) || exit 1; \ git diff "$$b" > "../$$gl/$$diff"; \ git checkout $$b ) || exit 1; \ done # Update gettext files. PACKAGE ?= $(shell basename $(PWD)) PO_DOMAIN ?= $(PACKAGE) POURL = https://translationproject.org/latest/$(PO_DOMAIN)/ PODIR ?= po refresh-po: rm -f $(PODIR)/*.po && \ echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \ wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \ echo 'en@boldquot' > $(PODIR)/LINGUAS && \ echo 'en@quot' >> $(PODIR)/LINGUAS && \ ls $(PODIR)/*.po | $(SED) 's/\.po//;s,$(PODIR)/,,' | \ sort >> $(PODIR)/LINGUAS # Running indent once is not idempotent, but running it twice is. INDENT_SOURCES ?= $(C_SOURCES) .PHONY: indent indent: indent $(INDENT_SOURCES) indent $(INDENT_SOURCES) # If you want to set UPDATE_COPYRIGHT_* environment variables, # put the assignments in this variable. update-copyright-env ?= # Run this rule once per year (usually early in January) # to update all FSF copyright year lists in your project. # If you have an additional project-specific rule, # add it in cfg.mk along with a line 'update-copyright: prereq'. # By default, exclude all variants of COPYING; you can also # add exemptions (such as ChangeLog..* for rotated change logs) # in the file .x-update-copyright. .PHONY: update-copyright update-copyright: $(AM_V_GEN)$(GREP) -l -w Copyright \ $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \ | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@ # This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not # overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS. # NOTE: to override any _gl_TS_* default value, you must # define the variable(s) using "export" in cfg.mk. _gl_TS_dir ?= src ALL_RECURSIVE_TARGETS += sc_tight_scope sc_tight_scope: tight-scope.mk @fail=0; \ if ! $(GREP) '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk \ > /dev/null \ && ! $(GREP) -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \ > /dev/null 2>&1; then \ echo '$(ME): skipping $@'; \ else \ $(MAKE) -s -C $(_gl_TS_dir) \ -f Makefile \ -f $(abs_top_srcdir)/cfg.mk \ -f $(abs_top_builddir)/$< \ _gl_tight_scope \ || fail=1; \ fi; \ rm -f $<; \ exit $$fail tight-scope.mk: $(ME) @rm -f $@ $@-t @perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t @chmod a=r $@-t && mv $@-t $@ ifeq (a,b) # TS-start # Most functions should have static scope. # Any that don't must be marked with 'extern', but 'main' # and 'usage' are exceptions: they're always extern, but # do not need to be marked. Symbols matching '__.*' are # reserved by the compiler, so are automatically excluded below. _gl_TS_unmarked_extern_functions ?= main usage _gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\w+) *\(/ # If your project uses a macro like "XTERN", then put # the following in cfg.mk to override this default: # export _gl_TS_extern = extern|XTERN _gl_TS_extern ?= extern # The second nm|grep checks for file-scope variables with 'extern' scope. # Without gnulib's progname module, you might put program_name here. # Symbols matching '__.*' are reserved by the compiler, # so are automatically excluded below. _gl_TS_unmarked_extern_vars ?= # NOTE: the _match variables are perl expressions -- not mere regular # expressions -- so that you can extend them to match other patterns # and easily extract matched variable names. # For example, if your project declares some global variables via # a macro like this: GLOBAL(type, var_name, initializer), then you # can override this definition to automatically extract those names: # export _gl_TS_var_match = \ # /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?\])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/ _gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?\])?;/ # The names of object files in (or relative to) $(_gl_TS_dir). _gl_TS_obj_files ?= *.$(OBJEXT) # Files in which to search for the one-line style extern declarations. # $(_gl_TS_dir)-relative. _gl_TS_headers ?= $(noinst_HEADERS) _gl_TS_other_headers ?= *.h .PHONY: _gl_tight_scope _gl_tight_scope: $(bin_PROGRAMS) sed_wrap='s/^/^_?/;s/$$/$$/'; \ t=exceptions-$$$$; \ trap 's=$$?; rm -f $$t; exit $$s' 0; \ for sig in 1 2 3 13 15; do \ eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \ done; \ src=`for f in $(SOURCES); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ hdr=`for f in $(_gl_TS_headers); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ ( printf '%s\n' '__.*' $(_gl_TS_unmarked_extern_functions); \ $(GREP) -h -A1 '^extern .*[^;]$$' $$src \ | $(GREP) -vE '^(extern |--|#)' | $(SED) 's/ .*//; /^$$/d'; \ perl -lne \ '$(_gl_TS_function_match) and print $$1' $$hdr; \ ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ nm -g $(_gl_TS_obj_files)|$(SED) -n 's/.* T //p'|$(GREP) -Ev -f $$t \ && { echo the above functions should have static scope >&2; \ exit 1; } || : ; \ ( printf '%s\n' '__.*' main $(_gl_TS_unmarked_extern_vars); \ perl -lne '$(_gl_TS_var_match) and print $$1' \ $$hdr $(_gl_TS_other_headers) \ ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ nm -g $(_gl_TS_obj_files) | $(SED) -n 's/.* [BCDGRS] //p' \ | sort -u | $(GREP) -Ev -f $$t \ && { echo the above variables should have static scope >&2; \ exit 1; } || : # TS-end endif